{"text_format":"1","workbook":"xlsx","n_sheets":14,"sheets":["User guide","Structure","Summary Page","Documentation","Structure & Clarity","Verification","Validation","Data & Assumptions","Model score","QA plan","QA history","Issues Log","Version Log","Lookups"],"not_rendered":{"charts":2,"images":1,"macros":1,"external_links":0,"defined_names":81,"comments":1,"pivot_tables":0},"unopened":[],"bounds":{"document_bytes":16777216,"sheet_cells":100000,"rows_first":2000,"rows_last":500,"rows_between":2000,"halvings":0,"cell_chars":16384,"cell_head_chars":4096},"cells_cut":0,"cells_raw":0,"read":"whole","date_system":"1900"}

{"sheet":"User guide","index":0,"n_rows":36,"n_cols":11,"rows_kept":36,"cut":false,"hidden":false,"merged":[[5,1,5,6],[7,1,7,6],[9,1,9,6],[28,1,28,6]]}
[null,null,null,null,null,"Non-Excel models"]
[{"$f":"IF(SecurityClassification=\"OFFICIAL\",\"\",SecurityClassification & \" - \")  & DocumentName & \" QA log - version \" & VersionNumber","v":" -  QA log - version "}]
[]
[null,"QA LOG SCOPE"]
[null,"What / why?"]
[null,"The QA log is a list of assurance activities such that if carried out they provide confidence to the model developer(s), assurer(s) and user(s) that a given version of the model is fit for purpose (with 'purpose' defined in the model scope documentation). It should be easy to assess the level of confidence in the model through the scoring system (models should aim for 90%), and to clearly identify omissions or areas for improvement so that analysts and decision makers can judge the risks of using outputs from the model as it stands."]
[null,"Who is responsible for the log? "]
[null,"The main model developer must ensure that the log is up to date. All in-house models must have a log, as must all new 3rd party models.  When working with a 3rd party you should agree who will be responsible for maintaining an up to date log within the 3rd party or the Department. Log completion for existing 3rd party models should be judged on a case-by-case assessment (based on size / complexity / business criticality etc). All QA work completed should be recorded; including by whom, their specialism / authority, and the review date. It is mandatory for at least one person in addition to the model owner to carry out the checks."]
[null,"When is it used?"]
[null," It should be completed during model development by the developer and post-development by those performing QA work. It should be sent alongside any analysis that goes for clearance as it can be used to assess the risk associated with any evidence generated by the model."]
[]
[null,"USER GUIDE"]
[null,"What to do"]
[null,"1) Check this is the correct QA log version. This version should be used only for non-Excel models. If your model is developed in Excel, please use the alternative Excel version"]
[null,"2) If the QA log has been already filled in, check that the previous QA review information has been recorded in the 'QA history' sheet. If not, press the 'Update QA History' button in this sheet."]
[null,"3) Complete the summary page with the required information in the white boxes. It is fine to overwrite if the previous information has been recorded."]
[null,"4) Complete the data required in the 5 orange tabs. There is guidance on how to do this below. It is fine to overwrite if the previous information has been recorded."]
[null,"5) Use the Issues Log sheet to log the outstanding issues in the model."]
[null,"6) After all the relevant cells have been filled, press the button in the 'QA history' sheet to record the information."]
[null,"7) Let your QA contact at the Department know that the QA log was created / updated."]
[null,"8) Provide feedback to us on the QA log (if relevant)."]
[null,"What not to do"]
[null,"1) Change the structure of the sheets (e.g. add new columns, rename table headers...)"]
[null,"2) Leave blank spaces without explaining why."]
[null,"3) Create a new QA log for a model that already has one. Every model should have one QA log and record all the quality assurance work there."]
[null,"Legend"]
[null,"To be completed by user","Not to be changed"]
[null,"Notes"]
[null,"1) If the QA log is used outside the Department some of the links provided may not work as they refer to internal documents. For any issues contact the Modelling Integrity Team. \n2) The log is protected to avoid changes in the structure. All the relevant fields are not locked and can be filled also in protected mode. If for sensible reasons you will need to change the structure contact the Modelling Integrity Team and you will receive an unprotected version.\n3) QA should be proportionate to the model complexity and importance. The QA tasks described in the orange tabs are appropriate for complex, business critical models; if the model is simple and not crucial for the department you may consider a lower level of QA. Contact the MIT if you have any doubts\n4) For any issues or questions please contact the Modelling Integrity Team at modellingintegrity@energysecurity.gov.uk  "]
[null,"Contacts"]
[null,"Webpage for QA files","https://www.gov.uk/government/collections/quality-assurance-tools-and-guidance-in-decc"]
[null,"Email address","modellingintegrity@energysecurity.gov.uk  "]
[]
[null,null,"Task Code","QA requirement","Guidance and links","Performed by","Rating","Rating guidelines","Current status (issues found)","Evidence (when applicable)","Outstanding work"]
[null,"EXPLANATION ","Unique task code","This column includes all tasks that should be completed to satisfactorily quality assure a model. Some tasks are specific to Excel-based models. If your model is not Excel-based we recommend that you record relevant comments and evidence where possible for the software used or to mark it as N/A if that is not possible.","This could include:\n - a link to the template;\n - a link to guidance;\n - an explanation of how to perform the check.","Name of the person who performed the check","Rating of the model performance against the QA requirement. Follow the guidance in the column to the right.","Assessment of performance (from 1-5) against the QA task. The general guideline for the rating is as follows:\n\n1) delivered, fully in place and all risks managed\n2) delivery almost complete and any residual risks in hand\n3) mostly delivered, some outstanding risks or issues\n4) some elements delivered, but some work outstanding or risks not fully handled\n5) some elements are not delivered, or substantial risks remain\n","Explanation of the rating assigned.\n\nHow is the model performing against that QA requirement? Are there any issues? \n\nIf the QA requirement is not applicable to the model explain here why.","Link to documentation confirming the status of the QA on a given task - for higher ratings (1-2) evidence should to be available.","This includes all outstanding actions required to achieve the highest rating. You should label these actions as \"Essential\", \"Should have\" and \"Nice to have\" according to their importance."]
[null,"EXAMPLE","D1","Scope Document\nDoes a clear and comprehensive project scope document exist with evidence of key stakeholder involvement and sign off?\nThis may be part of the current model report template or a separate document.","Please open the Model Report template for guidance on documentation","John Smith (senior engineer, Department)","3) Some issues","1) An up to date scope document exists including all information contained in the template, and model boundaries and limitations are well specified\n2) Near-complete scope document exists with the information contained in the template, and model boundaries and limitations are mostly specified\n3) Scope document exists with some information from the template, but some elements are now out of date or model boundaries and limitations are partially specified\n4) Scope document exists but was never reviewed and it doesn't match any longer with the model, or model boundaries and limitations are not well specified \n5) Scope document missing","The scope document exists but was not updated or reviewed. The model has been subject to several updates from the  time the scope document was written so limitations and key exclusions need to be reviewed."," [link to the document]","Must\n\nShould\nThe [model team] should meet with the relevant stakeholder group to check whether the scope document is still relevant and update it if necessary. \n\nCould"]

{"sheet":"Structure","index":1,"n_rows":27,"n_cols":1,"rows_kept":27,"cut":false,"hidden":false,"merged":[[18,0,25,0],[26,0,34,0],[10,0,17,0]]}
[]
[{"$f":"IF(SecurityClassification=\"OFFICIAL\",\"\",SecurityClassification & \" - \")  & DocumentName & \" QA log - version \" & VersionNumber","v":" -  QA log - version "}]
[]
[]
[]
[]
[]
[]
[]
[]
["WHY ARE WE DOING THIS"]
[]
[]
[]
[]
[]
[]
[]
["QA REQUIREMENTS"]
[]
[]
[]
[]
[]
[]
[]
["CHECKLIST"]

{"sheet":"Summary Page","index":2,"n_rows":37,"n_cols":4,"rows_kept":37,"cut":false,"hidden":false,"merged":[]}
[]
[{"$f":"IF(SecurityClassification=\"OFFICIAL\",\"\",SecurityClassification & \" - \")  & DocumentName & \" QA log - version \" & VersionNumber","v":" -  QA log - version "}]
[]
[]
[null,null,null,"Guidance"]
[null,"Security Classification",null,"Consider whether the log may contain sensitive information and select the appropriate security classification"]
[]
[null,"Model Name",null,"Name of the model, not just the acronym"]
[]
[null,"Model Version",null,"Version of the model on which the QA log is based on"]
[]
[null,"Model analyst/developer",null,"Main analyst / developer of the model"]
[]
[null,"QA review performed by",null,"Who completed given version of the log"]
[]
[null,"Date of QA review",null,"Date when the QA log has been completed and shared with the Department QA contact"]
[]
[null,"Reason for review",null,"- \"QA log created\" if it is the first log completed for the model\n- \"QA update\" if the log has been updated in some places after some model developments. No comprehensive review carried out\n- \"QA review (non MIT)\" if a comprehensive review has been carried out either by the developer or by someone else but not by MIT\n- \"MIT formal review\" if the log has been completed after the Modelling Integrity Team (MIT) formal review"]
[]
[null,"Model location",null,"Link to the model's location"]
[]
[null,"REVIEW BELOW "]
[]
[null,"Worksheet Descriptions - 5 main QA sections","Worksheet Name","Why this matters"]
[null,null,"Documentation","A model may be developed over a number of years by a variety of developers - therefore a process relying on a model is at risk from lack of or poor documentation.\nDocumentation is critical for allowing the transfer of knowledge from developers to users, auditors and future developers. No or limited documentation / commentary to explain the analysis or model may result in inappropriate use or inappropriate adoption for a new problem. It is prudent to have informative user guides and technical documentation, and to ensure that a number of staff are sufficiently well versed in a model to cope with any sudden departures or absence of key staff. Further to this, documentation should provide the relevant SRO with evidence of model requirements, governance approval and stakeholder engagement through the process. Finally, having an agreed scope & specification ensures that modellers, customers and other stakeholders understands what the model will and will not do (\"acceptability criteria\") given time and resource constraints and unnecessary modelling is reduced or stopped.\n\nIt is important that effort spent on documentation is proportionate, and there are various ways in which good documentation can be achieved including providing comments on the code in the model itself.  It isn’t always necessary to have a report entitled ‘Documentation’."]
[null,null,"Structure & Clarity","A well built spreadsheet is clearer to follow for the modeller and the end-user.  This means that errors are less likely to occur and are easier to spot when they do.  This reduces workload and overhead at all later stages, which reduces cost to the department."]
[null,null,"Verification","Verification is the process of checking that a model meets specifications and that it fulfils its intended purpose. Verification is used to check that \"the equations are being solved right\". It checks that the equations have been implemented correctly, and is generally thought of as being more objective than validation. "]
[null,null,"Validation"," Validation is used to check that \"the right equations are being solved\", i.e. it checks that the correct model is being used. This is done by implementing a number of tests."]
[null,null,"Data & Assumptions","Understanding the quality of data used as an input to a model will ensure that there is a better understanding of the output.  No matter how well designed and built a model is, outputs will be heavily dependent upon input values.  Sometimes, lower quality data is unavoidable, which is why determining the impact / uncertainty of this to the total model output (with sensitivity analysis etc..) is critical."]
[]
[]
[null,"Worksheet Descriptions - Information on the model QA","Model Score","Score for the model based on the Model Scoring System"]
[null,null,"QA plan","Sheet to list QA activities that will be carried out on the model in order to reach a QA score of 90% or more. "]
[null,null,"QA history","A log of the evolution of the QA of the model"]
[null,null,"Issues Log","Log of errors with sheet and cell references"]
[null,null,"Version Log","Version control of the QA log itself"]
[null,null,"Lookups","Dimensions used in the data lists and weights used to calculate the model score"]

{"sheet":"Documentation","index":3,"n_rows":19,"n_cols":10,"rows_kept":19,"cut":false,"hidden":false,"merged":[]}
[]
[{"$f":"IF(SecurityClassification=\"OFFICIAL\",\"\",SecurityClassification & \" - \")  & DocumentName & \" QA log - version \" & VersionNumber","v":" -  QA log - version "}]
[]
[null,"QA should be proportionate to the model complexity and importance. The tasks described below are appropriate for complex, business critical models and should be interpreted flexibly according to the model specific characteristics and status. Contact the Modelling Integrity Team if you have any doubts"]
[null,"modellingintegrity@energysecurity.gov.uk  "]
[]
[null,"Task Code","QA requirement","Guidance and links","Performed by","Rating","Rating guidelines","Current status (issues found)","Evidence (when applicable)","Outstanding work"]
[null,"Example","Scope Document\nDoes a clear and comprehensive project scope document exist with evidence of key stakeholder involvement and sign off?\nThis may be part of the current model report template or a separate document.","Please open the Model Report file for guidance on documentation","John Smith (senior engineer, Department)","3) Some issues","1) An up to date scope document exists including all information contained in the template, and model boundaries and limitations are well specified\n2) Near-complete scope document exists with the information contained in the template, and model boundaries and limitations are mostly specified\n3) Scope document exists with some information from the template, but some elements are now out of date or model boundaries and limitations are partially specified\n4) Scope document exists but was never reviewed and it doesn't match any longer with the model, or model boundaries and limitations are not well specified \n5) Scope document missing","The scope document exists but was not updated or reviewed. The model has been subject to several updates from the  time the scope document was written so limitations and key exclusions need to be reviewed."," [link to the document]","Must\n\nShould\nThe [model team] should meet with the relevant stakeholder group to check whether the scope document is still relevant and update it if necessary. \n\nCould"]
[null,"D1","Scope Document\nDoes a clear and comprehensive project scope document exist with evidence of key stakeholder involvement and sign off?\nThis may be part of the current model report template or a separate document.","Click here to open the Model Report Template",null,null,"1) An up to date scope document exists including all information contained in the template, and model boundaries and limitations are well specified\n2) Near-complete scope document exists with the information contained in the template, and model boundaries and limitations are mostly specified\n3) Scope document exists with some information from the template, but some elements are now out of date or model boundaries and limitations are partially specified\n4) Scope document exists but was never reviewed and it doesn't match any longer with the model, or model boundaries and limitations are not well specified \n5) Scope document missing",null,null,"Must\n\nShould\n\nCould"]
[null,"D2","Spec Document\nHas model specification document, defining precisely what the model is required to do, been completed and signed off? \n\nThis may be part of the current model report template or a separate document.","Click here to open the Model Report Template",null,null,"1) An up to date specification document exists including all information contained in the template detailing all requirements of the model\n2) Near-complete specification document exists with the information contained in the template detailing most requirements of the model or model and model limitations are largely understood\n3) Specification document exists with some information from the template, or the model requirements are partially specified\n4) Specification document exists but was never reviewed and it doesn't match any longer with the model, or model requirements are not well determined\n5) Specification document missing",null,null,"Must\n\nShould\n\nCould"]
[null,"D3","User guide\nIs user documentation sufficiently clear and able to support independent use of the model for a new model user who needs to run/operate the model and view outputs? (user guide could be within or outside of the model)","Click here to open the Model Report Template",null,null,"1) Comprehensive user guide (or equivalent documentation within the model) enables model use, is easily found and up to date\n2) User guide available and enables model use but some information is missing or it is not up to date\n3) User guide not available, but running the model is easy and intuitive  \n4) User guide not available but a new user could understand  key model functionalities relatively quickly\n5) No documentation available to support the user who cannot understand how to run the model in a relatively short time period",null,null,"Must\n\nShould\n\nCould"]
[null,"D4","Technical guide\nIs technical documentation sufficiently clear and able to support independent maintenance and any future development of the model?\n\nThis may be part of the current model report template or a separate technical document and may reference comments embedded within the model.\n\nIs there documentation detailing compatible versions of any packages / Libraries used?","Click here to open the Model Report Template",null,null,"1) Comprehensive and informative technical guide available and up to date\n2) Technical guide available but some information is missing or it is not up to date\n3) Technical guide not available, but most information is missing or is not up to date\n4) Technical guide not available, but some technical info can be found within the model\n5) No technical documentation either in external document or within the model available to help users with future model adaptations",null,null,"Must\n\nShould\n\nCould"]
[null,"D5","ReadMe\nDoes an up-to-date ReadMe exist providing clear and concise high-level details on the purpose of the model, it's ownership and what it does? \n\nImportantly, does the ReadMe detail how to set-up the model, inlcuding any necessary containers and environments, and then how to run the code?","Click to Open ReadMe Template",null,null,"1) ReadMe exists enabling new user to understand the purpose of the model at a glance, who has developed it and what the major components are. There are clear instructutions on setting up any containers or environment for the model and how to run the code.\n2) ReadMe is available showing most high-level information but some details are missing or it is convoluted.  The ReadMe allows smooth set-up and running of the model.\n3) ReadMe is available showing most high-level details but some details are missing or it is convoluted. There are some details missing on setting up the model or running the code.\n4) ReadMe is missing some key information about the model and is quite sparse, making it difficult to understand what needs set up to run the model successfully.\n5) No ReadMe is available.",null,null,"Must\n\nShould\n\nCould"]
[null,"D6","Code Comments and internal documentation\nIs the code sufficiently and appropriately commented? Do comments express the intent of the code i.e. explain \"why?\" rather than \"what\"?\n\nIs there a description of what each module does?\n\nAre functions / classes, including arguments and outputs, explained clearly? Is human-readable documentation (e.g. docstrings for functions / classes) available for the model?","Click here to open \"Commenting Code Effectively\"",null,null,"1. Code is well-commented, with clear explanations of the intent of the code and what each module does. Functions and classes, including arguments and outputs, are clearly explained, and human-readable documentation (e.g., docstrings) is available for the model.\n2. Code is sufficiently commented, with explanations of the intent of the code.  There may be some gaps in what every module, function or class does or human-readable documentation may not be consistently available for the model.\n3. Code may not be sufficiently commented, with limited explanations of the intent of the code and what each module does. Functions and classes may not be clearly explained, and human-readable documentation may be incomplete or missing for the model.\n4. Code is poorly commented, with little explanation of the intent of the code or what each module does. Functions and classes are not clearly explained, and human-readable documentation is missing or inadequate for the model.\n5. Code is not commented, making it difficult to understand the intent of the code or what each module does. Functions and classes are not explained, and there is no human-readable documentation for the model.",null,null,"Must\n\nShould\n\nCould"]
[null,"D7","Git / Version Control\nIs version control tracked using Git, or does an up to date version control log exist?\n\nIs there a consistent Git workflow used, or labelling system if using a log? \n\nIs it clear which version of the model one is working on and what has changed since previous versions? If using Git, are commits made often and clear commit messages used?\n\nIs the distinction between version and scenario always clear and properly documented? If using Git, are different development streams represented by separate branches and named appropriately?","Click here to open \"Utilising Gitlab Effectively\"",null,null,"1) Git has been used and a consistent workflow followed with descriptive branch and commit names and messages used. OR a comprehensive version log exists and follows a clear logic and labelling system with descriptions of any changes.\n2) Git has been used but some commit and branch naming is not clear. OR a Version log and labelling exist and are largely complete but there are a few gaps or inconsistencies\n3) Git has been used but some commit messages are missing and there is alot of branch clutter. OR A version log and labelling system exists but not all the versions were logged or the descriptions of the changes performed are limited\n4) Git has been used but there is no branch structure or commit messages. OR No version log, but a version labelling allows understand which model version is used\n5) Git has not been used. OR No version log and no version labelling",null,null,"Must\n\nShould\n\nCould"]
[null,"D8","Governance and responsibilities\nHave responsibilities and accountabilities been assigned with sign off process completed?\n\nHave all relevant model / QA risks been identified, logged and escalated as necessary and with appropriate mitigation actions put in place? \n\nAre the relevant file organised in sensible folder structure? Are they accessible to the people who need them?","The Governance Table can be found in the Model Report Template. Click here to open the Template. ",null,null,"1) Clear evidence of accountabilities, risk management and signoff. Folder structure is simple and easy to understand with all relevant files saved in a clear place\n2) Near complete evidence of accountabilities, risk management and signoff. Good folder structure\n3) Some evidence of accountabilities, risk management and signoff. Some issues regarding folder structure\n4) Little evidence of accountabilities, risk management and signoff. Folder structure is confusing\n5) Insufficient evidence of accountabilities, risk management and signoff. It is difficult for new users to find the relevant files",null,null,"Must\n\nShould\n\nCould"]
[null,"D9","Model classification & security\nHas the model been assigned a security classification?\n\nIf the model uses sensitive data sources, are the appropriate data protection procedures being followed? Is the access to sensitive information restricted to only the people that need to work with it?\n\nIf relevant, is appropriate security testing planned and carried out?","See the Department Security Classification Guidance",null,null,"1) The model doesn't contain sensitive data sources and information OR data protection/classification procedures correctly followed. Security classification is indicated for the whole model and for the relevant data sources\n2) The model contains sensitive info and mostly complete data protection/classification procedures are in place\n3) The model contains sensitive info but only some data protection/classification procedures for model / data are in place\n4) The model contains sensitive info and there are significant concerns about  data protection/classification procedures\n5) No evidence that classifications have been considered or labels are in place even if the model contains sensitive data",null,null,"Must\n\nShould\n\nCould"]
[null,"D10","QA planning and resourcing\n\nHas an appropriate QA plan been implemented with adequate consideration of resource quantity and skills required?  Does it give dates when each task will be complete, and do the plans give enough to reach the target score (90% for business-critical models, and 85% for other models)?\nDoes the plan include a list of specific checks that need to be done on the model before outputs are shared?\n\nHave the verification and validation activities been properly logged and commented? Have the recommendations highlighted in previous QA exercises (e.g. in the issues log) been implemented?","Your QA plan should be stored within the 'QA plan' sheet in this file.",null,null,"1) A comprehensive QA plan is embedded within this QA log. QA reviews have been (or are planned to be) periodically carried out and documented. Time and resources have been planned to address QA recommendations, and the actions listed will get the model to the target score\n2) Mostly complete evidence of QA plan and planned/previous QA work., and the actions listed will get the model to the target score\n3) Some complete evidence of QA plan and previous QA work, but future actions are not enough to reach the target score\n4) Little evidence of QA plan and previous QA work\n5) No evidence of QA plan and previous QA work",null,null,"Must\n\nShould\n\nCould"]
[null,"D11","Business continuity & Disaster Recovery \nHas an accurate plan (including training, specific guidance etc) be developed to guarantee business continuity?\n\nAre the competencies needed to run and develop the model spread within a sufficient number of people?\n\nIs an appropriate disaster recovery plan in place?","What is business continuity and why is it important?",null,null,"1) There is no or very limited risk regarding business continuity OR an accurate and appropriate plan is in place\n2) Limited business continuity risk. This has been considered and some mitigation actions have been considered and undertaken\n3) Limited business continuity risk, but no or inappropriate mitigation actions have been undertaken\n4) Medium business continuity risk and no or inappropriate mitigation actions\n5) Significant business continuity risk and no or inappropriate mitigation actions\n",null,null,"Must\n\nShould\n\nCould"]

{"sheet":"Structure & Clarity","index":4,"n_rows":14,"n_cols":10,"rows_kept":14,"cut":false,"hidden":false,"merged":[]}
[]
[{"$f":"IF(SecurityClassification=\"OFFICIAL\",\"\",SecurityClassification & \" - \")  & DocumentName & \" QA log - version \" & VersionNumber","v":" -  QA log - version "}]
[]
[null,"QA should be proportionate to the model complexity and importance. The tasks described below are appropriate for complex, business critical models and should be interpreted flexibly according to the model specific characteristics and status. Contact the Modelling Integrity Team if you have any doubts"]
[null,"modellingintegrity@energysecurity.gov.uk  "]
[]
[null,"Task Code","QA requirement","Guidance and links","Performed by","Rating","Rating guidelines","Current status (issues found)","Evidence (when applicable)","Outstanding work"]
["`","Example (S3)","Code Comments\nIs the code sufficiently and appropriately commented? \n\nIs there a description of what each module does?","Module comments should include:\n1.Name of the module.\n 2.Purpose of the Module.\n 3.Description of the Module (In brief).\n 4.Original Author\n\nAs a general rule, each line of the code should be commented.","John Smith (senior engineer, Department)","3) Some issues","1) All the most significant lines of the code are commented. It is clearly and exhaustively explained how the code works and how it is used in the model\n2)The majority of the code is sufficiently commented and it is immediately clear how the code works but it is not fully explained\n3) Comments are present and clear and the code can be understood, but there are gaps and some further explanations would aid understanding\n4) There are some comments but the code is not easy to understand without investigation.\n5) There are very few comments or they are not properly explained. It is not at all easy to understand what the code does or how it is used in the model. ","Comments are generally used sensibly in the code. A description of the modules is included but it could be improved as some relevant information is missing, such as the name of the author.\n\nSome lines of code would benefit from further commenting: for example it would be good to have a description of why some variables are used and what they represent. Some other comments need to be updated as they don't seem to reflect what is done at the moment in the model. The issues Log contains a list of issues regarding code comments","See \"Issues Log\" sheet","Must\nCheck the Issues Log to identify all the lines of code which should be better commented\n\nShould\nInclude a description at the top of each module\n\nCould"]
[null,"S1","Project Structure\nIs a clear, standard directory structure used in Git or Sharepoint which is relevant for the project, as a minimum, separate folders for code, data, documentation and outputs?\n\nWhere documentation, code and outputs are saved on different platforms is there clear guidance on where everything is saved?\n\nDoes the project contain any data / structure / clutter which serves no apparent purpose?\n","As a project grows it becomes more important to keep your project structure clean. Every project is different and the right way to organise your project might differ from another project.\n\nClick here to see some principles that are useful to consider.",null,null,"1: Very well structured and organised with code, data and documentation separated. Clear guidance provided on file location across platforms if not in one location. Data is clean and free of clutter.\n2: Good directory structure, but not consistently applied or some code and data not separated. Guidance on file location across platforms is provided but may not be clear. \n3: Fair directory structure, but not consistently applied or unclear. Some files may be difficult to locate, and guidance on file location across platforms is not clear. Some unnecessary data or structure may be present.\n4: Poor directory structure, making maintenance difficult. Guidance on file location across platforms is unclear, making it difficult to locate some files. Some unnecessary data or structure present.\n5: No obvious directory structure or guidance provided. Files are scattered across platforms and disorganized. Significant unnecessary data or structure present."]
[null,"S2","Model structure\nIs a map of the model available or are diagrams used to map out the interdependencies between scripts / classes / functions where appropriate? \n\nAre functions used to reduce repetition and simplify the script?  \n\nIs the code modularised? Are functions saved in separate scripts and sourced in the main code? \n\nAre packages loaded at the start of the script?\n\nIs the model designed in a way that makes enhancing the functionality straightforward without making major changes to the system infrastructure?","Breaking your code down into smaller, more manageable chunks is a sensible way to improve readability. Regardless of the language, there are often techniques to containerise your code into self-contained parts such as modules, classes or functions. \n\nVisualising how these interact makes understanding a model more straightforward. \n\nClick here for further information",null,null,"1) A model map exists and has been used to identify possible issues with the structure. The model structure is clear, simple and free of unused data / formulae\n2) The model has a clear and simple structure, but a map is not available. May include a small amount of unused data / formulae\n3) Some issues with the structure: the number of interactions between modules is quite high and the overall structure is not the most sensible. May include some unused data / formulae\n4) Many issues about the structure: it is not possible to describe easily the calculation flow. Model could include significant amounts of unused data / formulae\n5) Extremely complicated structure. It is not clear how the calculation flows. Model could include substantial amounts of unused data / formulae",null,null,"Must\n\nShould\n\nCould"]
[null,"S3","Code Consistency and Convention\nIs a coding convention used and consistent within the model?\n\nDoes code follow a linear structure that can be easily run by users and other analysts?\n\nIs there consistent indentation, comments, declarations, statements, white space, naming conventions?\n\nDoes the code structure make maintenance simple? Does it minimise the risk of future errors being introduced? ","Good coding practices like style guides and coding conventions will improve:\n> Readability: how easily another analyst can gain a decent understand of how your code works, within a reasonable amount of time\n> Maintainability:  how easily other analysts can understand your code well enough to modify and repair it\n\nClick here for further guidance",null,null,"1.The code follows a consistent coding convention, structure, and formatting, which makes it highly readable and maintainable.\n2. The code follows a mostly consistent coding convention, structure, and formatting, with only minor deviations that could cause some confusion or errors. \n3. The code may have some inconsistencies in its coding convention, structure, and formatting that could make it somewhat difficult to read and maintain. \n4. The code has significant inconsistencies in its style, structure, and formatting that could make it difficult to read and maintain, leading to confusion and errors. \n5. The code does not follow a coding convention, structure, and formatting leading to significant confusion and errors. ",null,null,"Must\n\nShould\n\nCould"]
[null,"S4","Code clarity & robustness\nIs all the code easily understandable and robust? Are  hardcoded values embedded in the code?\n\nHave all variables been declared (helps ensure variables are spelt correctly/memory is used appropriately)? Is appropriate error handling built in? \n\nIs it as simple as possible? Would it be easy for a new programmer or user to understand the code?\n\nAre units and labels always included?","Not meaningful names for variables, such as \"x\" or \"y\", should be avoided ",null,null,"1) Code extremely clear, easy to understand and robust\n2) The code is clear and robust in all the main model sections\n3) Some parts of the code are not very clear and/or the robustness should be improved\n4) Most of the code doesn't follow best practice and it is not robust\n5) Significant issues regarding code clarity and robustness",null,null,"Must\n\nShould\n\nCould"]
[null,"S5","Inputs and outputs clarity\nAre inputs and outputs clearly presented? Are titles, labels and units present, logical and accurate? If relevant, does formatting aid understanding? Are comments included, if necessary? \n\nIf calculations are performed off-model, are they clear, robust and properly commented? Is a table used to perform unit conversions? Is rounding performed in a correct way? Are rounded numbers and original numbers used in the correct places?","Check that every input, table and output are labelled and with units. ",null,null,"1) The input and output documents are clear. If calculations are present they are robust and follow best practices\n2) Inputs and outputs are clear and a robust approach is used in most of the formulae. Some minor issues, like a few hardcoded values\n3) Inputs and outputs generally clear, even if there are some minor issues. Formula robustness should be improved\n4) Issues regarding formulae robustness (e.g. hardcoded values, rounding issues, etc). Clarity should be improved\n5) Most formulae are not clear or robust, labels and units missing or inappropriate",null,null,"Must\n\nShould\n\nCould"]
[null,"S6","Results Visualisation\nAre any visualisations of the results clear and do they follow best practice guidelines and do they follow Department style guidelines?  Are visualisations consistent?\nIf results visualisation are interactive, does this aid understanding or does it distract from the message?\nAutomation reduces human error and maintain consistency.  Is automation of results deployed where possible and is manual manipulation minimised?  Is any required manual manipulation documented?\nIf outputs are presented via an app, does the in-app documentation make it clear how the app is used e.g. the order of execution?","Check that every visualisation follows best practice for producing graphs, charts or dashboards",null,null,"1) All results visualisations are clear, consistent, follow best practice principles and are automated where possible.\n2) Every important visualisation is clear and follows best practice principles.  Some manual manipulation required.\n3) Most important result visualisations follow good practice guidelines.  More automation would improve consistency.\n4) Few good practice principles are evident in visualisations.  Automation is minimal.\n5) Visualisation are not clear or are confusing and are highly inconsistent. No automation means visualisations are always individually generated.\nN.A)  Visualisation is not  a part of the analysis.",null,null,"Must\n\nShould\n\nCould"]

{"sheet":"Verification","index":5,"n_rows":13,"n_cols":10,"rows_kept":13,"cut":false,"hidden":false,"merged":[]}
[]
[{"$f":"IF(SecurityClassification=\"OFFICIAL\",\"\",SecurityClassification & \" - \")  & DocumentName & \" QA log - version \" & VersionNumber","v":" -  QA log - version "}]
[]
[null,"QA should be proportionate to the model complexity and importance. The tasks described below are appropriate for complex, business critical models and should be interpreted flexibly according to the model specific characteristics and status. Contact the Modelling Integrity Team if you have any doubts"]
[null,"modellingintegrity@energysecurity.gov.uk  "]
[]
[null,"Task Code","QA requirement","Guidance and links","Performed by","Rating","Rating guidelines","Current status (issues found)","Evidence (when applicable)","Outstanding work"]
[null,"Example","Usability Testing\nCan a new user easily operate the model and view outputs?  Is routine operation of the model smooth and free of bugs? If relevant, is there an appropriate user interface? Does it work correctly? \n\nDoes the model open in an acceptable amount of time? Is the runtime of the model appropriate for the demand placed on the model and the complexity of what is being modelled?\n\nIs there a smooth and secure procedure to allow access to the software to the users or the people who need to QA the model? Is the time needed to provide the access to a new user appropriate?\n\nHave the appropriate control been put in place to avoid invalid data/entries (e.g. not sensible inputs)? \n\nIs the system able to provide and maintain an acceptable level of service in the face of faults and challenges to normal operation? What is the impact of faults and challenges to normal operations?","Check that all the user options can be selected without generating errors or unexpected results. Routines work without runtime errors. There are no buttons with dead links\n","John Smith (senior engineer, Department)","2) Good","1) The model is free of bugs and all the functionalities work correctly. If parts of the model are a work in progress, they are clearly labelled and formatted. When settings or scenarios are changed no issues occur. The runtime is appropriate. All the relevant cell protection procedures have been implemented\n2) The model is free of bugs and all the functionalities work correctly. A few minor issues which don't have any impact on the model have been documented and explained\n3) The main functionalities work correctly. Some issues if the non-default scenarios/settings are selected, but they have been documented. Some protection procedures implemented but a few issues occur\n4) Routine operation works correctly, but change of scenarios/settings leads to errors. Issues with model runtime. Limited protection procedures and a moderate change of some major errors creeping in\n5) There are bugs during routine operation, no protection implemented OR usability has not been checked","Model runtime is appropriate and no bugs have been identified during the review. However, a certain expertise is required to run the model and visualise outputs, so we recommend to include some guidance. The procedure to get access to the model takes some time, but this is due to the overall system rather than the model itself. \n\nThe correctness of input data is verified through many tests and no issues have been found regarding the system resilience. Few minor bugs have been found when testing the model usability but they have no impact and have been documented","[link to relevant document]","Must\n\nShould\nCorrect the minor bugs\n\nCould\n"]
[null,"Ve1","Data Transfer, Cleaning and Transformation\nIs the data being pulled into the model and exported to the output files correctly? Are there tests in place to check the data after import and before export?  If these are manual checks, is there a record of completed checks?\n\nIf the data requires cleaning or transformation, is it clear what steps are taken to do this? Are these documented?","Check import and export  functions are correctly uploading or downloading data and whether the script is robust enough to withstand future changes to the input files.\n\nIf the data requires cleaning, the steps should be well documented and explain the logic of each cleaning step.",null,null,"1) Data import and export steps have been checked and no errors have been found.  Data transformation and cleaning steps are transparent and logical.\n2) All the high priority import/export steps have been checked and the important issues have been fixed.  Data transformation and cleaning steps are mostly logical and transparent.\n3.) Most of the input, output, cleaning and transformation steps have been checked. Some steps are not logical or transparent but any errors only have a small impact on results.\n4) Most of the steps have been checked recently. Some steps contain errors which could have an impact on the model outputs\n5) Many input, output, cleaning steps are incorrect and have a significant impact on the model outputs, OR very few formulae have been checked.",null,null,"Must\n\nShould\n\nCould"]
[null,"Ve2","Usability Testing\nCan a new user easily operate the model and view outputs?  Is routine operation of the model smooth and free of bugs? If relevant, is there an appropriate user interface and does it align with the appropriate design and accessibility  standards?\n\nDoes the model open in an acceptable amount of time? Is the runtime of the model appropriate for the demand placed on the model and the complexity of what is being modelled? Are these times documented?\n\nIs there a smooth and secure procedure to allow access to the software to the users or the people who need to QA the model? Is the time needed to provide access to a new user appropriate?\n\nHave the appropriate controls been put in place to avoid invalid user choices and are these audience appropriate?\n\nIs the system able to provide and maintain an acceptable level of service in the face of faults and challenges to normal operation? What is the impact of faults and challenges to normal operations?","Check that all the user options can be selected without generating errors or unexpected results. Routines work without runtime errors. There are no buttons with dead links\n",null,null,"1) The model is free of user-facing bugs and all the functionalities work as intended.  The user interface is appropriate for the audience.\n2) The model has a few minor issues, which don't have any impact on the model outputs, and have been documented and explained.  The user interface could be simplified for the audience.\n3) The main functionalities work correctly but there may be some bugs if the non-default settings are selected. Bugs have been documented and their impacts are understood. \n4) Routine operation works correctly but non-default options lead to errors. Issues with model runtime.  The user interface is complicated for the audience.\n5) There are bugs during routine operation.  The user interface is overly complicated OR usability has not been tested.",null,null,"Must\n\nShould\n\nCould"]
[null,"Ve3","Code correctness & Informal Testing\nHas the model had a visual code review for errors? Does the code match the comments? Do functions match their documentation? \n\nHave informal tests been carried out to a sutiable coverage? Does the code function as intended without error, and produce the intended results after key processes or functions? Is the quality of the tests sufficient to spot a comprehensive range of potential errors?","Review the logic of the code (modules match stated purpose and function. Check each line in the code). If possible, “step through” the code to visually inspect its operation (ensure that no unintended behaviour is observed). \n\nRecord any informal testing which has been carried out in a log highlighting what was tested, by who and the result.",null,null,"1) All the code has been checked and no issues which affect outputs have been found. Code matches comments and there is record of informal tests on all key functionality.\n2) Key functionality has underwent a review with no issues found. Code matches the comments and there is some record of informal tests on most key processes.\n3) There has been only quick review of code or some code does not match the commenting. Informal tests cover some key functionality.  \n4) Some discrepencies in commenting and code which could have an impact on the model outputs or very limited review of code has taken place. Minimal informal testing recorded.\n5) Part of the code is not correct and this has a significant impact on the model outputs or zero review has taken place. No evidence of any informal tests.",null,null,"Must\n\nShould\n\nCould"]
[null,"Ve4","Regression Testing\nDoes the model make use of a reference set of input data / output data to test the model for unexpected outcomes after every significant development?\n\nAre there a number of quantitative scenarios that cover a wide range of the possible inputs which can be run on old and new versions of the model?","Check that autochecks are correctly implemented and produce expected results",null,null,"1) Auto-checking functionalities are present and correctly implemented wherever possible. A reference set of input/output data is used to test the model after every significant model development\n2) Many auto-checking functionalities correctly implemented, but few could be added to improve model quality. Regression testing performed most of the time\n3) There are some autochecks, but more could be introduced to easily spot errors or inconsistencies, OR only some autochecks have been examined. Some regression testing performed but not consistently\n4)  Very few autochecks implemented OR few autochecks examined. Output changes have been sometimes checked after significant model development, but not in a consistent and automatic way\n5) No autochecks, OR these have not been examined. No regression testing",null,null,"Must\n\nShould\n\nCould"]
[null,"Ve5","Automated and Unit Testing\nAre unit tests included in the codebase to verify the code is working as expected. These should be able to be run independently by other analysts with suitable  error messages.\n\nDoes the code include automated tests for standard checks e.g. counting the number of rows, which would otherwise be manual and time consuming?","Click here for guidance on unit and automated testing",null,null,"1) All key model calculations have been reperformed and the same results have been achieved (or within acceptable tolerance level)\n2) Most key model calculations have been reperformed and the same results have been achieved (or within acceptable tolerance level)\n3) Some model sections have been reperformed in a different way but the outputs differ somewhat.  However the reason  behind the difference is fully understood and documented\n4) There are some differences in the outputs and not all of them can be clearly explained \n5) No re-performance testing implemented even if it would be feasible and beneficial to check model outputs, or the testing produces unacceptably different values from the model's outputs, OR Re-performance testing has not been reviewed\nN/A) Re-performance testing not applicable",null,null,"Must\n\nShould\n\nCould"]

{"sheet":"Validation","index":6,"n_rows":13,"n_cols":10,"rows_kept":13,"cut":false,"hidden":false,"merged":[]}
[]
[{"$f":"IF(SecurityClassification=\"OFFICIAL\",\"\",SecurityClassification & \" - \")  & DocumentName & \" QA log - version \" & VersionNumber","v":" -  QA log - version "}]
[]
[null,"QA should be proportionate to the model complexity and importance. The tasks described below are appropriate for complex, business critical models and should be interpreted flexibly according to the model specific characteristics and status. Contact the Modelling Integrity Team if you have any doubts"]
[null,"modellingintegrity@energysecurity.gov.uk  "]
[]
[null,"Task Code","QA requirement","Guidance and links","Performed by","Rating","Rating guidelines","Current status (issues found)","Evidence (when applicable)","Outstanding work"]
[null,"Example","Methodology correctness\nIs the methodology used sensible and fit for purpose? (with \"purpose\" defined in the model specification)\n\nWas the model methodology reviewed and agreed with relevant stakeholders? \n\nDoes the model produce logical outputs (i.e. what you expect, that is, values in the direction of travel and of the right magnitude) when subject to sense / reality checks )? Have model outputs been sense / reality checked and agreed with relevant stakeholders?","Review the model logic eg. checking the actual flow of data through the model against a stylised example of how data is perceived to be flowing through the model. Follow the evolution of the Key Performance Drivers (e.g. most impactful inputs) across the model to understand how data are.\n\nCheck if the outputs of different scenarios (high, medium, low) are sensible.\n\nAn example of good documentation of a model methodology is this 2050 Calculator webpage: http://2050-calculator-tool-wiki.decc.gov.uk/pages/142","John Smith (senior engineer, DECC)","1) Excellent","1) The methodology has been agreed with relevant stakeholders and reviewed by experts. The model produces logical outputs\n2) The methodology is correct but only some relevant stakeholders have reviewed it. The model produces logical outputs\n3) Both methodology and outputs are logical, but have not been reviewed by relevant stakeholders, OR only parts of the methodology have been reviewed since a redevelopment\n4) Some results are counterintuitive and not all the methodology is sensible, OR few parts of the methodology have been reviewed\n5) Not all the outputs are logical or the methodology is not always sensible and fit for purpose, OR methodology has not been reviewed","The methodology is correct and exhaustively explained in the documentation; the model matches the spec document.\nSome sense checks have been performed and in all the cases the outputs seemed sensible. Greater expertise about the policy effects would be required to interpret more detailed tests, but the model has been used and checked by stakeholders several times.","[link to sense check testing documents]","Must\n\nShould\n\nCould\nCarry out additional tests to check model outputs"]
[null,"Va1","Methodology correctness\nIs the methodology used sensible and fit for purpose? (with \"purpose\" defined in the model specification)\n\nWas the model methodology reviewed and agreed with relevant stakeholders? \n\nDoes the model produce logical outputs (i.e. what you expect, that is, values in the direction of travel and of the right magnitude) when subject to sense / reality checks )? Have model outputs been sense / reality checked and agreed with relevant stakeholders?","Review the model logic eg. checking the actual flow of data through the model against a stylised example of how data is perceived to be flowing through the model. Follow the evolution of the Key Performance Drivers (e.g. most impactful inputs) across the model to understand how data are.\n\nCheck if the outputs of different scenarios (high, medium, low) are sensible.\n\nAn example of good documentation of a model methodology is this 2050 Calculator webpage: http://2050-calculator-tool-wiki.decc.gov.uk/pages/142",null,null,"1) The methodology has been agreed with relevant stakeholders and reviewed by experts. The model produces logical outputs\n2) The methodology is correct but only some relevant stakeholders have reviewed it. The model produces logical outputs\n3) Both methodology and outputs are logical, but have not been reviewed by relevant stakeholders, OR only parts of the methodology have been reviewed since a redevelopment\n4) Some results are counterintuitive and not all the methodology is sensible, OR few parts of the methodology have been reviewed\n5) Not all the outputs are logical or the methodology is not always sensible and fit for purpose, OR methodology has not been reviewed",null,null,"Must\n\nShould\n\nCould"]
[null,"Va2","Comparison with historical data / backcasting\nDoes the model match historical results when using historical input data, to within an agreed tolerance level?","This could include also a cross-check of model outputs against an alternative set of data or information",null,null,"1) The model behaviour when historical data are used is sensible and the outputs are fairly close to the historical outputs OR the model has been compared against alternative data sources, with a clear explanation of any differences\n2) Most of the outputs match historical data and when they don't match there is a clear explanation of it\n3) Historical outputs cannot be always reproduced by the model, but this behaviour is documented and explained, OR only some of the feasible comparisons have been carried out\n4) The historical values differ significantly from the model outputs and the explanation for this is somewhat insufficient, OR few comparisons with historical data performed\n5) The model cannot replicate the historical outputs and no explanation is available, OR very few feasible historical comparisons have been performed.\nN/A) No historical data available or no comparison is possible",null,null,"Must\n\nShould\n\nCould"]
[null,"Va3","Uncertainty testing\nHas data (especially poor quality data) been addressed via sensitivity testing and/or Monte Carlo analysis, and the results documented? Has uncertainty about the structure of the analysis (e.g. equations or logic used to combine the analysis inputs) been quantified through uncertainty analysis?\n\nHas sensitivity analysis been used to find out the most significant inputs and assumptions?\nWhere random sampling is used, is it as consistent as possible with real-world distributions?\n\nAre poor quality assumptions managed via sensitivity testing to determine the potential impact of an incorrect assumption?\n\nHave scenario combinations been determined and performed to check whether expected outputs are produced?","Contact the Modelling Integrity Team if you need any support to perform uncertainty testing on your model",null,null,"1) Appropriate sensitivity testing has been performed on all the relevant data and assumptions. The model always responds logically to these tests and the potential impacts of a change in data or assumptions have been fully recorded. Scenario testing have been performed and the expected outputs have been obtained\n2) Appropriate sensitivity testing performed not for all the relevant data and assumptions. Results from these tests are logical and have been recorded. \n3) Only some scenarios considered or testing not properly logged\n4) Few testing performed and results not logged and analysed\n5) No sensitivity testing performed, or results from testing are illogical and/or not documented. Scenario testing missing or very limited",null,null,"Must\n\nShould\n\nCould"]
[null,"Va4","Extreme values testing / model breaking\nDoes the model respond as expected to extreme values, zeroes, negative values, critical limits? \n\nIs it possible to 'break' the model or get implausible outcomes (e.g. percentages adding to more than 100%, people adding up to more than the population...)?","Check that entering extreme values to input data/ parameters does not break the model or result in unintended outcomes. Carry out checks by populating the model with dummy data: insert simple numbers like 0 or 1, where you know what the answer should be, and check for correctness",null,null,"1) Extreme values testing have been performed for all the relevant data. Errors due to extreme values have been identified and cell protection procedures have been implemented where appropriate so that only values in a certain range are acceptable inputs\n2) Extreme values testing have been performed on most data and results are acceptable (no significant issues)\n3) Some outstanding issues due to lack of data protection. When extreme values are inputted, results are not always logical\n4) Not enough testing performed OR many issues (although not critical) found when performing extreme values tests\n5) No extreme values testing, or there are significant issues when testing extreme values\nN/A) Extreme values testing would not be helpful for the model",null,null,"Must\n\nShould\n\nCould"]
[null,"Va5","Re-performance testing\nCan you replicate model output by independently (e.g. offline) re-performing key calculations on sections of the model?","How the task is performed strongly depends on the nature of the model: in some cases it is feasible and worth creating an entire shadow model, in others just some calculations could be replicated in a different way.",null,null,"1) All key model calculations have been reperformed and the same results have been achieved (or within acceptable tolerance level)\n2) Most key model calculations have been reperformed and the same results have been achieved (or within acceptable tolerance level)\n3) Some model sections have been reperformed in a different way but the outputs differ somewhat.  However the reason  behind the difference is fully understood and documented\n4) There are some differences in the outputs and not all of them can be clearly explained \n5) No re-performance testing implemented even if it would be feasible and beneficial to check model outputs, or the testing produces unacceptably different values from the model's outputs, OR Re-performance testing has not been reviewed\nN/A) Re-performance testing not applicable",null,null,"Must\n\nShould\n\nCould"]

{"sheet":"Data & Assumptions","index":7,"n_rows":11,"n_cols":10,"rows_kept":11,"cut":false,"hidden":false,"merged":[]}
[]
[{"$f":"IF(SecurityClassification=\"OFFICIAL\",\"\",SecurityClassification & \" - \")  & DocumentName & \" QA log - version \" & VersionNumber","v":" -  QA log - version "}]
[]
[null,"QA should be proportionate to the model complexity and importance. The tasks described below are appropriate for complex, business critical models and should be interpreted flexibly according to the model specific characteristics and status. Contact the Modelling Integrity Team if you have any doubts"]
[null,"modellingintegrity@energysecurity.gov.uk  "]
[]
[null,"Task Code","QA requirement","Guidance and links","Performed by","Rating","Rating guidelines","Current status (issues found)","Evidence (when applicable)","Outstanding work"]
[null,"Example","Data \n(Please note that a good assumptions log will cover the criteria for both DA1 and DA3 so you can almost certainly rate them both the same)\nDoes your assumptions log contain details of all model data? Has key data been identified and prioritised?\n\nHas appropriate data been used? \nAre the quality, characteristics, strengths and limitations of the data set fully understood and recorded? \nHave data quality been assessed? \n\nHave data inputs been agreed with relevant stakeholders and signed-off? Are all data up-to-date?","DESNZ assumptions log","John Smith (senior engineer, BEIS)","3) Some issues","1) Assumptions log containing all the relevant information about data available. Data fit for purpose, their quality, impact and risk recorded and fully understood. Data signed-off and up-to-date\n2) Assumptions log containing all high risk data available; data fit for purpose, their quality, impact and risk recorded and fully understood. Data signed-off and up-to-date\n3) Data fit for purpose and Assumptions log available but not all data are recorded and/or some information is missing. Or assumptions log is missing but the majority of data is recorded and information is present within the model.\n4) Assumptions log missing, but some information is available (in the documentation or within the model). Quality of data not always assessed properly, sign off may be missing\n5) Assumptions log missing and very little information available. No documentation assessing data quality and limitations and no sign off. Not all data is fit for purpose","There is currently no formal sign off process for data  but it is agreed within teams. The data used has been widely consulted on and is transparent (available through the IA). The shortage of proven data for key variables has been made clear and significant consultation with key stakeholders on the numbers has taken place. Where data is more widely available the team have ensured crossover with other key BEIS models. Whilst information is available the data is not logged in such a way as to make it easy to track or the risks associated with individual data clear. Effective data management and assessment processes going forwards are crucial as more actual data becomes available to replace assumptions. ","[link to relevant documents]","Must\nBuild on the Inputs and Assumptions Log to give data used a RAG rating, link to evidence sources and make explicit the sign off procedure. \n\nShould\n\nCould\n"]
[null,"DA1","Data \n(Please note that a good assumptions log will cover the criteria for both DA1 and DA3 so you can almost certainly rate them both the same)\nDoes your assumptions log contain details of all model data? Has key data been identified and prioritised?\n\nHas appropriate data been used? \nAre the quality, characteristics, strengths and limitations of the data set fully understood and recorded? \nHave data quality been assessed? \n\nHave data inputs been agreed with relevant stakeholders and signed-off? Are all data up-to-date?","Assumptions log",null,null,"1) Assumptions log containing all the relevant information about data available. Data fit for purpose, their quality, impact and risk recorded and fully understood. Data signed-off and up-to-date\n2) Assumptions log containing all high risk data available; data fit for purpose, their quality, impact and risk recorded and fully understood. Data signed-off and up-to-date\n3) Data fit for purpose and Assumptions log available but not all data are recorded and/or some information is missing. Or assumptions log is missing but the majority of data is recorded and information is present within the model.\n4) Assumptions log missing, but some information is available (in the documentation or within the model). Quality of data not always assessed properly, sign off may be missing\n5) Assumptions log missing and very little information available. No documentation assessing data quality and limitations and no sign off. Not all data is fit for purpose",null,null,"Must\n\nShould\n\nCould"]
[null,"DA2","Data transformation\nHas input data been checked against primary reference for potential errors in copying / pasting / transforming?\n\nIf required, have details on how the data have been imported/transformed or processed been recorded in the Assumptions Log? \n\nHave sources of data been documented? ","Modellers should ensure that no errors are made when data is imported. In some occasions it may be appropriate to consider automatic way to import data, which should reduce the probability of errors",null,null,"1) Complete details available about where the data is taken and how it is transformed. Data matches source following transformation.\n2) Details on data transformation are available for all critical data and sources are included\n3) Not all the data transformations are clearly documented but no errors due to copying/pasting/transforming data\n4) Not clear description of data transformations, some sources are not included\n5) A proper description of how data is transformed is missing, sources are often not included. It is difficult to check whether there are errors due to copying/pasting/transforming data\nN/A) No transformation performed",null,null,"Must\n\nShould\n\nCould"]
[null,"DA3","Assumptions\n(Please note that a good assumptions log will cover the criteria for both DA1 and DA3 so you can almost certainly rate them both the same)\nDoes your assumptions log contain details of all model assumptions? Have key assumptions been identified and prioritised?\n\nAre assumptions appropriate, applicable and logically coherent? \nAre any limitations/caveats adequately described in the Assumptions log? \nHave data quality, impact and risk been assessed? \nHave assumptions been agreed with relevant stakeholders? Are assumptions up-to-date?","Assumptions log",null,null,"1) Assumptions log containing all the relevant information about all the assumptions Assumptions fit for purpose, their quality, impact and risk recorded and fully understood. Assumptions signed-off and up-to-date\n2) Assumptions log containing all high risk assumptions; assumptions fit for purpose, their quality, impact and risk recorded and fully understood. Assumptions signed-off and up-to-date\n3) Assumptions fit for purpose and Assumptions log available but not all assumptions are recorded and/or some information is missing. Or assumptions log is missing but the majority of assumptions is recorded and information is present within the model.\n4) Assumptions log missing, but some information is available (in the documentation or within the model). Quality of assumptions not always assessed properly, sign off may be missing\n5) Assumptions log missing and very little information available. No documentation assessing assumptions quality and risk and no sign off. Not all assumptions are fit for purpose",null,null,"Must\n\nShould\n\nCould"]

{"sheet":"Model score","index":8,"n_rows":81,"n_cols":12,"rows_kept":81,"cut":false,"hidden":false,"merged":[[15,11,27,16],[8,11,13,16],[6,11,6,16]]}
[]
[{"$f":"IF(SecurityClassification=\"OFFICIAL\",\"\",SecurityClassification & \" - \")  & DocumentName & \" QA log - version \" & VersionNumber","v":" -  QA log - version "}]
[]
[null,"MODEL QA SCORE",null,null,null,null,null,null,null,null,"SCORE EXPLANATION"]
[]
[null,null,null,null,"Overall Score",null,null,null,null,null,null,"Score meaning"]
[null,null,null,null,{"$f":"SUMPRODUCT(QASections_Score[Score],QASections_Score[Importance score])/SUMIF(QASections_Score[Score],\"<>N/A\",QASections_Score[Importance score])","v":0},null,null,null,null,null,null,"A high QA score reflects that both process has been adhered to and quality is present within this process. Each model should aim to score either 90% (if it's business-critical) or 85% if it's not business-critical"]
[null,null,null,null,null,null,null,null,null,null,null,"How is it calculated?"]
[null,null,"Section","Maximum score","Section Score","Score","Importance","Importance score",null,null,null,"The 5 section scores (\"Documentation, \"Structure & Clarity\", \"Verification\", \"Validation\" and \"Data & Assumptions\")  are calculated considering the Priority (\"High\", \"Medium\" or \"Low\") and the Rating (from 1 to 5, with 1 being the best possible score) for each of the tasks considered in the section. The Priority is assigned a priori i.e. is the same for each model) while the Rating is an estimate of the performance of the model against each specific task. A numeric weight corresponds to each level of Priority and Rating. The two weights are then multiplied to get the score of each section's task. The higher the score the poorer the model performance against that task (the best performance scores zero). All the section's tasks are then summed to get the section score. The overall score is then obtained through a weighted sum of the section scores: the 5 QA sections have been assigned an importance rating (\"Essential\", \"Important\" or \"Best Practice) which determines a different weighting. This value is then divided by the worst possible score (i.e. when all the tasks get the worst rating) and this percentage is then inverted (i.e. a score of 43% 'bad' becomes 57% 'good') so that the higher the score the 'better' a QA state for a model is."]
[null,null,"Documentation",{"$f":"SUMIF(Documentation_Score[Rating],\"<>N/A\",Documentation_Score[Priority Score])*Worst_Value","v":610},{"$f":"SUMPRODUCT(--(Documentation_Score[Rating score]<>\"N/A\"),Documentation_Score[Priority Score],Documentation_Score[Rating score])","v":610},{"$f":"IFERROR(1-E10/D10,\"N/A\")","v":0},"Important",{"$f":"INDEX(Importance_Weight[Weight],MATCH(QASections_Score[[#This Row],[Importance]],Importance_Weight[Importance],0))","v":2}]
[null,null,"Structure & Clarity",{"$f":"SUMIF(Structure_Clarity_Score[Rating Score],\"<>N/A\",Structure_Clarity_Score[Priority Score])*Worst_Value","v":160},{"$f":"SUMPRODUCT(--(Structure_Clarity_Score[Rating Score]<>\"N/A\"),Structure_Clarity_Score[Priority Score],Structure_Clarity_Score[Rating Score])","v":160},{"$f":"IFERROR(1-E11/D11,\"N/A\")","v":0},"Best Practice",{"$f":"INDEX(Importance_Weight[Weight],MATCH(QASections_Score[[#This Row],[Importance]],Importance_Weight[Importance],0))","v":1}]
[null,null,"Verification",{"$f":"SUMIF(Verification_Score[Rating Score],\"<>N/A\",Verification_Score[Priority Score])*Worst_Value","v":250},{"$f":"SUMPRODUCT(--(Verification_Score[Rating Score]<>\"N/A\"),Verification_Score[Priority Score],Verification_Score[Rating Score])","v":250},{"$f":"IFERROR(1-E12/D12,\"N/A\")","v":0},"Essential",{"$f":"INDEX(Importance_Weight[Weight],MATCH(QASections_Score[[#This Row],[Importance]],Importance_Weight[Importance],0))","v":3}]
[null,null,"Validation",{"$f":"SUMIF(Validation_Score[Rating Score],\"<>N/A\",Validation_Score[Priority Score])*Worst_Value","v":190},{"$f":"SUMPRODUCT(--(Validation_Score[Rating Score]<>\"N/A\"),Validation_Score[Priority Score],Validation_Score[Rating Score])","v":190},{"$f":"IFERROR(1-E13/D13,\"N/A\")","v":0},"Essential",{"$f":"INDEX(Importance_Weight[Weight],MATCH(QASections_Score[[#This Row],[Importance]],Importance_Weight[Importance],0))","v":3}]
[null,null,"Data & Assumptions",{"$f":"SUMIF(Data_Assumptions_Score[Rating Score],\"<>N/A\",Data_Assumptions_Score[Priority Score])*Worst_Value","v":210},{"$f":"SUMPRODUCT(--(Data_Assumptions_Score[Rating Score]<>\"N/A\"),Data_Assumptions_Score[Priority Score],Data_Assumptions_Score[Rating Score])","v":210},{"$f":"IFERROR(1-E14/D14,\"N/A\")","v":0},"Essential",{"$f":"INDEX(Importance_Weight[Weight],MATCH(QASections_Score[[#This Row],[Importance]],Importance_Weight[Importance],0))","v":3}]
[null,null,null,null,null,null,null,null,null,null,null,"Caveats"]
[null,null,null,null,null,null,null,null,null,null,null,"The model QA score should be a representative metric of a model quality and adherence to accurate QA  processes. However, there are some possible caveats:\n- Different modellers/teams are likely to spend varying levels of time/effort on the template. If the rating assigned to each task is not accurate the overall score will also be imprecise.\n- Although we have tried to provide guidelines to users of this template, there is still a degree of interpretation within\n- The score depends on the weights assigned to each dimension; a change on the weights would change also the overall score"]
[null,null,"Documentation"]
[null,null,"Code","Task","Priority","Priority Score","Rating","Rating score"]
[null,null,"D1","Scope Document","High",{"$f":"IFERROR(INDEX(Priority_Weight[Weight],MATCH(Documentation_Score[[#This Row],[Priority]],Priority_Weight[Priority],0)),\"\")","v":9},{"$f":"IFERROR(INDEX(Documentation[Rating], MATCH(Documentation_Score[[#This Row],[Code]],Documentation[Task Code],0)),\"\")","v":0},{"$f":"IFERROR(IF(Documentation_Score[[#This Row],[Rating]]=0,Worst_Value,INDEX(Rating_Weight[Weight],MATCH(Documentation_Score[[#This Row],[Rating]],Rating_Weight[Rating],0))),\"\")","v":10}]
[null,null,"D2","Spec Document","High",{"$f":"IFERROR(INDEX(Priority_Weight[Weight],MATCH(Documentation_Score[[#This Row],[Priority]],Priority_Weight[Priority],0)),\"\")","v":9},{"$f":"IFERROR(INDEX(Documentation[Rating], MATCH(Documentation_Score[[#This Row],[Code]],Documentation[Task Code],0)),\"\")","v":0},{"$f":"IFERROR(IF(Documentation_Score[[#This Row],[Rating]]=0,Worst_Value,INDEX(Rating_Weight[Weight],MATCH(Documentation_Score[[#This Row],[Rating]],Rating_Weight[Rating],0))),\"\")","v":10}]
[null,null,"D3","User guide","Medium",{"$f":"IFERROR(INDEX(Priority_Weight[Weight],MATCH(Documentation_Score[[#This Row],[Priority]],Priority_Weight[Priority],0)),\"\")","v":3},{"$f":"IFERROR(INDEX(Documentation[Rating], MATCH(Documentation_Score[[#This Row],[Code]],Documentation[Task Code],0)),\"\")","v":0},{"$f":"IFERROR(IF(Documentation_Score[[#This Row],[Rating]]=0,Worst_Value,INDEX(Rating_Weight[Weight],MATCH(Documentation_Score[[#This Row],[Rating]],Rating_Weight[Rating],0))),\"\")","v":10}]
[null,null,"D4","Technical guide","Low",{"$f":"IFERROR(INDEX(Priority_Weight[Weight],MATCH(Documentation_Score[[#This Row],[Priority]],Priority_Weight[Priority],0)),\"\")","v":1},{"$f":"IFERROR(INDEX(Documentation[Rating], MATCH(Documentation_Score[[#This Row],[Code]],Documentation[Task Code],0)),\"\")","v":0},{"$f":"IFERROR(IF(Documentation_Score[[#This Row],[Rating]]=0,Worst_Value,INDEX(Rating_Weight[Weight],MATCH(Documentation_Score[[#This Row],[Rating]],Rating_Weight[Rating],0))),\"\")","v":10}]
[null,null,"D5","ReadMe","Medium",{"$f":"IFERROR(INDEX(Priority_Weight[Weight],MATCH(Documentation_Score[[#This Row],[Priority]],Priority_Weight[Priority],0)),\"\")","v":3},{"$f":"IFERROR(INDEX(Documentation[Rating], MATCH(Documentation_Score[[#This Row],[Code]],Documentation[Task Code],0)),\"\")","v":0},{"$f":"IFERROR(IF(Documentation_Score[[#This Row],[Rating]]=0,Worst_Value,INDEX(Rating_Weight[Weight],MATCH(Documentation_Score[[#This Row],[Rating]],Rating_Weight[Rating],0))),\"\")","v":10}]
[null,null,"D6","Code Comments and internal documentation","High",{"$f":"IFERROR(INDEX(Priority_Weight[Weight],MATCH(Documentation_Score[[#This Row],[Priority]],Priority_Weight[Priority],0)),\"\")","v":9},{"$f":"IFERROR(INDEX(Documentation[Rating], MATCH(Documentation_Score[[#This Row],[Code]],Documentation[Task Code],0)),\"\")","v":0},{"$f":"IFERROR(IF(Documentation_Score[[#This Row],[Rating]]=0,Worst_Value,INDEX(Rating_Weight[Weight],MATCH(Documentation_Score[[#This Row],[Rating]],Rating_Weight[Rating],0))),\"\")","v":10}]
[null,null,"D7","Git / Version Control","Medium",{"$f":"IFERROR(INDEX(Priority_Weight[Weight],MATCH(Documentation_Score[[#This Row],[Priority]],Priority_Weight[Priority],0)),\"\")","v":3},{"$f":"IFERROR(INDEX(Documentation[Rating], MATCH(Documentation_Score[[#This Row],[Code]],Documentation[Task Code],0)),\"\")","v":0},{"$f":"IFERROR(IF(Documentation_Score[[#This Row],[Rating]]=0,Worst_Value,INDEX(Rating_Weight[Weight],MATCH(Documentation_Score[[#This Row],[Rating]],Rating_Weight[Rating],0))),\"\")","v":10}]
[null,null,"D8","Governance and responsibilities","Medium",{"$f":"IFERROR(INDEX(Priority_Weight[Weight],MATCH(Documentation_Score[[#This Row],[Priority]],Priority_Weight[Priority],0)),\"\")","v":3},{"$f":"IFERROR(INDEX(Documentation[Rating], MATCH(Documentation_Score[[#This Row],[Code]],Documentation[Task Code],0)),\"\")","v":0},{"$f":"IFERROR(IF(Documentation_Score[[#This Row],[Rating]]=0,Worst_Value,INDEX(Rating_Weight[Weight],MATCH(Documentation_Score[[#This Row],[Rating]],Rating_Weight[Rating],0))),\"\")","v":10}]
[null,null,"D9","Model classification & security","Medium",{"$f":"IFERROR(INDEX(Priority_Weight[Weight],MATCH(Documentation_Score[[#This Row],[Priority]],Priority_Weight[Priority],0)),\"\")","v":3},{"$f":"IFERROR(INDEX(Documentation[Rating], MATCH(Documentation_Score[[#This Row],[Code]],Documentation[Task Code],0)),\"\")","v":0},{"$f":"IFERROR(IF(Documentation_Score[[#This Row],[Rating]]=0,Worst_Value,INDEX(Rating_Weight[Weight],MATCH(Documentation_Score[[#This Row],[Rating]],Rating_Weight[Rating],0))),\"\")","v":10}]
[null,null,"D10","QA planning and resourcing","High",{"$f":"IFERROR(INDEX(Priority_Weight[Weight],MATCH(Documentation_Score[[#This Row],[Priority]],Priority_Weight[Priority],0)),\"\")","v":9},{"$f":"IFERROR(INDEX(Documentation[Rating], MATCH(Documentation_Score[[#This Row],[Code]],Documentation[Task Code],0)),\"\")","v":0},{"$f":"IFERROR(IF(Documentation_Score[[#This Row],[Rating]]=0,Worst_Value,INDEX(Rating_Weight[Weight],MATCH(Documentation_Score[[#This Row],[Rating]],Rating_Weight[Rating],0))),\"\")","v":10}]
[null,null,"D11","Business continuity & Disaster Recovery","High",{"$f":"IFERROR(INDEX(Priority_Weight[Weight],MATCH(Documentation_Score[[#This Row],[Priority]],Priority_Weight[Priority],0)),\"\")","v":9},{"$f":"IFERROR(INDEX(Documentation[Rating], MATCH(Documentation_Score[[#This Row],[Code]],Documentation[Task Code],0)),\"\")","v":0},{"$f":"IFERROR(IF(Documentation_Score[[#This Row],[Rating]]=0,Worst_Value,INDEX(Rating_Weight[Weight],MATCH(Documentation_Score[[#This Row],[Rating]],Rating_Weight[Rating],0))),\"\")","v":10}]
[]
[null,null,"Structure & Best Practice"]
[null,null,"Code","Task","Priority","Priority Score","Rating","Rating Score"]
[null,null,"S1","Project Structure","Medium",{"$f":"IFERROR(INDEX(Priority_Weight[Weight],MATCH(Structure_Clarity_Score[[#This Row],[Priority]],Priority_Weight[Priority],0)),\"\")","v":3},{"$f":"IFERROR(INDEX(Structure_Clarity[Rating], MATCH(Structure_Clarity_Score[[#This Row],[Code]],Structure_Clarity[Task Code],0)),\"\")","v":0},{"$f":"IFERROR(IF(Structure_Clarity_Score[[#This Row],[Rating]]=0,Worst_Value,INDEX(Rating_Weight[Weight],MATCH(Structure_Clarity_Score[[#This Row],[Rating]],Rating_Weight[Rating],0))),\"\")","v":10}]
[null,null,"S2","Model Structure","Medium",{"$f":"IFERROR(INDEX(Priority_Weight[Weight],MATCH(Structure_Clarity_Score[[#This Row],[Priority]],Priority_Weight[Priority],0)),\"\")","v":3},{"$f":"IFERROR(INDEX(Structure_Clarity[Rating], MATCH(Structure_Clarity_Score[[#This Row],[Code]],Structure_Clarity[Task Code],0)),\"\")","v":0},{"$f":"IFERROR(IF(Structure_Clarity_Score[[#This Row],[Rating]]=0,Worst_Value,INDEX(Rating_Weight[Weight],MATCH(Structure_Clarity_Score[[#This Row],[Rating]],Rating_Weight[Rating],0))),\"\")","v":10}]
[null,null,"S3","Code Consistency and Convention","Medium",{"$f":"IFERROR(INDEX(Priority_Weight[Weight],MATCH(Structure_Clarity_Score[[#This Row],[Priority]],Priority_Weight[Priority],0)),\"\")","v":3},{"$f":"IFERROR(INDEX(Structure_Clarity[Rating], MATCH(Structure_Clarity_Score[[#This Row],[Code]],Structure_Clarity[Task Code],0)),\"\")","v":0},{"$f":"IFERROR(IF(Structure_Clarity_Score[[#This Row],[Rating]]=0,Worst_Value,INDEX(Rating_Weight[Weight],MATCH(Structure_Clarity_Score[[#This Row],[Rating]],Rating_Weight[Rating],0))),\"\")","v":10}]
[null,null,"S4","Code clarity & robustness","Medium",{"$f":"IFERROR(INDEX(Priority_Weight[Weight],MATCH(Structure_Clarity_Score[[#This Row],[Priority]],Priority_Weight[Priority],0)),\"\")","v":3},{"$f":"IFERROR(INDEX(Structure_Clarity[Rating], MATCH(Structure_Clarity_Score[[#This Row],[Code]],Structure_Clarity[Task Code],0)),\"\")","v":0},{"$f":"IFERROR(IF(Structure_Clarity_Score[[#This Row],[Rating]]=0,Worst_Value,INDEX(Rating_Weight[Weight],MATCH(Structure_Clarity_Score[[#This Row],[Rating]],Rating_Weight[Rating],0))),\"\")","v":10}]
[null,null,"S5","Inputs and outputs clarity","Low",{"$f":"IFERROR(INDEX(Priority_Weight[Weight],MATCH(Structure_Clarity_Score[[#This Row],[Priority]],Priority_Weight[Priority],0)),\"\")","v":1},{"$f":"IFERROR(INDEX(Structure_Clarity[Rating], MATCH(Structure_Clarity_Score[[#This Row],[Code]],Structure_Clarity[Task Code],0)),\"\")","v":0},{"$f":"IFERROR(IF(Structure_Clarity_Score[[#This Row],[Rating]]=0,Worst_Value,INDEX(Rating_Weight[Weight],MATCH(Structure_Clarity_Score[[#This Row],[Rating]],Rating_Weight[Rating],0))),\"\")","v":10}]
[null,null,"S6","Results Visualisation","Medium",{"$f":"IFERROR(INDEX(Priority_Weight[Weight],MATCH(Structure_Clarity_Score[[#This Row],[Priority]],Priority_Weight[Priority],0)),\"\")","v":3},{"$f":"IFERROR(INDEX(Structure_Clarity[Rating], MATCH(Structure_Clarity_Score[[#This Row],[Code]],Structure_Clarity[Task Code],0)),\"\")","v":0},{"$f":"IFERROR(IF(Structure_Clarity_Score[[#This Row],[Rating]]=0,Worst_Value,INDEX(Rating_Weight[Weight],MATCH(Structure_Clarity_Score[[#This Row],[Rating]],Rating_Weight[Rating],0))),\"\")","v":10}]
[null,null,"S7",null,null,{"$f":"IFERROR(INDEX(Priority_Weight[Weight],MATCH(Structure_Clarity_Score[[#This Row],[Priority]],Priority_Weight[Priority],0)),\"\")","v":""},{"$f":"IFERROR(INDEX(Structure_Clarity[Rating], MATCH(Structure_Clarity_Score[[#This Row],[Code]],Structure_Clarity[Task Code],0)),\"\")","v":""},{"$f":"IFERROR(IF(Structure_Clarity_Score[[#This Row],[Rating]]=0,Worst_Value,INDEX(Rating_Weight[Weight],MATCH(Structure_Clarity_Score[[#This Row],[Rating]],Rating_Weight[Rating],0))),\"\")","v":""}]
[null,null,"S8",null,null,{"$f":"IFERROR(INDEX(Priority_Weight[Weight],MATCH(Structure_Clarity_Score[[#This Row],[Priority]],Priority_Weight[Priority],0)),\"\")","v":""},{"$f":"IFERROR(INDEX(Structure_Clarity[Rating], MATCH(Structure_Clarity_Score[[#This Row],[Code]],Structure_Clarity[Task Code],0)),\"\")","v":""},{"$f":"IFERROR(IF(Structure_Clarity_Score[[#This Row],[Rating]]=0,Worst_Value,INDEX(Rating_Weight[Weight],MATCH(Structure_Clarity_Score[[#This Row],[Rating]],Rating_Weight[Rating],0))),\"\")","v":""}]
[null,null,"S9",null,null,{"$f":"IFERROR(INDEX(Priority_Weight[Weight],MATCH(Structure_Clarity_Score[[#This Row],[Priority]],Priority_Weight[Priority],0)),\"\")","v":""},{"$f":"IFERROR(INDEX(Structure_Clarity[Rating], MATCH(Structure_Clarity_Score[[#This Row],[Code]],Structure_Clarity[Task Code],0)),\"\")","v":""},{"$f":"IFERROR(IF(Structure_Clarity_Score[[#This Row],[Rating]]=0,Worst_Value,INDEX(Rating_Weight[Weight],MATCH(Structure_Clarity_Score[[#This Row],[Rating]],Rating_Weight[Rating],0))),\"\")","v":""}]
[null,null,"S10",null,null,null,{"$f":"IFERROR(INDEX(Structure_Clarity[Rating], MATCH(Structure_Clarity_Score[[#This Row],[Code]],Structure_Clarity[Task Code],0)),\"\")","v":""},{"$f":"IFERROR(IF(Structure_Clarity_Score[[#This Row],[Rating]]=0,Worst_Value,INDEX(Rating_Weight[Weight],MATCH(Structure_Clarity_Score[[#This Row],[Rating]],Rating_Weight[Rating],0))),\"\")","v":""}]
[]
[null,null,"Verification"]
[null,null,"Code","Task","Priority","Priority Score","Rating","Rating Score"]
[null,null,"Ve1","Data Transfer, Cleaning and Transformation","High",{"$f":"IFERROR(INDEX(Priority_Weight[Weight],MATCH(Verification_Score[[#This Row],[Priority]],Priority_Weight[Priority],0)),\"\")","v":9},{"$f":"IFERROR(INDEX(Verification[Rating], MATCH(Verification_Score[[#This Row],[Code]],Verification[Task Code],0)),\"\")","v":0},{"$f":"IFERROR(IF(Verification_Score[[#This Row],[Rating]]=0,Worst_Value,INDEX(Rating_Weight[Weight],MATCH(Verification_Score[[#This Row],[Rating]],Rating_Weight[Rating],0))),\"\")","v":10}]
[null,null,"Ve2","Usability Testing","Medium",{"$f":"IFERROR(INDEX(Priority_Weight[Weight],MATCH(Verification_Score[[#This Row],[Priority]],Priority_Weight[Priority],0)),\"\")","v":3},{"$f":"IFERROR(INDEX(Verification[Rating], MATCH(Verification_Score[[#This Row],[Code]],Verification[Task Code],0)),\"\")","v":0},{"$f":"IFERROR(IF(Verification_Score[[#This Row],[Rating]]=0,Worst_Value,INDEX(Rating_Weight[Weight],MATCH(Verification_Score[[#This Row],[Rating]],Rating_Weight[Rating],0))),\"\")","v":10}]
[null,null,"Ve3","Code correctness and informal testing","High",{"$f":"IFERROR(INDEX(Priority_Weight[Weight],MATCH(Verification_Score[[#This Row],[Priority]],Priority_Weight[Priority],0)),\"\")","v":9},{"$f":"IFERROR(INDEX(Verification[Rating], MATCH(Verification_Score[[#This Row],[Code]],Verification[Task Code],0)),\"\")","v":0},{"$f":"IFERROR(IF(Verification_Score[[#This Row],[Rating]]=0,Worst_Value,INDEX(Rating_Weight[Weight],MATCH(Verification_Score[[#This Row],[Rating]],Rating_Weight[Rating],0))),\"\")","v":10}]
[null,null,"Ve4","Regression Testing","Low",{"$f":"IFERROR(INDEX(Priority_Weight[Weight],MATCH(Verification_Score[[#This Row],[Priority]],Priority_Weight[Priority],0)),\"\")","v":1},{"$f":"IFERROR(INDEX(Verification[Rating], MATCH(Verification_Score[[#This Row],[Code]],Verification[Task Code],0)),\"\")","v":0},{"$f":"IFERROR(IF(Verification_Score[[#This Row],[Rating]]=0,Worst_Value,INDEX(Rating_Weight[Weight],MATCH(Verification_Score[[#This Row],[Rating]],Rating_Weight[Rating],0))),\"\")","v":10}]
[null,null,"Ve5","Automated and Unit Testing","Medium",{"$f":"IFERROR(INDEX(Priority_Weight[Weight],MATCH(Verification_Score[[#This Row],[Priority]],Priority_Weight[Priority],0)),\"\")","v":3},{"$f":"IFERROR(INDEX(Verification[Rating], MATCH(Verification_Score[[#This Row],[Code]],Verification[Task Code],0)),\"\")","v":0},{"$f":"IFERROR(IF(Verification_Score[[#This Row],[Rating]]=0,Worst_Value,INDEX(Rating_Weight[Weight],MATCH(Verification_Score[[#This Row],[Rating]],Rating_Weight[Rating],0))),\"\")","v":10}]
[null,null,"Ve6"]
[null,null,"Ve7"]
[null,null,"Ve8"]
[null,null,"Ve9",null,null,{"$f":"IFERROR(INDEX(Priority_Weight[Weight],MATCH(Verification_Score[[#This Row],[Priority]],Priority_Weight[Priority],0)),\"\")","v":""},{"$f":"IFERROR(INDEX(Verification[Rating], MATCH(Verification_Score[[#This Row],[Code]],Verification[Task Code],0)),\"\")","v":""},{"$f":"IFERROR(IF(Verification_Score[[#This Row],[Rating]]=0,Worst_Value,INDEX(Rating_Weight[Weight],MATCH(Verification_Score[[#This Row],[Rating]],Rating_Weight[Rating],0))),\"\")","v":""}]
[null,null,"Ve10",null,null,{"$f":"IFERROR(INDEX(Priority_Weight[Weight],MATCH(Verification_Score[[#This Row],[Priority]],Priority_Weight[Priority],0)),\"\")","v":""},{"$f":"IFERROR(INDEX(Verification[Rating], MATCH(Verification_Score[[#This Row],[Code]],Verification[Task Code],0)),\"\")","v":""},{"$f":"IFERROR(IF(Verification_Score[[#This Row],[Rating]]=0,Worst_Value,INDEX(Rating_Weight[Weight],MATCH(Verification_Score[[#This Row],[Rating]],Rating_Weight[Rating],0))),\"\")","v":""}]
[]
[null,null,"Validation"]
[null,null,"Code","Task","Priority","Priority Score","Rating","Rating Score"]
[null,null,"Va1","Methodology correctness","High",{"$f":"IFERROR(INDEX(Priority_Weight[Weight],MATCH(Validation_Score[[#This Row],[Priority]],Priority_Weight[Priority],0)),\"\")","v":9},{"$f":"IFERROR(INDEX(Validation[Rating], MATCH(Validation_Score[[#This Row],[Code]],Validation[Task Code],0)),\"\")","v":0},{"$f":"IFERROR(IF(Validation_Score[[#This Row],[Rating]]=0,Worst_Value,INDEX(Rating_Weight[Weight],MATCH(Validation_Score[[#This Row],[Rating]],Rating_Weight[Rating],0))),\"\")","v":10}]
[null,null,"Va2","Comparison with historical data / backcasting","Medium",{"$f":"IFERROR(INDEX(Priority_Weight[Weight],MATCH(Validation_Score[[#This Row],[Priority]],Priority_Weight[Priority],0)),\"\")","v":3},{"$f":"IFERROR(INDEX(Validation[Rating], MATCH(Validation_Score[[#This Row],[Code]],Validation[Task Code],0)),\"\")","v":0},{"$f":"IFERROR(IF(Validation_Score[[#This Row],[Rating]]=0,Worst_Value,INDEX(Rating_Weight[Weight],MATCH(Validation_Score[[#This Row],[Rating]],Rating_Weight[Rating],0))),\"\")","v":10}]
[null,null,"Va3","Uncertainty testing","Medium",{"$f":"IFERROR(INDEX(Priority_Weight[Weight],MATCH(Validation_Score[[#This Row],[Priority]],Priority_Weight[Priority],0)),\"\")","v":3},{"$f":"IFERROR(INDEX(Validation[Rating], MATCH(Validation_Score[[#This Row],[Code]],Validation[Task Code],0)),\"\")","v":0},{"$f":"IFERROR(IF(Validation_Score[[#This Row],[Rating]]=0,Worst_Value,INDEX(Rating_Weight[Weight],MATCH(Validation_Score[[#This Row],[Rating]],Rating_Weight[Rating],0))),\"\")","v":10}]
[null,null,"Va4","Extreme values testing / model breaking","Medium",{"$f":"IFERROR(INDEX(Priority_Weight[Weight],MATCH(Validation_Score[[#This Row],[Priority]],Priority_Weight[Priority],0)),\"\")","v":3},{"$f":"IFERROR(INDEX(Validation[Rating], MATCH(Validation_Score[[#This Row],[Code]],Validation[Task Code],0)),\"\")","v":0},{"$f":"IFERROR(IF(Validation_Score[[#This Row],[Rating]]=0,Worst_Value,INDEX(Rating_Weight[Weight],MATCH(Validation_Score[[#This Row],[Rating]],Rating_Weight[Rating],0))),\"\")","v":10}]
[null,null,"Va5","Re-performance testing","Low",{"$f":"IFERROR(INDEX(Priority_Weight[Weight],MATCH(Validation_Score[[#This Row],[Priority]],Priority_Weight[Priority],0)),\"\")","v":1},{"$f":"IFERROR(INDEX(Validation[Rating], MATCH(Validation_Score[[#This Row],[Code]],Validation[Task Code],0)),\"\")","v":0},{"$f":"IFERROR(IF(Validation_Score[[#This Row],[Rating]]=0,Worst_Value,INDEX(Rating_Weight[Weight],MATCH(Validation_Score[[#This Row],[Rating]],Rating_Weight[Rating],0))),\"\")","v":10}]
[null,null,"Va6",null,null,null,{"$f":"IFERROR(INDEX(Validation[Rating], MATCH(Validation_Score[[#This Row],[Code]],Validation[Task Code],0)),\"\")","v":""},{"$f":"IFERROR(IF(Validation_Score[[#This Row],[Rating]]=0,Worst_Value,INDEX(Rating_Weight[Weight],MATCH(Validation_Score[[#This Row],[Rating]],Rating_Weight[Rating],0))),\"\")","v":""}]
[null,null,"Va7",null,null,{"$f":"IFERROR(INDEX(Priority_Weight[Weight],MATCH(Validation_Score[[#This Row],[Priority]],Priority_Weight[Priority],0)),\"\")","v":""},{"$f":"IFERROR(INDEX(Validation[Rating], MATCH(Validation_Score[[#This Row],[Code]],Validation[Task Code],0)),\"\")","v":""},{"$f":"IFERROR(IF(Validation_Score[[#This Row],[Rating]]=0,Worst_Value,INDEX(Rating_Weight[Weight],MATCH(Validation_Score[[#This Row],[Rating]],Rating_Weight[Rating],0))),\"\")","v":""}]
[null,null,"Va8",null,null,{"$f":"IFERROR(INDEX(Priority_Weight[Weight],MATCH(Validation_Score[[#This Row],[Priority]],Priority_Weight[Priority],0)),\"\")","v":""},{"$f":"IFERROR(INDEX(Validation[Rating], MATCH(Validation_Score[[#This Row],[Code]],Validation[Task Code],0)),\"\")","v":""},{"$f":"IFERROR(IF(Validation_Score[[#This Row],[Rating]]=0,Worst_Value,INDEX(Rating_Weight[Weight],MATCH(Validation_Score[[#This Row],[Rating]],Rating_Weight[Rating],0))),\"\")","v":""}]
[null,null,"Va9",null,null,{"$f":"IFERROR(INDEX(Priority_Weight[Weight],MATCH(Validation_Score[[#This Row],[Priority]],Priority_Weight[Priority],0)),\"\")","v":""},{"$f":"IFERROR(INDEX(Validation[Rating], MATCH(Validation_Score[[#This Row],[Code]],Validation[Task Code],0)),\"\")","v":""},{"$f":"IFERROR(IF(Validation_Score[[#This Row],[Rating]]=0,Worst_Value,INDEX(Rating_Weight[Weight],MATCH(Validation_Score[[#This Row],[Rating]],Rating_Weight[Rating],0))),\"\")","v":""}]
[null,null,"Va10",null,null,{"$f":"IFERROR(INDEX(Priority_Weight[Weight],MATCH(Validation_Score[[#This Row],[Priority]],Priority_Weight[Priority],0)),\"\")","v":""},{"$f":"IFERROR(INDEX(Validation[Rating], MATCH(Validation_Score[[#This Row],[Code]],Validation[Task Code],0)),\"\")","v":""},{"$f":"IFERROR(IF(Validation_Score[[#This Row],[Rating]]=0,Worst_Value,INDEX(Rating_Weight[Weight],MATCH(Validation_Score[[#This Row],[Rating]],Rating_Weight[Rating],0))),\"\")","v":""}]
[null,null,null,null,null,{"$f":"IFERROR(INDEX(Priority_Weight[Weight],MATCH(Validation_Score[[#This Row],[Priority]],Priority_Weight[Priority],0)),\"\")","v":""},{"$f":"IFERROR(INDEX(Validation[Rating], MATCH(Validation_Score[[#This Row],[Code]],Validation[Task Code],0)),\"\")","v":""},{"$f":"IFERROR(IF(Validation_Score[[#This Row],[Rating]]=0,Worst_Value,INDEX(Rating_Weight[Weight],MATCH(Validation_Score[[#This Row],[Rating]],Rating_Weight[Rating],0))),\"\")","v":""}]
[null,null,"Data & Assumptions"]
[null,null,"Code","Task","Priority","Priority Score","Rating","Rating Score"]
[null,null,"DA1","Data","High",{"$f":"IFERROR(INDEX(Priority_Weight[Weight],MATCH(Data_Assumptions_Score[[#This Row],[Priority]],Priority_Weight[Priority],0)),\"\")","v":9},{"$f":"IFERROR(INDEX(Data_Assumptions[Rating], MATCH(Data_Assumptions_Score[[#This Row],[Code]],Data_Assumptions[Task Code],0)),\"\")","v":0},{"$f":"IFERROR(IF(Data_Assumptions_Score[[#This Row],[Rating]]=0,Worst_Value,INDEX(Rating_Weight[Weight],MATCH(Data_Assumptions_Score[[#This Row],[Rating]],Rating_Weight[Rating],0))),\"\")","v":10}]
[null,null,"DA2","Data transformation","Medium",{"$f":"IFERROR(INDEX(Priority_Weight[Weight],MATCH(Data_Assumptions_Score[[#This Row],[Priority]],Priority_Weight[Priority],0)),\"\")","v":3},{"$f":"IFERROR(INDEX(Data_Assumptions[Rating], MATCH(Data_Assumptions_Score[[#This Row],[Code]],Data_Assumptions[Task Code],0)),\"\")","v":0},{"$f":"IFERROR(IF(Data_Assumptions_Score[[#This Row],[Rating]]=0,Worst_Value,INDEX(Rating_Weight[Weight],MATCH(Data_Assumptions_Score[[#This Row],[Rating]],Rating_Weight[Rating],0))),\"\")","v":10}]
[null,null,"DA3","Assumptions","High",{"$f":"IFERROR(INDEX(Priority_Weight[Weight],MATCH(Data_Assumptions_Score[[#This Row],[Priority]],Priority_Weight[Priority],0)),\"\")","v":9},{"$f":"IFERROR(INDEX(Data_Assumptions[Rating], MATCH(Data_Assumptions_Score[[#This Row],[Code]],Data_Assumptions[Task Code],0)),\"\")","v":0},{"$f":"IFERROR(IF(Data_Assumptions_Score[[#This Row],[Rating]]=0,Worst_Value,INDEX(Rating_Weight[Weight],MATCH(Data_Assumptions_Score[[#This Row],[Rating]],Rating_Weight[Rating],0))),\"\")","v":10}]
[null,null,"DA4",null,null,{"$f":"IFERROR(INDEX(Priority_Weight[Weight],MATCH(Data_Assumptions_Score[[#This Row],[Priority]],Priority_Weight[Priority],0)),\"\")","v":""},{"$f":"IFERROR(INDEX(Data_Assumptions[Rating], MATCH(Data_Assumptions_Score[[#This Row],[Code]],Data_Assumptions[Task Code],0)),\"\")","v":""},{"$f":"IFERROR(IF(Data_Assumptions_Score[[#This Row],[Rating]]=0,Worst_Value,INDEX(Rating_Weight[Weight],MATCH(Data_Assumptions_Score[[#This Row],[Rating]],Rating_Weight[Rating],0))),\"\")","v":""}]
[null,null,"DA5",null,null,{"$f":"IFERROR(INDEX(Priority_Weight[Weight],MATCH(Data_Assumptions_Score[[#This Row],[Priority]],Priority_Weight[Priority],0)),\"\")","v":""},{"$f":"IFERROR(INDEX(Data_Assumptions[Rating], MATCH(Data_Assumptions_Score[[#This Row],[Code]],Data_Assumptions[Task Code],0)),\"\")","v":""},{"$f":"IFERROR(IF(Data_Assumptions_Score[[#This Row],[Rating]]=0,Worst_Value,INDEX(Rating_Weight[Weight],MATCH(Data_Assumptions_Score[[#This Row],[Rating]],Rating_Weight[Rating],0))),\"\")","v":""}]
[null,null,"DA6",null,null,{"$f":"IFERROR(INDEX(Priority_Weight[Weight],MATCH(Data_Assumptions_Score[[#This Row],[Priority]],Priority_Weight[Priority],0)),\"\")","v":""},{"$f":"IFERROR(INDEX(Data_Assumptions[Rating], MATCH(Data_Assumptions_Score[[#This Row],[Code]],Data_Assumptions[Task Code],0)),\"\")","v":""},{"$f":"IFERROR(IF(Data_Assumptions_Score[[#This Row],[Rating]]=0,Worst_Value,INDEX(Rating_Weight[Weight],MATCH(Data_Assumptions_Score[[#This Row],[Rating]],Rating_Weight[Rating],0))),\"\")","v":""}]
[null,null,"DA7",null,null,{"$f":"IFERROR(INDEX(Priority_Weight[Weight],MATCH(Data_Assumptions_Score[[#This Row],[Priority]],Priority_Weight[Priority],0)),\"\")","v":""},{"$f":"IFERROR(INDEX(Data_Assumptions[Rating], MATCH(Data_Assumptions_Score[[#This Row],[Code]],Data_Assumptions[Task Code],0)),\"\")","v":""},{"$f":"IFERROR(IF(Data_Assumptions_Score[[#This Row],[Rating]]=0,Worst_Value,INDEX(Rating_Weight[Weight],MATCH(Data_Assumptions_Score[[#This Row],[Rating]],Rating_Weight[Rating],0))),\"\")","v":""}]
[null,null,"DA8",null,null,{"$f":"IFERROR(INDEX(Priority_Weight[Weight],MATCH(Data_Assumptions_Score[[#This Row],[Priority]],Priority_Weight[Priority],0)),\"\")","v":""},{"$f":"IFERROR(INDEX(Data_Assumptions[Rating], MATCH(Data_Assumptions_Score[[#This Row],[Code]],Data_Assumptions[Task Code],0)),\"\")","v":""},{"$f":"IFERROR(IF(Data_Assumptions_Score[[#This Row],[Rating]]=0,Worst_Value,INDEX(Rating_Weight[Weight],MATCH(Data_Assumptions_Score[[#This Row],[Rating]],Rating_Weight[Rating],0))),\"\")","v":""}]
[null,null,"DA9",null,null,{"$f":"IFERROR(INDEX(Priority_Weight[Weight],MATCH(Data_Assumptions_Score[[#This Row],[Priority]],Priority_Weight[Priority],0)),\"\")","v":""},{"$f":"IFERROR(INDEX(Data_Assumptions[Rating], MATCH(Data_Assumptions_Score[[#This Row],[Code]],Data_Assumptions[Task Code],0)),\"\")","v":""},{"$f":"IFERROR(IF(Data_Assumptions_Score[[#This Row],[Rating]]=0,Worst_Value,INDEX(Rating_Weight[Weight],MATCH(Data_Assumptions_Score[[#This Row],[Rating]],Rating_Weight[Rating],0))),\"\")","v":""}]
[null,null,"DA10",null,null,{"$f":"IFERROR(INDEX(Priority_Weight[Weight],MATCH(Data_Assumptions_Score[[#This Row],[Priority]],Priority_Weight[Priority],0)),\"\")","v":""},{"$f":"IFERROR(INDEX(Data_Assumptions[Rating], MATCH(Data_Assumptions_Score[[#This Row],[Code]],Data_Assumptions[Task Code],0)),\"\")","v":""},{"$f":"IFERROR(IF(Data_Assumptions_Score[[#This Row],[Rating]]=0,Worst_Value,INDEX(Rating_Weight[Weight],MATCH(Data_Assumptions_Score[[#This Row],[Rating]],Rating_Weight[Rating],0))),\"\")","v":""}]

{"sheet":"QA plan","index":9,"n_rows":39,"n_cols":13,"rows_kept":39,"cut":false,"hidden":false,"merged":[[4,1,4,12]]}
[]
[{"$f":"IF(SecurityClassification=\"OFFICIAL\",\"\",SecurityClassification & \" - \")  & DocumentName & \" QA log - version \" & VersionNumber","v":" -  QA log - version "}]
[]
[]
[null,"This sheet must be used to list QA activities that will be carried out on the model in order to reach a QA score of 90% or more. \nThe QA activities are taken from the orange sheets of this file: the model owner should use filters on the \"Score before this QA task was undertaken\" to hide the tasks which have already been performed (i.e. those having Excellent as rating). For the remaining tasks, the model owner should fill all the columns in the table below. \nQA tasks can be split in more activities if helpful. For example, the formula correctness (Ve1) can be ensured through several stages of checks (e.g. first review main sheets then remaining calculations) and each of those checks can have a separate row in the table below."]
[null,"The end of the next financial year is highlighted in green. Rating improvements due to tasks that should have been completed in the past ARE NOT CONSIDERED"]
[null,null,{"$f":"TODAY()","v":"2024-01-23"},{"$f":"MIN(DATE(YEAR(C7+100),MONTH(C7+100),1),DATE(IF(MONTH(C7)<4,YEAR(C7),YEAR(C7)+1),4,1))","v":"2024-04-01"},{"$f":"MIN(DATE(YEAR(D7+100),MONTH(D7+100),1),DATE(IF(MONTH(D7)<4,YEAR(D7),YEAR(D7)+1),4,1))","v":"2024-07-01"},{"$f":"MIN(DATE(YEAR(E7+100),MONTH(E7+100),1),DATE(IF(MONTH(E7)<4,YEAR(E7),YEAR(E7)+1),4,1))","v":"2024-10-01"},{"$f":"MIN(DATE(YEAR(F7+100),MONTH(F7+100),1),DATE(IF(MONTH(F7)<4,YEAR(F7),YEAR(F7)+1),4,1))","v":"2025-01-01"},{"$f":"MIN(DATE(YEAR(G7+100),MONTH(G7+100),1),DATE(IF(MONTH(G7)<4,YEAR(G7),YEAR(G7)+1),4,1))","v":"2025-04-01"}]
[null,"Autocalculated QA score",{"$f":"Review_Overall_Score","v":0},{"$f":"OriginalScore+SUMIFS(Table1[Score change],Table1[Completion date],\"<\" & D7,Table1[Completion date],\">=\"&TODAY())","v":0},{"$f":"OriginalScore+SUMIFS(Table1[Score change],Table1[Completion date],\"<\" & E7,Table1[Completion date],\">=\"&TODAY())","v":0},{"$f":"OriginalScore+SUMIFS(Table1[Score change],Table1[Completion date],\"<\" & F7,Table1[Completion date],\">=\"&TODAY())","v":0},{"$f":"OriginalScore+SUMIFS(Table1[Score change],Table1[Completion date],\"<\" & G7,Table1[Completion date],\">=\"&TODAY())","v":0},{"$f":"OriginalScore+SUMIFS(Table1[Score change],Table1[Completion date],\"<\" & H7,Table1[Completion date],\">=\"&TODAY())","v":0}]
[null,"Please add any comments"]
[]
[null,"QA section","Linked to the QA log","As written in the QA log","Describe the QA task to perform","An assessment of the importance of the task for the model","Person who will perform the task","Insert estimated time required to complete the task","Estimated date when the QA activity has been completed. ROWS ARE HIGHLIGHTED IN RED IF THE DATE IS IN THE PAST","Date when MIT checked the task was completed","Taken from the QA log, change the rating there when the task is complete","Look at the ratings guidelines in the orange tabs\nROWS ARE HIGHLIGHTED IN GREEN IF THE SCORE IS REACHED","Change (percentage points) in the overall score when the task is complete"]
[null,"Section","QA task ","Outstanding work","Task description","Priority","Name","Person hours required","Completion date","Checked by MIT","Score before this QA task was undertaken","Expected score after this QA is done","Score change"]
[null,"Documentation","Scope Document",{"$f":"INDEX(INDIRECT(SUBSTITUTE(Table1[[#This Row],[Section]], \" & \", \"_\") & \"[Outstanding Work]\"),MATCH(INDEX(INDIRECT(SUBSTITUTE(Table1[[#This Row],[Section]], \" & \", \"_\") & \"_Score[Code]\"),MATCH(Table1[[#This Row],[QA task ]],INDIRECT(SUBSTITUTE(Table1[[#This Row],[Section]], \" & \", \"_\") & \"_Score[Task]\"),0)),INDIRECT(SUBSTITUTE(Table1[[#This Row],[Section]], \" & \", \"_\") & \"[Task Code]\"),0))&\"\"","v":"Must\n\nShould\n\nCould"},null,null,null,null,null,null,{"$f":"INDEX(INDIRECT(SUBSTITUTE(Table1[[#This Row],[Section]], \" & \", \"_\") & \"[Rating]\"),MATCH(INDEX(INDIRECT(SUBSTITUTE(Table1[[#This Row],[Section]], \" & \", \"_\") & \"_Score[Code]\"),MATCH(Table1[[#This Row],[QA task ]],INDIRECT(SUBSTITUTE(Table1[[#This Row],[Section]], \" & \", \"_\") & \"_Score[Task]\"),0)),INDIRECT(SUBSTITUTE(Table1[[#This Row],[Section]], \" & \", \"_\") & \"[Task Code]\"),0))&\"\"","v":""},null,{"$f":"IFERROR(INDEX(QASections_Score[Importance score],MATCH(Table1[[#This Row],[Section]],QASections_Score[Section],0))/SUM(QASections_Score[Importance score])*INDEX(INDIRECT(SUBSTITUTE(Table1[[#This Row],[Section]], \" & \", \"_\") & \"_Score[Priority Score]\"),MATCH(Table1[[#This Row],[QA task ]],INDIRECT(SUBSTITUTE(Table1[[#This Row],[Section]], \" & \", \"_\") & \"_Score[Task]\"),0))/SUMIF(INDIRECT(SUBSTITUTE(Table1[[#This Row],[Section]],\" & \", \"_\") & \"_Score[Rating]\"),\"<>N/A\",INDIRECT(SUBSTITUTE(Table1[[#This Row],[Section]],\" & \", \"_\") & \"_Score[Priority Score]\"))*(INDEX(Rating_Weight[Weight],MATCH(Table1[[#This Row],[Score before this QA task was undertaken]],Rating_Weight[Rating],0))-INDEX(Rating_Weight[Weight],MATCH(Table1[[#This Row],[Expected score after this QA is done]],Rating_Weight[Rating],0)))/10,0)","v":0}]
[null,"Documentation","Spec Document",{"$f":"INDEX(INDIRECT(SUBSTITUTE(Table1[[#This Row],[Section]], \" & \", \"_\") & \"[Outstanding Work]\"),MATCH(INDEX(INDIRECT(SUBSTITUTE(Table1[[#This Row],[Section]], \" & \", \"_\") & \"_Score[Code]\"),MATCH(Table1[[#This Row],[QA task ]],INDIRECT(SUBSTITUTE(Table1[[#This Row],[Section]], \" & \", \"_\") & \"_Score[Task]\"),0)),INDIRECT(SUBSTITUTE(Table1[[#This Row],[Section]], \" & \", \"_\") & \"[Task Code]\"),0))&\"\"","v":"Must\n\nShould\n\nCould"},null,null,null,null,null,null,{"$f":"INDEX(INDIRECT(SUBSTITUTE(Table1[[#This Row],[Section]], \" & \", \"_\") & \"[Rating]\"),MATCH(INDEX(INDIRECT(SUBSTITUTE(Table1[[#This Row],[Section]], \" & \", \"_\") & \"_Score[Code]\"),MATCH(Table1[[#This Row],[QA task ]],INDIRECT(SUBSTITUTE(Table1[[#This Row],[Section]], \" & \", \"_\") & \"_Score[Task]\"),0)),INDIRECT(SUBSTITUTE(Table1[[#This Row],[Section]], \" & \", \"_\") & \"[Task Code]\"),0))&\"\"","v":""},null,{"$f":"IFERROR(INDEX(QASections_Score[Importance score],MATCH(Table1[[#This Row],[Section]],QASections_Score[Section],0))/SUM(QASections_Score[Importance score])*INDEX(INDIRECT(SUBSTITUTE(Table1[[#This Row],[Section]], \" & \", \"_\") & \"_Score[Priority Score]\"),MATCH(Table1[[#This Row],[QA task ]],INDIRECT(SUBSTITUTE(Table1[[#This Row],[Section]], \" & \", \"_\") & \"_Score[Task]\"),0))/SUMIF(INDIRECT(SUBSTITUTE(Table1[[#This Row],[Section]],\" & \", \"_\") & \"_Score[Rating]\"),\"<>N/A\",INDIRECT(SUBSTITUTE(Table1[[#This Row],[Section]],\" & \", \"_\") & \"_Score[Priority Score]\"))*(INDEX(Rating_Weight[Weight],MATCH(Table1[[#This Row],[Score before this QA task was undertaken]],Rating_Weight[Rating],0))-INDEX(Rating_Weight[Weight],MATCH(Table1[[#This Row],[Expected score after this QA is done]],Rating_Weight[Rating],0)))/10,0)","v":0}]
[null,"Documentation","User guide",{"$f":"INDEX(INDIRECT(SUBSTITUTE(Table1[[#This Row],[Section]], \" & \", \"_\") & \"[Outstanding Work]\"),MATCH(INDEX(INDIRECT(SUBSTITUTE(Table1[[#This Row],[Section]], \" & \", \"_\") & \"_Score[Code]\"),MATCH(Table1[[#This Row],[QA task ]],INDIRECT(SUBSTITUTE(Table1[[#This Row],[Section]], \" & \", \"_\") & \"_Score[Task]\"),0)),INDIRECT(SUBSTITUTE(Table1[[#This Row],[Section]], \" & \", \"_\") & \"[Task Code]\"),0))&\"\"","v":"Must\n\nShould\n\nCould"},null,null,null,null,null,null,{"$f":"INDEX(INDIRECT(SUBSTITUTE(Table1[[#This Row],[Section]], \" & \", \"_\") & \"[Rating]\"),MATCH(INDEX(INDIRECT(SUBSTITUTE(Table1[[#This Row],[Section]], \" & \", \"_\") & \"_Score[Code]\"),MATCH(Table1[[#This Row],[QA task ]],INDIRECT(SUBSTITUTE(Table1[[#This Row],[Section]], \" & \", \"_\") & \"_Score[Task]\"),0)),INDIRECT(SUBSTITUTE(Table1[[#This Row],[Section]], \" & \", \"_\") & \"[Task Code]\"),0))&\"\"","v":""},null,{"$f":"IFERROR(INDEX(QASections_Score[Importance score],MATCH(Table1[[#This Row],[Section]],QASections_Score[Section],0))/SUM(QASections_Score[Importance score])*INDEX(INDIRECT(SUBSTITUTE(Table1[[#This Row],[Section]], \" & \", \"_\") & \"_Score[Priority Score]\"),MATCH(Table1[[#This Row],[QA task ]],INDIRECT(SUBSTITUTE(Table1[[#This Row],[Section]], \" & \", \"_\") & \"_Score[Task]\"),0))/SUMIF(INDIRECT(SUBSTITUTE(Table1[[#This Row],[Section]],\" & \", \"_\") & \"_Score[Rating]\"),\"<>N/A\",INDIRECT(SUBSTITUTE(Table1[[#This Row],[Section]],\" & \", \"_\") & \"_Score[Priority Score]\"))*(INDEX(Rating_Weight[Weight],MATCH(Table1[[#This Row],[Score before this QA task was undertaken]],Rating_Weight[Rating],0))-INDEX(Rating_Weight[Weight],MATCH(Table1[[#This Row],[Expected score after this QA is done]],Rating_Weight[Rating],0)))/10,0)","v":0}]
[null,"Documentation","Technical guide",{"$f":"INDEX(INDIRECT(SUBSTITUTE(Table1[[#This Row],[Section]], \" & \", \"_\") & \"[Outstanding Work]\"),MATCH(INDEX(INDIRECT(SUBSTITUTE(Table1[[#This Row],[Section]], \" & \", \"_\") & \"_Score[Code]\"),MATCH(Table1[[#This Row],[QA task ]],INDIRECT(SUBSTITUTE(Table1[[#This Row],[Section]], \" & \", \"_\") & \"_Score[Task]\"),0)),INDIRECT(SUBSTITUTE(Table1[[#This Row],[Section]], \" & \", \"_\") & \"[Task Code]\"),0))&\"\"","v":"Must\n\nShould\n\nCould"},null,null,null,null,null,null,{"$f":"INDEX(INDIRECT(SUBSTITUTE(Table1[[#This Row],[Section]], \" & \", \"_\") & \"[Rating]\"),MATCH(INDEX(INDIRECT(SUBSTITUTE(Table1[[#This Row],[Section]], \" & \", \"_\") & \"_Score[Code]\"),MATCH(Table1[[#This Row],[QA task ]],INDIRECT(SUBSTITUTE(Table1[[#This Row],[Section]], \" & \", \"_\") & \"_Score[Task]\"),0)),INDIRECT(SUBSTITUTE(Table1[[#This Row],[Section]], \" & \", \"_\") & \"[Task Code]\"),0))&\"\"","v":""},null,{"$f":"IFERROR(INDEX(QASections_Score[Importance score],MATCH(Table1[[#This Row],[Section]],QASections_Score[Section],0))/SUM(QASections_Score[Importance score])*INDEX(INDIRECT(SUBSTITUTE(Table1[[#This Row],[Section]], \" & \", \"_\") & \"_Score[Priority Score]\"),MATCH(Table1[[#This Row],[QA task ]],INDIRECT(SUBSTITUTE(Table1[[#This Row],[Section]], \" & \", \"_\") & \"_Score[Task]\"),0))/SUMIF(INDIRECT(SUBSTITUTE(Table1[[#This Row],[Section]],\" & \", \"_\") & \"_Score[Rating]\"),\"<>N/A\",INDIRECT(SUBSTITUTE(Table1[[#This Row],[Section]],\" & \", \"_\") & \"_Score[Priority Score]\"))*(INDEX(Rating_Weight[Weight],MATCH(Table1[[#This Row],[Score before this QA task was undertaken]],Rating_Weight[Rating],0))-INDEX(Rating_Weight[Weight],MATCH(Table1[[#This Row],[Expected score after this QA is done]],Rating_Weight[Rating],0)))/10,0)","v":0}]
[null,"Documentation","Knowledge Management",{"$f":"INDEX(INDIRECT(SUBSTITUTE(Table1[[#This Row],[Section]], \" & \", \"_\") & \"[Outstanding Work]\"),MATCH(INDEX(INDIRECT(SUBSTITUTE(Table1[[#This Row],[Section]], \" & \", \"_\") & \"_Score[Code]\"),MATCH(Table1[[#This Row],[QA task ]],INDIRECT(SUBSTITUTE(Table1[[#This Row],[Section]], \" & \", \"_\") & \"_Score[Task]\"),0)),INDIRECT(SUBSTITUTE(Table1[[#This Row],[Section]], \" & \", \"_\") & \"[Task Code]\"),0))&\"\"","v":{"$error":"#N/A"}},null,null,null,null,null,null,{"$f":"INDEX(INDIRECT(SUBSTITUTE(Table1[[#This Row],[Section]], \" & \", \"_\") & \"[Rating]\"),MATCH(INDEX(INDIRECT(SUBSTITUTE(Table1[[#This Row],[Section]], \" & \", \"_\") & \"_Score[Code]\"),MATCH(Table1[[#This Row],[QA task ]],INDIRECT(SUBSTITUTE(Table1[[#This Row],[Section]], \" & \", \"_\") & \"_Score[Task]\"),0)),INDIRECT(SUBSTITUTE(Table1[[#This Row],[Section]], \" & \", \"_\") & \"[Task Code]\"),0))&\"\"","v":{"$error":"#N/A"}},null,{"$f":"IFERROR(INDEX(QASections_Score[Importance score],MATCH(Table1[[#This Row],[Section]],QASections_Score[Section],0))/SUM(QASections_Score[Importance score])*INDEX(INDIRECT(SUBSTITUTE(Table1[[#This Row],[Section]], \" & \", \"_\") & \"_Score[Priority Score]\"),MATCH(Table1[[#This Row],[QA task ]],INDIRECT(SUBSTITUTE(Table1[[#This Row],[Section]], \" & \", \"_\") & \"_Score[Task]\"),0))/SUMIF(INDIRECT(SUBSTITUTE(Table1[[#This Row],[Section]],\" & \", \"_\") & \"_Score[Rating]\"),\"<>N/A\",INDIRECT(SUBSTITUTE(Table1[[#This Row],[Section]],\" & \", \"_\") & \"_Score[Priority Score]\"))*(INDEX(Rating_Weight[Weight],MATCH(Table1[[#This Row],[Score before this QA task was undertaken]],Rating_Weight[Rating],0))-INDEX(Rating_Weight[Weight],MATCH(Table1[[#This Row],[Expected score after this QA is done]],Rating_Weight[Rating],0)))/10,0)","v":0}]
[null,"Documentation","Version Control",{"$f":"INDEX(INDIRECT(SUBSTITUTE(Table1[[#This Row],[Section]], \" & \", \"_\") & \"[Outstanding Work]\"),MATCH(INDEX(INDIRECT(SUBSTITUTE(Table1[[#This Row],[Section]], \" & \", \"_\") & \"_Score[Code]\"),MATCH(Table1[[#This Row],[QA task ]],INDIRECT(SUBSTITUTE(Table1[[#This Row],[Section]], \" & \", \"_\") & \"_Score[Task]\"),0)),INDIRECT(SUBSTITUTE(Table1[[#This Row],[Section]], \" & \", \"_\") & \"[Task Code]\"),0))&\"\"","v":{"$error":"#N/A"}},null,null,null,null,null,null,{"$f":"INDEX(INDIRECT(SUBSTITUTE(Table1[[#This Row],[Section]], \" & \", \"_\") & \"[Rating]\"),MATCH(INDEX(INDIRECT(SUBSTITUTE(Table1[[#This Row],[Section]], \" & \", \"_\") & \"_Score[Code]\"),MATCH(Table1[[#This Row],[QA task ]],INDIRECT(SUBSTITUTE(Table1[[#This Row],[Section]], \" & \", \"_\") & \"_Score[Task]\"),0)),INDIRECT(SUBSTITUTE(Table1[[#This Row],[Section]], \" & \", \"_\") & \"[Task Code]\"),0))&\"\"","v":{"$error":"#N/A"}},null,{"$f":"IFERROR(INDEX(QASections_Score[Importance score],MATCH(Table1[[#This Row],[Section]],QASections_Score[Section],0))/SUM(QASections_Score[Importance score])*INDEX(INDIRECT(SUBSTITUTE(Table1[[#This Row],[Section]], \" & \", \"_\") & \"_Score[Priority Score]\"),MATCH(Table1[[#This Row],[QA task ]],INDIRECT(SUBSTITUTE(Table1[[#This Row],[Section]], \" & \", \"_\") & \"_Score[Task]\"),0))/SUMIF(INDIRECT(SUBSTITUTE(Table1[[#This Row],[Section]],\" & \", \"_\") & \"_Score[Rating]\"),\"<>N/A\",INDIRECT(SUBSTITUTE(Table1[[#This Row],[Section]],\" & \", \"_\") & \"_Score[Priority Score]\"))*(INDEX(Rating_Weight[Weight],MATCH(Table1[[#This Row],[Score before this QA task was undertaken]],Rating_Weight[Rating],0))-INDEX(Rating_Weight[Weight],MATCH(Table1[[#This Row],[Expected score after this QA is done]],Rating_Weight[Rating],0)))/10,0)","v":0}]
[null,"Documentation","Governance and responsibilities",{"$f":"INDEX(INDIRECT(SUBSTITUTE(Table1[[#This Row],[Section]], \" & \", \"_\") & \"[Outstanding Work]\"),MATCH(INDEX(INDIRECT(SUBSTITUTE(Table1[[#This Row],[Section]], \" & \", \"_\") & \"_Score[Code]\"),MATCH(Table1[[#This Row],[QA task ]],INDIRECT(SUBSTITUTE(Table1[[#This Row],[Section]], \" & \", \"_\") & \"_Score[Task]\"),0)),INDIRECT(SUBSTITUTE(Table1[[#This Row],[Section]], \" & \", \"_\") & \"[Task Code]\"),0))&\"\"","v":"Must\n\nShould\n\nCould"},null,null,null,null,null,null,{"$f":"INDEX(INDIRECT(SUBSTITUTE(Table1[[#This Row],[Section]], \" & \", \"_\") & \"[Rating]\"),MATCH(INDEX(INDIRECT(SUBSTITUTE(Table1[[#This Row],[Section]], \" & \", \"_\") & \"_Score[Code]\"),MATCH(Table1[[#This Row],[QA task ]],INDIRECT(SUBSTITUTE(Table1[[#This Row],[Section]], \" & \", \"_\") & \"_Score[Task]\"),0)),INDIRECT(SUBSTITUTE(Table1[[#This Row],[Section]], \" & \", \"_\") & \"[Task Code]\"),0))&\"\"","v":""},null,{"$f":"IFERROR(INDEX(QASections_Score[Importance score],MATCH(Table1[[#This Row],[Section]],QASections_Score[Section],0))/SUM(QASections_Score[Importance score])*INDEX(INDIRECT(SUBSTITUTE(Table1[[#This Row],[Section]], \" & \", \"_\") & \"_Score[Priority Score]\"),MATCH(Table1[[#This Row],[QA task ]],INDIRECT(SUBSTITUTE(Table1[[#This Row],[Section]], \" & \", \"_\") & \"_Score[Task]\"),0))/SUMIF(INDIRECT(SUBSTITUTE(Table1[[#This Row],[Section]],\" & \", \"_\") & \"_Score[Rating]\"),\"<>N/A\",INDIRECT(SUBSTITUTE(Table1[[#This Row],[Section]],\" & \", \"_\") & \"_Score[Priority Score]\"))*(INDEX(Rating_Weight[Weight],MATCH(Table1[[#This Row],[Score before this QA task was undertaken]],Rating_Weight[Rating],0))-INDEX(Rating_Weight[Weight],MATCH(Table1[[#This Row],[Expected score after this QA is done]],Rating_Weight[Rating],0)))/10,0)","v":0}]
[null,"Documentation","Model classification & security",{"$f":"INDEX(INDIRECT(SUBSTITUTE(Table1[[#This Row],[Section]], \" & \", \"_\") & \"[Outstanding Work]\"),MATCH(INDEX(INDIRECT(SUBSTITUTE(Table1[[#This Row],[Section]], \" & \", \"_\") & \"_Score[Code]\"),MATCH(Table1[[#This Row],[QA task ]],INDIRECT(SUBSTITUTE(Table1[[#This Row],[Section]], \" & \", \"_\") & \"_Score[Task]\"),0)),INDIRECT(SUBSTITUTE(Table1[[#This Row],[Section]], \" & \", \"_\") & \"[Task Code]\"),0))&\"\"","v":"Must\n\nShould\n\nCould"},null,null,null,null,null,null,{"$f":"INDEX(INDIRECT(SUBSTITUTE(Table1[[#This Row],[Section]], \" & \", \"_\") & \"[Rating]\"),MATCH(INDEX(INDIRECT(SUBSTITUTE(Table1[[#This Row],[Section]], \" & \", \"_\") & \"_Score[Code]\"),MATCH(Table1[[#This Row],[QA task ]],INDIRECT(SUBSTITUTE(Table1[[#This Row],[Section]], \" & \", \"_\") & \"_Score[Task]\"),0)),INDIRECT(SUBSTITUTE(Table1[[#This Row],[Section]], \" & \", \"_\") & \"[Task Code]\"),0))&\"\"","v":""},null,{"$f":"IFERROR(INDEX(QASections_Score[Importance score],MATCH(Table1[[#This Row],[Section]],QASections_Score[Section],0))/SUM(QASections_Score[Importance score])*INDEX(INDIRECT(SUBSTITUTE(Table1[[#This Row],[Section]], \" & \", \"_\") & \"_Score[Priority Score]\"),MATCH(Table1[[#This Row],[QA task ]],INDIRECT(SUBSTITUTE(Table1[[#This Row],[Section]], \" & \", \"_\") & \"_Score[Task]\"),0))/SUMIF(INDIRECT(SUBSTITUTE(Table1[[#This Row],[Section]],\" & \", \"_\") & \"_Score[Rating]\"),\"<>N/A\",INDIRECT(SUBSTITUTE(Table1[[#This Row],[Section]],\" & \", \"_\") & \"_Score[Priority Score]\"))*(INDEX(Rating_Weight[Weight],MATCH(Table1[[#This Row],[Score before this QA task was undertaken]],Rating_Weight[Rating],0))-INDEX(Rating_Weight[Weight],MATCH(Table1[[#This Row],[Expected score after this QA is done]],Rating_Weight[Rating],0)))/10,0)","v":0}]
[null,"Documentation","QA planning and resourcing",{"$f":"INDEX(INDIRECT(SUBSTITUTE(Table1[[#This Row],[Section]], \" & \", \"_\") & \"[Outstanding Work]\"),MATCH(INDEX(INDIRECT(SUBSTITUTE(Table1[[#This Row],[Section]], \" & \", \"_\") & \"_Score[Code]\"),MATCH(Table1[[#This Row],[QA task ]],INDIRECT(SUBSTITUTE(Table1[[#This Row],[Section]], \" & \", \"_\") & \"_Score[Task]\"),0)),INDIRECT(SUBSTITUTE(Table1[[#This Row],[Section]], \" & \", \"_\") & \"[Task Code]\"),0))&\"\"","v":"Must\n\nShould\n\nCould"},null,null,null,null,null,null,{"$f":"INDEX(INDIRECT(SUBSTITUTE(Table1[[#This Row],[Section]], \" & \", \"_\") & \"[Rating]\"),MATCH(INDEX(INDIRECT(SUBSTITUTE(Table1[[#This Row],[Section]], \" & \", \"_\") & \"_Score[Code]\"),MATCH(Table1[[#This Row],[QA task ]],INDIRECT(SUBSTITUTE(Table1[[#This Row],[Section]], \" & \", \"_\") & \"_Score[Task]\"),0)),INDIRECT(SUBSTITUTE(Table1[[#This Row],[Section]], \" & \", \"_\") & \"[Task Code]\"),0))&\"\"","v":""},null,{"$f":"IFERROR(INDEX(QASections_Score[Importance score],MATCH(Table1[[#This Row],[Section]],QASections_Score[Section],0))/SUM(QASections_Score[Importance score])*INDEX(INDIRECT(SUBSTITUTE(Table1[[#This Row],[Section]], \" & \", \"_\") & \"_Score[Priority Score]\"),MATCH(Table1[[#This Row],[QA task ]],INDIRECT(SUBSTITUTE(Table1[[#This Row],[Section]], \" & \", \"_\") & \"_Score[Task]\"),0))/SUMIF(INDIRECT(SUBSTITUTE(Table1[[#This Row],[Section]],\" & \", \"_\") & \"_Score[Rating]\"),\"<>N/A\",INDIRECT(SUBSTITUTE(Table1[[#This Row],[Section]],\" & \", \"_\") & \"_Score[Priority Score]\"))*(INDEX(Rating_Weight[Weight],MATCH(Table1[[#This Row],[Score before this QA task was undertaken]],Rating_Weight[Rating],0))-INDEX(Rating_Weight[Weight],MATCH(Table1[[#This Row],[Expected score after this QA is done]],Rating_Weight[Rating],0)))/10,0)","v":0}]
[null,"Documentation","Business continuity & Disaster Recovery ",{"$f":"INDEX(INDIRECT(SUBSTITUTE(Table1[[#This Row],[Section]], \" & \", \"_\") & \"[Outstanding Work]\"),MATCH(INDEX(INDIRECT(SUBSTITUTE(Table1[[#This Row],[Section]], \" & \", \"_\") & \"_Score[Code]\"),MATCH(Table1[[#This Row],[QA task ]],INDIRECT(SUBSTITUTE(Table1[[#This Row],[Section]], \" & \", \"_\") & \"_Score[Task]\"),0)),INDIRECT(SUBSTITUTE(Table1[[#This Row],[Section]], \" & \", \"_\") & \"[Task Code]\"),0))&\"\"","v":{"$error":"#N/A"}},null,null,null,null,null,null,{"$f":"INDEX(INDIRECT(SUBSTITUTE(Table1[[#This Row],[Section]], \" & \", \"_\") & \"[Rating]\"),MATCH(INDEX(INDIRECT(SUBSTITUTE(Table1[[#This Row],[Section]], \" & \", \"_\") & \"_Score[Code]\"),MATCH(Table1[[#This Row],[QA task ]],INDIRECT(SUBSTITUTE(Table1[[#This Row],[Section]], \" & \", \"_\") & \"_Score[Task]\"),0)),INDIRECT(SUBSTITUTE(Table1[[#This Row],[Section]], \" & \", \"_\") & \"[Task Code]\"),0))&\"\"","v":{"$error":"#N/A"}},null,{"$f":"IFERROR(INDEX(QASections_Score[Importance score],MATCH(Table1[[#This Row],[Section]],QASections_Score[Section],0))/SUM(QASections_Score[Importance score])*INDEX(INDIRECT(SUBSTITUTE(Table1[[#This Row],[Section]], \" & \", \"_\") & \"_Score[Priority Score]\"),MATCH(Table1[[#This Row],[QA task ]],INDIRECT(SUBSTITUTE(Table1[[#This Row],[Section]], \" & \", \"_\") & \"_Score[Task]\"),0))/SUMIF(INDIRECT(SUBSTITUTE(Table1[[#This Row],[Section]],\" & \", \"_\") & \"_Score[Rating]\"),\"<>N/A\",INDIRECT(SUBSTITUTE(Table1[[#This Row],[Section]],\" & \", \"_\") & \"_Score[Priority Score]\"))*(INDEX(Rating_Weight[Weight],MATCH(Table1[[#This Row],[Score before this QA task was undertaken]],Rating_Weight[Rating],0))-INDEX(Rating_Weight[Weight],MATCH(Table1[[#This Row],[Expected score after this QA is done]],Rating_Weight[Rating],0)))/10,0)","v":0}]
[null,"Structure & Clarity","Model structure",{"$f":"INDEX(INDIRECT(SUBSTITUTE(Table1[[#This Row],[Section]], \" & \", \"_\") & \"[Outstanding Work]\"),MATCH(INDEX(INDIRECT(SUBSTITUTE(Table1[[#This Row],[Section]], \" & \", \"_\") & \"_Score[Code]\"),MATCH(Table1[[#This Row],[QA task ]],INDIRECT(SUBSTITUTE(Table1[[#This Row],[Section]], \" & \", \"_\") & \"_Score[Task]\"),0)),INDIRECT(SUBSTITUTE(Table1[[#This Row],[Section]], \" & \", \"_\") & \"[Task Code]\"),0))&\"\"","v":"Must\n\nShould\n\nCould"},null,null,null,null,null,null,{"$f":"INDEX(INDIRECT(SUBSTITUTE(Table1[[#This Row],[Section]], \" & \", \"_\") & \"[Rating]\"),MATCH(INDEX(INDIRECT(SUBSTITUTE(Table1[[#This Row],[Section]], \" & \", \"_\") & \"_Score[Code]\"),MATCH(Table1[[#This Row],[QA task ]],INDIRECT(SUBSTITUTE(Table1[[#This Row],[Section]], \" & \", \"_\") & \"_Score[Task]\"),0)),INDIRECT(SUBSTITUTE(Table1[[#This Row],[Section]], \" & \", \"_\") & \"[Task Code]\"),0))&\"\"","v":""},null,{"$f":"IFERROR(INDEX(QASections_Score[Importance score],MATCH(Table1[[#This Row],[Section]],QASections_Score[Section],0))/SUM(QASections_Score[Importance score])*INDEX(INDIRECT(SUBSTITUTE(Table1[[#This Row],[Section]], \" & \", \"_\") & \"_Score[Priority Score]\"),MATCH(Table1[[#This Row],[QA task ]],INDIRECT(SUBSTITUTE(Table1[[#This Row],[Section]], \" & \", \"_\") & \"_Score[Task]\"),0))/SUMIF(INDIRECT(SUBSTITUTE(Table1[[#This Row],[Section]],\" & \", \"_\") & \"_Score[Rating]\"),\"<>N/A\",INDIRECT(SUBSTITUTE(Table1[[#This Row],[Section]],\" & \", \"_\") & \"_Score[Priority Score]\"))*(INDEX(Rating_Weight[Weight],MATCH(Table1[[#This Row],[Score before this QA task was undertaken]],Rating_Weight[Rating],0))-INDEX(Rating_Weight[Weight],MATCH(Table1[[#This Row],[Expected score after this QA is done]],Rating_Weight[Rating],0)))/10,0)","v":0}]
[null,"Structure & Clarity","Coding Convention",{"$f":"INDEX(INDIRECT(SUBSTITUTE(Table1[[#This Row],[Section]], \" & \", \"_\") & \"[Outstanding Work]\"),MATCH(INDEX(INDIRECT(SUBSTITUTE(Table1[[#This Row],[Section]], \" & \", \"_\") & \"_Score[Code]\"),MATCH(Table1[[#This Row],[QA task ]],INDIRECT(SUBSTITUTE(Table1[[#This Row],[Section]], \" & \", \"_\") & \"_Score[Task]\"),0)),INDIRECT(SUBSTITUTE(Table1[[#This Row],[Section]], \" & \", \"_\") & \"[Task Code]\"),0))&\"\"","v":{"$error":"#N/A"}},null,null,null,null,null,null,{"$f":"INDEX(INDIRECT(SUBSTITUTE(Table1[[#This Row],[Section]], \" & \", \"_\") & \"[Rating]\"),MATCH(INDEX(INDIRECT(SUBSTITUTE(Table1[[#This Row],[Section]], \" & \", \"_\") & \"_Score[Code]\"),MATCH(Table1[[#This Row],[QA task ]],INDIRECT(SUBSTITUTE(Table1[[#This Row],[Section]], \" & \", \"_\") & \"_Score[Task]\"),0)),INDIRECT(SUBSTITUTE(Table1[[#This Row],[Section]], \" & \", \"_\") & \"[Task Code]\"),0))&\"\"","v":{"$error":"#N/A"}},null,{"$f":"IFERROR(INDEX(QASections_Score[Importance score],MATCH(Table1[[#This Row],[Section]],QASections_Score[Section],0))/SUM(QASections_Score[Importance score])*INDEX(INDIRECT(SUBSTITUTE(Table1[[#This Row],[Section]], \" & \", \"_\") & \"_Score[Priority Score]\"),MATCH(Table1[[#This Row],[QA task ]],INDIRECT(SUBSTITUTE(Table1[[#This Row],[Section]], \" & \", \"_\") & \"_Score[Task]\"),0))/SUMIF(INDIRECT(SUBSTITUTE(Table1[[#This Row],[Section]],\" & \", \"_\") & \"_Score[Rating]\"),\"<>N/A\",INDIRECT(SUBSTITUTE(Table1[[#This Row],[Section]],\" & \", \"_\") & \"_Score[Priority Score]\"))*(INDEX(Rating_Weight[Weight],MATCH(Table1[[#This Row],[Score before this QA task was undertaken]],Rating_Weight[Rating],0))-INDEX(Rating_Weight[Weight],MATCH(Table1[[#This Row],[Expected score after this QA is done]],Rating_Weight[Rating],0)))/10,0)","v":0}]
[null,"Structure & Clarity","Code Comments",{"$f":"INDEX(INDIRECT(SUBSTITUTE(Table1[[#This Row],[Section]], \" & \", \"_\") & \"[Outstanding Work]\"),MATCH(INDEX(INDIRECT(SUBSTITUTE(Table1[[#This Row],[Section]], \" & \", \"_\") & \"_Score[Code]\"),MATCH(Table1[[#This Row],[QA task ]],INDIRECT(SUBSTITUTE(Table1[[#This Row],[Section]], \" & \", \"_\") & \"_Score[Task]\"),0)),INDIRECT(SUBSTITUTE(Table1[[#This Row],[Section]], \" & \", \"_\") & \"[Task Code]\"),0))&\"\"","v":{"$error":"#N/A"}},null,null,null,null,null,null,{"$f":"INDEX(INDIRECT(SUBSTITUTE(Table1[[#This Row],[Section]], \" & \", \"_\") & \"[Rating]\"),MATCH(INDEX(INDIRECT(SUBSTITUTE(Table1[[#This Row],[Section]], \" & \", \"_\") & \"_Score[Code]\"),MATCH(Table1[[#This Row],[QA task ]],INDIRECT(SUBSTITUTE(Table1[[#This Row],[Section]], \" & \", \"_\") & \"_Score[Task]\"),0)),INDIRECT(SUBSTITUTE(Table1[[#This Row],[Section]], \" & \", \"_\") & \"[Task Code]\"),0))&\"\"","v":{"$error":"#N/A"}},null,{"$f":"IFERROR(INDEX(QASections_Score[Importance score],MATCH(Table1[[#This Row],[Section]],QASections_Score[Section],0))/SUM(QASections_Score[Importance score])*INDEX(INDIRECT(SUBSTITUTE(Table1[[#This Row],[Section]], \" & \", \"_\") & \"_Score[Priority Score]\"),MATCH(Table1[[#This Row],[QA task ]],INDIRECT(SUBSTITUTE(Table1[[#This Row],[Section]], \" & \", \"_\") & \"_Score[Task]\"),0))/SUMIF(INDIRECT(SUBSTITUTE(Table1[[#This Row],[Section]],\" & \", \"_\") & \"_Score[Rating]\"),\"<>N/A\",INDIRECT(SUBSTITUTE(Table1[[#This Row],[Section]],\" & \", \"_\") & \"_Score[Priority Score]\"))*(INDEX(Rating_Weight[Weight],MATCH(Table1[[#This Row],[Score before this QA task was undertaken]],Rating_Weight[Rating],0))-INDEX(Rating_Weight[Weight],MATCH(Table1[[#This Row],[Expected score after this QA is done]],Rating_Weight[Rating],0)))/10,0)","v":0}]
[null,"Structure & Clarity","Code clarity & robustness",{"$f":"INDEX(INDIRECT(SUBSTITUTE(Table1[[#This Row],[Section]], \" & \", \"_\") & \"[Outstanding Work]\"),MATCH(INDEX(INDIRECT(SUBSTITUTE(Table1[[#This Row],[Section]], \" & \", \"_\") & \"_Score[Code]\"),MATCH(Table1[[#This Row],[QA task ]],INDIRECT(SUBSTITUTE(Table1[[#This Row],[Section]], \" & \", \"_\") & \"_Score[Task]\"),0)),INDIRECT(SUBSTITUTE(Table1[[#This Row],[Section]], \" & \", \"_\") & \"[Task Code]\"),0))&\"\"","v":"Must\n\nShould\n\nCould"},null,null,null,null,null,null,{"$f":"INDEX(INDIRECT(SUBSTITUTE(Table1[[#This Row],[Section]], \" & \", \"_\") & \"[Rating]\"),MATCH(INDEX(INDIRECT(SUBSTITUTE(Table1[[#This Row],[Section]], \" & \", \"_\") & \"_Score[Code]\"),MATCH(Table1[[#This Row],[QA task ]],INDIRECT(SUBSTITUTE(Table1[[#This Row],[Section]], \" & \", \"_\") & \"_Score[Task]\"),0)),INDIRECT(SUBSTITUTE(Table1[[#This Row],[Section]], \" & \", \"_\") & \"[Task Code]\"),0))&\"\"","v":""},null,{"$f":"IFERROR(INDEX(QASections_Score[Importance score],MATCH(Table1[[#This Row],[Section]],QASections_Score[Section],0))/SUM(QASections_Score[Importance score])*INDEX(INDIRECT(SUBSTITUTE(Table1[[#This Row],[Section]], \" & \", \"_\") & \"_Score[Priority Score]\"),MATCH(Table1[[#This Row],[QA task ]],INDIRECT(SUBSTITUTE(Table1[[#This Row],[Section]], \" & \", \"_\") & \"_Score[Task]\"),0))/SUMIF(INDIRECT(SUBSTITUTE(Table1[[#This Row],[Section]],\" & \", \"_\") & \"_Score[Rating]\"),\"<>N/A\",INDIRECT(SUBSTITUTE(Table1[[#This Row],[Section]],\" & \", \"_\") & \"_Score[Priority Score]\"))*(INDEX(Rating_Weight[Weight],MATCH(Table1[[#This Row],[Score before this QA task was undertaken]],Rating_Weight[Rating],0))-INDEX(Rating_Weight[Weight],MATCH(Table1[[#This Row],[Expected score after this QA is done]],Rating_Weight[Rating],0)))/10,0)","v":0}]
[null,"Structure & Clarity","Inputs and outputs clarity",{"$f":"INDEX(INDIRECT(SUBSTITUTE(Table1[[#This Row],[Section]], \" & \", \"_\") & \"[Outstanding Work]\"),MATCH(INDEX(INDIRECT(SUBSTITUTE(Table1[[#This Row],[Section]], \" & \", \"_\") & \"_Score[Code]\"),MATCH(Table1[[#This Row],[QA task ]],INDIRECT(SUBSTITUTE(Table1[[#This Row],[Section]], \" & \", \"_\") & \"_Score[Task]\"),0)),INDIRECT(SUBSTITUTE(Table1[[#This Row],[Section]], \" & \", \"_\") & \"[Task Code]\"),0))&\"\"","v":"Must\n\nShould\n\nCould"},null,null,null,null,null,null,{"$f":"INDEX(INDIRECT(SUBSTITUTE(Table1[[#This Row],[Section]], \" & \", \"_\") & \"[Rating]\"),MATCH(INDEX(INDIRECT(SUBSTITUTE(Table1[[#This Row],[Section]], \" & \", \"_\") & \"_Score[Code]\"),MATCH(Table1[[#This Row],[QA task ]],INDIRECT(SUBSTITUTE(Table1[[#This Row],[Section]], \" & \", \"_\") & \"_Score[Task]\"),0)),INDIRECT(SUBSTITUTE(Table1[[#This Row],[Section]], \" & \", \"_\") & \"[Task Code]\"),0))&\"\"","v":""},null,{"$f":"IFERROR(INDEX(QASections_Score[Importance score],MATCH(Table1[[#This Row],[Section]],QASections_Score[Section],0))/SUM(QASections_Score[Importance score])*INDEX(INDIRECT(SUBSTITUTE(Table1[[#This Row],[Section]], \" & \", \"_\") & \"_Score[Priority Score]\"),MATCH(Table1[[#This Row],[QA task ]],INDIRECT(SUBSTITUTE(Table1[[#This Row],[Section]], \" & \", \"_\") & \"_Score[Task]\"),0))/SUMIF(INDIRECT(SUBSTITUTE(Table1[[#This Row],[Section]],\" & \", \"_\") & \"_Score[Rating]\"),\"<>N/A\",INDIRECT(SUBSTITUTE(Table1[[#This Row],[Section]],\" & \", \"_\") & \"_Score[Priority Score]\"))*(INDEX(Rating_Weight[Weight],MATCH(Table1[[#This Row],[Score before this QA task was undertaken]],Rating_Weight[Rating],0))-INDEX(Rating_Weight[Weight],MATCH(Table1[[#This Row],[Expected score after this QA is done]],Rating_Weight[Rating],0)))/10,0)","v":0}]
[null,"Verification","Inputs and outputs formula correctness",{"$f":"INDEX(INDIRECT(SUBSTITUTE(Table1[[#This Row],[Section]], \" & \", \"_\") & \"[Outstanding Work]\"),MATCH(INDEX(INDIRECT(SUBSTITUTE(Table1[[#This Row],[Section]], \" & \", \"_\") & \"_Score[Code]\"),MATCH(Table1[[#This Row],[QA task ]],INDIRECT(SUBSTITUTE(Table1[[#This Row],[Section]], \" & \", \"_\") & \"_Score[Task]\"),0)),INDIRECT(SUBSTITUTE(Table1[[#This Row],[Section]], \" & \", \"_\") & \"[Task Code]\"),0))&\"\"","v":{"$error":"#N/A"}},null,null,null,null,null,null,{"$f":"INDEX(INDIRECT(SUBSTITUTE(Table1[[#This Row],[Section]], \" & \", \"_\") & \"[Rating]\"),MATCH(INDEX(INDIRECT(SUBSTITUTE(Table1[[#This Row],[Section]], \" & \", \"_\") & \"_Score[Code]\"),MATCH(Table1[[#This Row],[QA task ]],INDIRECT(SUBSTITUTE(Table1[[#This Row],[Section]], \" & \", \"_\") & \"_Score[Task]\"),0)),INDIRECT(SUBSTITUTE(Table1[[#This Row],[Section]], \" & \", \"_\") & \"[Task Code]\"),0))&\"\"","v":{"$error":"#N/A"}},null,{"$f":"IFERROR(INDEX(QASections_Score[Importance score],MATCH(Table1[[#This Row],[Section]],QASections_Score[Section],0))/SUM(QASections_Score[Importance score])*INDEX(INDIRECT(SUBSTITUTE(Table1[[#This Row],[Section]], \" & \", \"_\") & \"_Score[Priority Score]\"),MATCH(Table1[[#This Row],[QA task ]],INDIRECT(SUBSTITUTE(Table1[[#This Row],[Section]], \" & \", \"_\") & \"_Score[Task]\"),0))/SUMIF(INDIRECT(SUBSTITUTE(Table1[[#This Row],[Section]],\" & \", \"_\") & \"_Score[Rating]\"),\"<>N/A\",INDIRECT(SUBSTITUTE(Table1[[#This Row],[Section]],\" & \", \"_\") & \"_Score[Priority Score]\"))*(INDEX(Rating_Weight[Weight],MATCH(Table1[[#This Row],[Score before this QA task was undertaken]],Rating_Weight[Rating],0))-INDEX(Rating_Weight[Weight],MATCH(Table1[[#This Row],[Expected score after this QA is done]],Rating_Weight[Rating],0)))/10,0)","v":0}]
[null,"Verification","Usability Testing",{"$f":"INDEX(INDIRECT(SUBSTITUTE(Table1[[#This Row],[Section]], \" & \", \"_\") & \"[Outstanding Work]\"),MATCH(INDEX(INDIRECT(SUBSTITUTE(Table1[[#This Row],[Section]], \" & \", \"_\") & \"_Score[Code]\"),MATCH(Table1[[#This Row],[QA task ]],INDIRECT(SUBSTITUTE(Table1[[#This Row],[Section]], \" & \", \"_\") & \"_Score[Task]\"),0)),INDIRECT(SUBSTITUTE(Table1[[#This Row],[Section]], \" & \", \"_\") & \"[Task Code]\"),0))&\"\"","v":"Must\n\nShould\n\nCould"},null,null,null,null,null,null,{"$f":"INDEX(INDIRECT(SUBSTITUTE(Table1[[#This Row],[Section]], \" & \", \"_\") & \"[Rating]\"),MATCH(INDEX(INDIRECT(SUBSTITUTE(Table1[[#This Row],[Section]], \" & \", \"_\") & \"_Score[Code]\"),MATCH(Table1[[#This Row],[QA task ]],INDIRECT(SUBSTITUTE(Table1[[#This Row],[Section]], \" & \", \"_\") & \"_Score[Task]\"),0)),INDIRECT(SUBSTITUTE(Table1[[#This Row],[Section]], \" & \", \"_\") & \"[Task Code]\"),0))&\"\"","v":""},null,{"$f":"IFERROR(INDEX(QASections_Score[Importance score],MATCH(Table1[[#This Row],[Section]],QASections_Score[Section],0))/SUM(QASections_Score[Importance score])*INDEX(INDIRECT(SUBSTITUTE(Table1[[#This Row],[Section]], \" & \", \"_\") & \"_Score[Priority Score]\"),MATCH(Table1[[#This Row],[QA task ]],INDIRECT(SUBSTITUTE(Table1[[#This Row],[Section]], \" & \", \"_\") & \"_Score[Task]\"),0))/SUMIF(INDIRECT(SUBSTITUTE(Table1[[#This Row],[Section]],\" & \", \"_\") & \"_Score[Rating]\"),\"<>N/A\",INDIRECT(SUBSTITUTE(Table1[[#This Row],[Section]],\" & \", \"_\") & \"_Score[Priority Score]\"))*(INDEX(Rating_Weight[Weight],MATCH(Table1[[#This Row],[Score before this QA task was undertaken]],Rating_Weight[Rating],0))-INDEX(Rating_Weight[Weight],MATCH(Table1[[#This Row],[Expected score after this QA is done]],Rating_Weight[Rating],0)))/10,0)","v":0}]
[null,"Verification","Code correctness & Testing",{"$f":"INDEX(INDIRECT(SUBSTITUTE(Table1[[#This Row],[Section]], \" & \", \"_\") & \"[Outstanding Work]\"),MATCH(INDEX(INDIRECT(SUBSTITUTE(Table1[[#This Row],[Section]], \" & \", \"_\") & \"_Score[Code]\"),MATCH(Table1[[#This Row],[QA task ]],INDIRECT(SUBSTITUTE(Table1[[#This Row],[Section]], \" & \", \"_\") & \"_Score[Task]\"),0)),INDIRECT(SUBSTITUTE(Table1[[#This Row],[Section]], \" & \", \"_\") & \"[Task Code]\"),0))&\"\"","v":{"$error":"#N/A"}},null,null,null,null,null,null,{"$f":"INDEX(INDIRECT(SUBSTITUTE(Table1[[#This Row],[Section]], \" & \", \"_\") & \"[Rating]\"),MATCH(INDEX(INDIRECT(SUBSTITUTE(Table1[[#This Row],[Section]], \" & \", \"_\") & \"_Score[Code]\"),MATCH(Table1[[#This Row],[QA task ]],INDIRECT(SUBSTITUTE(Table1[[#This Row],[Section]], \" & \", \"_\") & \"_Score[Task]\"),0)),INDIRECT(SUBSTITUTE(Table1[[#This Row],[Section]], \" & \", \"_\") & \"[Task Code]\"),0))&\"\"","v":{"$error":"#N/A"}},null,{"$f":"IFERROR(INDEX(QASections_Score[Importance score],MATCH(Table1[[#This Row],[Section]],QASections_Score[Section],0))/SUM(QASections_Score[Importance score])*INDEX(INDIRECT(SUBSTITUTE(Table1[[#This Row],[Section]], \" & \", \"_\") & \"_Score[Priority Score]\"),MATCH(Table1[[#This Row],[QA task ]],INDIRECT(SUBSTITUTE(Table1[[#This Row],[Section]], \" & \", \"_\") & \"_Score[Task]\"),0))/SUMIF(INDIRECT(SUBSTITUTE(Table1[[#This Row],[Section]],\" & \", \"_\") & \"_Score[Rating]\"),\"<>N/A\",INDIRECT(SUBSTITUTE(Table1[[#This Row],[Section]],\" & \", \"_\") & \"_Score[Priority Score]\"))*(INDEX(Rating_Weight[Weight],MATCH(Table1[[#This Row],[Score before this QA task was undertaken]],Rating_Weight[Rating],0))-INDEX(Rating_Weight[Weight],MATCH(Table1[[#This Row],[Expected score after this QA is done]],Rating_Weight[Rating],0)))/10,0)","v":0}]
[null,"Verification","Autochecks & Regression Testing",{"$f":"INDEX(INDIRECT(SUBSTITUTE(Table1[[#This Row],[Section]], \" & \", \"_\") & \"[Outstanding Work]\"),MATCH(INDEX(INDIRECT(SUBSTITUTE(Table1[[#This Row],[Section]], \" & \", \"_\") & \"_Score[Code]\"),MATCH(Table1[[#This Row],[QA task ]],INDIRECT(SUBSTITUTE(Table1[[#This Row],[Section]], \" & \", \"_\") & \"_Score[Task]\"),0)),INDIRECT(SUBSTITUTE(Table1[[#This Row],[Section]], \" & \", \"_\") & \"[Task Code]\"),0))&\"\"","v":{"$error":"#N/A"}},null,null,null,null,null,null,{"$f":"INDEX(INDIRECT(SUBSTITUTE(Table1[[#This Row],[Section]], \" & \", \"_\") & \"[Rating]\"),MATCH(INDEX(INDIRECT(SUBSTITUTE(Table1[[#This Row],[Section]], \" & \", \"_\") & \"_Score[Code]\"),MATCH(Table1[[#This Row],[QA task ]],INDIRECT(SUBSTITUTE(Table1[[#This Row],[Section]], \" & \", \"_\") & \"_Score[Task]\"),0)),INDIRECT(SUBSTITUTE(Table1[[#This Row],[Section]], \" & \", \"_\") & \"[Task Code]\"),0))&\"\"","v":{"$error":"#N/A"}},null,{"$f":"IFERROR(INDEX(QASections_Score[Importance score],MATCH(Table1[[#This Row],[Section]],QASections_Score[Section],0))/SUM(QASections_Score[Importance score])*INDEX(INDIRECT(SUBSTITUTE(Table1[[#This Row],[Section]], \" & \", \"_\") & \"_Score[Priority Score]\"),MATCH(Table1[[#This Row],[QA task ]],INDIRECT(SUBSTITUTE(Table1[[#This Row],[Section]], \" & \", \"_\") & \"_Score[Task]\"),0))/SUMIF(INDIRECT(SUBSTITUTE(Table1[[#This Row],[Section]],\" & \", \"_\") & \"_Score[Rating]\"),\"<>N/A\",INDIRECT(SUBSTITUTE(Table1[[#This Row],[Section]],\" & \", \"_\") & \"_Score[Priority Score]\"))*(INDEX(Rating_Weight[Weight],MATCH(Table1[[#This Row],[Score before this QA task was undertaken]],Rating_Weight[Rating],0))-INDEX(Rating_Weight[Weight],MATCH(Table1[[#This Row],[Expected score after this QA is done]],Rating_Weight[Rating],0)))/10,0)","v":0}]
[null,"Validation","Methodology correctness",{"$f":"INDEX(INDIRECT(SUBSTITUTE(Table1[[#This Row],[Section]], \" & \", \"_\") & \"[Outstanding Work]\"),MATCH(INDEX(INDIRECT(SUBSTITUTE(Table1[[#This Row],[Section]], \" & \", \"_\") & \"_Score[Code]\"),MATCH(Table1[[#This Row],[QA task ]],INDIRECT(SUBSTITUTE(Table1[[#This Row],[Section]], \" & \", \"_\") & \"_Score[Task]\"),0)),INDIRECT(SUBSTITUTE(Table1[[#This Row],[Section]], \" & \", \"_\") & \"[Task Code]\"),0))&\"\"","v":"Must\n\nShould\n\nCould"},null,null,null,null,null,null,{"$f":"INDEX(INDIRECT(SUBSTITUTE(Table1[[#This Row],[Section]], \" & \", \"_\") & \"[Rating]\"),MATCH(INDEX(INDIRECT(SUBSTITUTE(Table1[[#This Row],[Section]], \" & \", \"_\") & \"_Score[Code]\"),MATCH(Table1[[#This Row],[QA task ]],INDIRECT(SUBSTITUTE(Table1[[#This Row],[Section]], \" & \", \"_\") & \"_Score[Task]\"),0)),INDIRECT(SUBSTITUTE(Table1[[#This Row],[Section]], \" & \", \"_\") & \"[Task Code]\"),0))&\"\"","v":""},null,{"$f":"IFERROR(INDEX(QASections_Score[Importance score],MATCH(Table1[[#This Row],[Section]],QASections_Score[Section],0))/SUM(QASections_Score[Importance score])*INDEX(INDIRECT(SUBSTITUTE(Table1[[#This Row],[Section]], \" & \", \"_\") & \"_Score[Priority Score]\"),MATCH(Table1[[#This Row],[QA task ]],INDIRECT(SUBSTITUTE(Table1[[#This Row],[Section]], \" & \", \"_\") & \"_Score[Task]\"),0))/SUMIF(INDIRECT(SUBSTITUTE(Table1[[#This Row],[Section]],\" & \", \"_\") & \"_Score[Rating]\"),\"<>N/A\",INDIRECT(SUBSTITUTE(Table1[[#This Row],[Section]],\" & \", \"_\") & \"_Score[Priority Score]\"))*(INDEX(Rating_Weight[Weight],MATCH(Table1[[#This Row],[Score before this QA task was undertaken]],Rating_Weight[Rating],0))-INDEX(Rating_Weight[Weight],MATCH(Table1[[#This Row],[Expected score after this QA is done]],Rating_Weight[Rating],0)))/10,0)","v":0}]
[null,"Validation","Comparison with historical data / backcasting",{"$f":"INDEX(INDIRECT(SUBSTITUTE(Table1[[#This Row],[Section]], \" & \", \"_\") & \"[Outstanding Work]\"),MATCH(INDEX(INDIRECT(SUBSTITUTE(Table1[[#This Row],[Section]], \" & \", \"_\") & \"_Score[Code]\"),MATCH(Table1[[#This Row],[QA task ]],INDIRECT(SUBSTITUTE(Table1[[#This Row],[Section]], \" & \", \"_\") & \"_Score[Task]\"),0)),INDIRECT(SUBSTITUTE(Table1[[#This Row],[Section]], \" & \", \"_\") & \"[Task Code]\"),0))&\"\"","v":"Must\n\nShould\n\nCould"},null,null,null,null,null,null,{"$f":"INDEX(INDIRECT(SUBSTITUTE(Table1[[#This Row],[Section]], \" & \", \"_\") & \"[Rating]\"),MATCH(INDEX(INDIRECT(SUBSTITUTE(Table1[[#This Row],[Section]], \" & \", \"_\") & \"_Score[Code]\"),MATCH(Table1[[#This Row],[QA task ]],INDIRECT(SUBSTITUTE(Table1[[#This Row],[Section]], \" & \", \"_\") & \"_Score[Task]\"),0)),INDIRECT(SUBSTITUTE(Table1[[#This Row],[Section]], \" & \", \"_\") & \"[Task Code]\"),0))&\"\"","v":""},null,{"$f":"IFERROR(INDEX(QASections_Score[Importance score],MATCH(Table1[[#This Row],[Section]],QASections_Score[Section],0))/SUM(QASections_Score[Importance score])*INDEX(INDIRECT(SUBSTITUTE(Table1[[#This Row],[Section]], \" & \", \"_\") & \"_Score[Priority Score]\"),MATCH(Table1[[#This Row],[QA task ]],INDIRECT(SUBSTITUTE(Table1[[#This Row],[Section]], \" & \", \"_\") & \"_Score[Task]\"),0))/SUMIF(INDIRECT(SUBSTITUTE(Table1[[#This Row],[Section]],\" & \", \"_\") & \"_Score[Rating]\"),\"<>N/A\",INDIRECT(SUBSTITUTE(Table1[[#This Row],[Section]],\" & \", \"_\") & \"_Score[Priority Score]\"))*(INDEX(Rating_Weight[Weight],MATCH(Table1[[#This Row],[Score before this QA task was undertaken]],Rating_Weight[Rating],0))-INDEX(Rating_Weight[Weight],MATCH(Table1[[#This Row],[Expected score after this QA is done]],Rating_Weight[Rating],0)))/10,0)","v":0}]
[null,"Validation","Uncertainty testing",{"$f":"INDEX(INDIRECT(SUBSTITUTE(Table1[[#This Row],[Section]], \" & \", \"_\") & \"[Outstanding Work]\"),MATCH(INDEX(INDIRECT(SUBSTITUTE(Table1[[#This Row],[Section]], \" & \", \"_\") & \"_Score[Code]\"),MATCH(Table1[[#This Row],[QA task ]],INDIRECT(SUBSTITUTE(Table1[[#This Row],[Section]], \" & \", \"_\") & \"_Score[Task]\"),0)),INDIRECT(SUBSTITUTE(Table1[[#This Row],[Section]], \" & \", \"_\") & \"[Task Code]\"),0))&\"\"","v":"Must\n\nShould\n\nCould"},null,null,null,null,null,null,{"$f":"INDEX(INDIRECT(SUBSTITUTE(Table1[[#This Row],[Section]], \" & \", \"_\") & \"[Rating]\"),MATCH(INDEX(INDIRECT(SUBSTITUTE(Table1[[#This Row],[Section]], \" & \", \"_\") & \"_Score[Code]\"),MATCH(Table1[[#This Row],[QA task ]],INDIRECT(SUBSTITUTE(Table1[[#This Row],[Section]], \" & \", \"_\") & \"_Score[Task]\"),0)),INDIRECT(SUBSTITUTE(Table1[[#This Row],[Section]], \" & \", \"_\") & \"[Task Code]\"),0))&\"\"","v":""},null,{"$f":"IFERROR(INDEX(QASections_Score[Importance score],MATCH(Table1[[#This Row],[Section]],QASections_Score[Section],0))/SUM(QASections_Score[Importance score])*INDEX(INDIRECT(SUBSTITUTE(Table1[[#This Row],[Section]], \" & \", \"_\") & \"_Score[Priority Score]\"),MATCH(Table1[[#This Row],[QA task ]],INDIRECT(SUBSTITUTE(Table1[[#This Row],[Section]], \" & \", \"_\") & \"_Score[Task]\"),0))/SUMIF(INDIRECT(SUBSTITUTE(Table1[[#This Row],[Section]],\" & \", \"_\") & \"_Score[Rating]\"),\"<>N/A\",INDIRECT(SUBSTITUTE(Table1[[#This Row],[Section]],\" & \", \"_\") & \"_Score[Priority Score]\"))*(INDEX(Rating_Weight[Weight],MATCH(Table1[[#This Row],[Score before this QA task was undertaken]],Rating_Weight[Rating],0))-INDEX(Rating_Weight[Weight],MATCH(Table1[[#This Row],[Expected score after this QA is done]],Rating_Weight[Rating],0)))/10,0)","v":0}]
[null,"Validation","Extreme values testing / model breaking",{"$f":"INDEX(INDIRECT(SUBSTITUTE(Table1[[#This Row],[Section]], \" & \", \"_\") & \"[Outstanding Work]\"),MATCH(INDEX(INDIRECT(SUBSTITUTE(Table1[[#This Row],[Section]], \" & \", \"_\") & \"_Score[Code]\"),MATCH(Table1[[#This Row],[QA task ]],INDIRECT(SUBSTITUTE(Table1[[#This Row],[Section]], \" & \", \"_\") & \"_Score[Task]\"),0)),INDIRECT(SUBSTITUTE(Table1[[#This Row],[Section]], \" & \", \"_\") & \"[Task Code]\"),0))&\"\"","v":"Must\n\nShould\n\nCould"},null,null,null,null,null,null,{"$f":"INDEX(INDIRECT(SUBSTITUTE(Table1[[#This Row],[Section]], \" & \", \"_\") & \"[Rating]\"),MATCH(INDEX(INDIRECT(SUBSTITUTE(Table1[[#This Row],[Section]], \" & \", \"_\") & \"_Score[Code]\"),MATCH(Table1[[#This Row],[QA task ]],INDIRECT(SUBSTITUTE(Table1[[#This Row],[Section]], \" & \", \"_\") & \"_Score[Task]\"),0)),INDIRECT(SUBSTITUTE(Table1[[#This Row],[Section]], \" & \", \"_\") & \"[Task Code]\"),0))&\"\"","v":""},null,{"$f":"IFERROR(INDEX(QASections_Score[Importance score],MATCH(Table1[[#This Row],[Section]],QASections_Score[Section],0))/SUM(QASections_Score[Importance score])*INDEX(INDIRECT(SUBSTITUTE(Table1[[#This Row],[Section]], \" & \", \"_\") & \"_Score[Priority Score]\"),MATCH(Table1[[#This Row],[QA task ]],INDIRECT(SUBSTITUTE(Table1[[#This Row],[Section]], \" & \", \"_\") & \"_Score[Task]\"),0))/SUMIF(INDIRECT(SUBSTITUTE(Table1[[#This Row],[Section]],\" & \", \"_\") & \"_Score[Rating]\"),\"<>N/A\",INDIRECT(SUBSTITUTE(Table1[[#This Row],[Section]],\" & \", \"_\") & \"_Score[Priority Score]\"))*(INDEX(Rating_Weight[Weight],MATCH(Table1[[#This Row],[Score before this QA task was undertaken]],Rating_Weight[Rating],0))-INDEX(Rating_Weight[Weight],MATCH(Table1[[#This Row],[Expected score after this QA is done]],Rating_Weight[Rating],0)))/10,0)","v":0}]
[null,"Validation","Re-performance testing",{"$f":"INDEX(INDIRECT(SUBSTITUTE(Table1[[#This Row],[Section]], \" & \", \"_\") & \"[Outstanding Work]\"),MATCH(INDEX(INDIRECT(SUBSTITUTE(Table1[[#This Row],[Section]], \" & \", \"_\") & \"_Score[Code]\"),MATCH(Table1[[#This Row],[QA task ]],INDIRECT(SUBSTITUTE(Table1[[#This Row],[Section]], \" & \", \"_\") & \"_Score[Task]\"),0)),INDIRECT(SUBSTITUTE(Table1[[#This Row],[Section]], \" & \", \"_\") & \"[Task Code]\"),0))&\"\"","v":"Must\n\nShould\n\nCould"},null,null,null,null,null,null,{"$f":"INDEX(INDIRECT(SUBSTITUTE(Table1[[#This Row],[Section]], \" & \", \"_\") & \"[Rating]\"),MATCH(INDEX(INDIRECT(SUBSTITUTE(Table1[[#This Row],[Section]], \" & \", \"_\") & \"_Score[Code]\"),MATCH(Table1[[#This Row],[QA task ]],INDIRECT(SUBSTITUTE(Table1[[#This Row],[Section]], \" & \", \"_\") & \"_Score[Task]\"),0)),INDIRECT(SUBSTITUTE(Table1[[#This Row],[Section]], \" & \", \"_\") & \"[Task Code]\"),0))&\"\"","v":""},null,{"$f":"IFERROR(INDEX(QASections_Score[Importance score],MATCH(Table1[[#This Row],[Section]],QASections_Score[Section],0))/SUM(QASections_Score[Importance score])*INDEX(INDIRECT(SUBSTITUTE(Table1[[#This Row],[Section]], \" & \", \"_\") & \"_Score[Priority Score]\"),MATCH(Table1[[#This Row],[QA task ]],INDIRECT(SUBSTITUTE(Table1[[#This Row],[Section]], \" & \", \"_\") & \"_Score[Task]\"),0))/SUMIF(INDIRECT(SUBSTITUTE(Table1[[#This Row],[Section]],\" & \", \"_\") & \"_Score[Rating]\"),\"<>N/A\",INDIRECT(SUBSTITUTE(Table1[[#This Row],[Section]],\" & \", \"_\") & \"_Score[Priority Score]\"))*(INDEX(Rating_Weight[Weight],MATCH(Table1[[#This Row],[Score before this QA task was undertaken]],Rating_Weight[Rating],0))-INDEX(Rating_Weight[Weight],MATCH(Table1[[#This Row],[Expected score after this QA is done]],Rating_Weight[Rating],0)))/10,0)","v":0}]
[null,"Data & Assumptions","Data",{"$f":"INDEX(INDIRECT(SUBSTITUTE(Table1[[#This Row],[Section]], \" & \", \"_\") & \"[Outstanding Work]\"),MATCH(INDEX(INDIRECT(SUBSTITUTE(Table1[[#This Row],[Section]], \" & \", \"_\") & \"_Score[Code]\"),MATCH(Table1[[#This Row],[QA task ]],INDIRECT(SUBSTITUTE(Table1[[#This Row],[Section]], \" & \", \"_\") & \"_Score[Task]\"),0)),INDIRECT(SUBSTITUTE(Table1[[#This Row],[Section]], \" & \", \"_\") & \"[Task Code]\"),0))&\"\"","v":"Must\n\nShould\n\nCould"},null,null,null,null,null,null,{"$f":"INDEX(INDIRECT(SUBSTITUTE(Table1[[#This Row],[Section]], \" & \", \"_\") & \"[Rating]\"),MATCH(INDEX(INDIRECT(SUBSTITUTE(Table1[[#This Row],[Section]], \" & \", \"_\") & \"_Score[Code]\"),MATCH(Table1[[#This Row],[QA task ]],INDIRECT(SUBSTITUTE(Table1[[#This Row],[Section]], \" & \", \"_\") & \"_Score[Task]\"),0)),INDIRECT(SUBSTITUTE(Table1[[#This Row],[Section]], \" & \", \"_\") & \"[Task Code]\"),0))&\"\"","v":""},null,{"$f":"IFERROR(INDEX(QASections_Score[Importance score],MATCH(Table1[[#This Row],[Section]],QASections_Score[Section],0))/SUM(QASections_Score[Importance score])*INDEX(INDIRECT(SUBSTITUTE(Table1[[#This Row],[Section]], \" & \", \"_\") & \"_Score[Priority Score]\"),MATCH(Table1[[#This Row],[QA task ]],INDIRECT(SUBSTITUTE(Table1[[#This Row],[Section]], \" & \", \"_\") & \"_Score[Task]\"),0))/SUMIF(INDIRECT(SUBSTITUTE(Table1[[#This Row],[Section]],\" & \", \"_\") & \"_Score[Rating]\"),\"<>N/A\",INDIRECT(SUBSTITUTE(Table1[[#This Row],[Section]],\" & \", \"_\") & \"_Score[Priority Score]\"))*(INDEX(Rating_Weight[Weight],MATCH(Table1[[#This Row],[Score before this QA task was undertaken]],Rating_Weight[Rating],0))-INDEX(Rating_Weight[Weight],MATCH(Table1[[#This Row],[Expected score after this QA is done]],Rating_Weight[Rating],0)))/10,0)","v":0}]
[null,"Data & Assumptions","Data transformation",{"$f":"INDEX(INDIRECT(SUBSTITUTE(Table1[[#This Row],[Section]], \" & \", \"_\") & \"[Outstanding Work]\"),MATCH(INDEX(INDIRECT(SUBSTITUTE(Table1[[#This Row],[Section]], \" & \", \"_\") & \"_Score[Code]\"),MATCH(Table1[[#This Row],[QA task ]],INDIRECT(SUBSTITUTE(Table1[[#This Row],[Section]], \" & \", \"_\") & \"_Score[Task]\"),0)),INDIRECT(SUBSTITUTE(Table1[[#This Row],[Section]], \" & \", \"_\") & \"[Task Code]\"),0))&\"\"","v":"Must\n\nShould\n\nCould"},null,null,null,null,null,null,{"$f":"INDEX(INDIRECT(SUBSTITUTE(Table1[[#This Row],[Section]], \" & \", \"_\") & \"[Rating]\"),MATCH(INDEX(INDIRECT(SUBSTITUTE(Table1[[#This Row],[Section]], \" & \", \"_\") & \"_Score[Code]\"),MATCH(Table1[[#This Row],[QA task ]],INDIRECT(SUBSTITUTE(Table1[[#This Row],[Section]], \" & \", \"_\") & \"_Score[Task]\"),0)),INDIRECT(SUBSTITUTE(Table1[[#This Row],[Section]], \" & \", \"_\") & \"[Task Code]\"),0))&\"\"","v":""},null,{"$f":"IFERROR(INDEX(QASections_Score[Importance score],MATCH(Table1[[#This Row],[Section]],QASections_Score[Section],0))/SUM(QASections_Score[Importance score])*INDEX(INDIRECT(SUBSTITUTE(Table1[[#This Row],[Section]], \" & \", \"_\") & \"_Score[Priority Score]\"),MATCH(Table1[[#This Row],[QA task ]],INDIRECT(SUBSTITUTE(Table1[[#This Row],[Section]], \" & \", \"_\") & \"_Score[Task]\"),0))/SUMIF(INDIRECT(SUBSTITUTE(Table1[[#This Row],[Section]],\" & \", \"_\") & \"_Score[Rating]\"),\"<>N/A\",INDIRECT(SUBSTITUTE(Table1[[#This Row],[Section]],\" & \", \"_\") & \"_Score[Priority Score]\"))*(INDEX(Rating_Weight[Weight],MATCH(Table1[[#This Row],[Score before this QA task was undertaken]],Rating_Weight[Rating],0))-INDEX(Rating_Weight[Weight],MATCH(Table1[[#This Row],[Expected score after this QA is done]],Rating_Weight[Rating],0)))/10,0)","v":0}]
[null,"Data & Assumptions","Assumptions",{"$f":"INDEX(INDIRECT(SUBSTITUTE(Table1[[#This Row],[Section]], \" & \", \"_\") & \"[Outstanding Work]\"),MATCH(INDEX(INDIRECT(SUBSTITUTE(Table1[[#This Row],[Section]], \" & \", \"_\") & \"_Score[Code]\"),MATCH(Table1[[#This Row],[QA task ]],INDIRECT(SUBSTITUTE(Table1[[#This Row],[Section]], \" & \", \"_\") & \"_Score[Task]\"),0)),INDIRECT(SUBSTITUTE(Table1[[#This Row],[Section]], \" & \", \"_\") & \"[Task Code]\"),0))&\"\"","v":"Must\n\nShould\n\nCould"},null,null,null,null,null,null,{"$f":"INDEX(INDIRECT(SUBSTITUTE(Table1[[#This Row],[Section]], \" & \", \"_\") & \"[Rating]\"),MATCH(INDEX(INDIRECT(SUBSTITUTE(Table1[[#This Row],[Section]], \" & \", \"_\") & \"_Score[Code]\"),MATCH(Table1[[#This Row],[QA task ]],INDIRECT(SUBSTITUTE(Table1[[#This Row],[Section]], \" & \", \"_\") & \"_Score[Task]\"),0)),INDIRECT(SUBSTITUTE(Table1[[#This Row],[Section]], \" & \", \"_\") & \"[Task Code]\"),0))&\"\"","v":""},null,{"$f":"IFERROR(INDEX(QASections_Score[Importance score],MATCH(Table1[[#This Row],[Section]],QASections_Score[Section],0))/SUM(QASections_Score[Importance score])*INDEX(INDIRECT(SUBSTITUTE(Table1[[#This Row],[Section]], \" & \", \"_\") & \"_Score[Priority Score]\"),MATCH(Table1[[#This Row],[QA task ]],INDIRECT(SUBSTITUTE(Table1[[#This Row],[Section]], \" & \", \"_\") & \"_Score[Task]\"),0))/SUMIF(INDIRECT(SUBSTITUTE(Table1[[#This Row],[Section]],\" & \", \"_\") & \"_Score[Rating]\"),\"<>N/A\",INDIRECT(SUBSTITUTE(Table1[[#This Row],[Section]],\" & \", \"_\") & \"_Score[Priority Score]\"))*(INDEX(Rating_Weight[Weight],MATCH(Table1[[#This Row],[Score before this QA task was undertaken]],Rating_Weight[Rating],0))-INDEX(Rating_Weight[Weight],MATCH(Table1[[#This Row],[Expected score after this QA is done]],Rating_Weight[Rating],0)))/10,0)","v":0}]

{"sheet":"QA history","index":10,"n_rows":5,"n_cols":6,"rows_kept":5,"cut":false,"hidden":false,"merged":[]}
[]
[{"$f":"IF(SecurityClassification=\"OFFICIAL\",\"\",SecurityClassification & \" - \")  & DocumentName & \" QA log - version \" & VersionNumber","v":" -  QA log - version "}]
[]
[]
[null,"Code","Date","QA update","Performed by","QA score"]

{"sheet":"Issues Log","index":11,"n_rows":6,"n_cols":13,"rows_kept":6,"cut":false,"hidden":false,"merged":[]}
[]
[{"$f":"IF(SecurityClassification=\"OFFICIAL\",\"\",SecurityClassification & \" - \")  & DocumentName & \" QA log - version \" & VersionNumber","v":" -  QA log - version "}]
[]
[]
[null,"Model Version","Unique Formula Reference","QA analyst","Module","Line code","Comments","Priority","Impact","Notes","Date found (use ctrl+;)","Date shared with model owner","Issue has been addressed?"]
[null,null,1]

{"sheet":"Version Log","index":12,"n_rows":20,"n_cols":5,"rows_kept":20,"cut":false,"hidden":false,"merged":[[5,1,5,4]]}
[]
[{"$f":"IF(SecurityClassification=\"OFFICIAL\",\"\",SecurityClassification & \" - \")  & DocumentName & \" QA log - version \" & VersionNumber","v":" -  QA log - version "}]
[]
[]
[]
[null,"This worksheet contains the version log of this document. To be updated only by the Modelling Integrity Team\n\n"]
[]
[]
[null,"Version number","Date","Author","Description of changes"]
[null,1,"2014-08-19","Ale Arbib","Log developed changing the QA log for Excel models. Some tasks introduced and many others changed."]
[null,1.1000000000000001,"2014-11-24","Ale Arbib","Made some minor changes under recommendations of Emma Frost. Removed some references to Excel models, added autochecks and error trapping (S5 to Structure & Clarity)"]
[null,1.2,"2014-12-02","Ale Arbib","Added an example for each orange tab, improved the \"Rating guidelines\" column and made some other minor changes"]
[null,1.3,"2015-03-09","Ale Arbib","Added notes on QA proportionality. Minor changes to QA tasks: \"Sensitivity and scenario testing\" broaden to \"Uncertainty testing\", \"QA responsibilities …\" changed to governance to include also folder structure. Regression testing moved from \"Validation\" to \"Verification\" and merged with \"Autochecks and Error Trapping\". Added few new links "]
[null,1.4,"2015-06-18","Ale Arbib","Added the missing rating guidelines to Va2"]
[null,1.5,"2015-10-23","Ale Arbib","Updated links (e.g. link to the new Assumptions log). Re-worded some QA tasks to highlight the importance of prioritising key parts of the model"]
[null,1.6,"2016-05-04","Ale Arbib","Added QA plan sheet"]
[null,1.7,"2016-07-01","MIT","Changed description of QA tasks and of rating guidelines"]
[null,1.8,"2016-12-16","Ruth Curran","Adapted this log for external use"]
[null,1.9,"2018-07-01","Aubrey Kendrick","Adapted D5 to be accurate for BEIS"]
[null,2,"2024-01-01","Gareth Lyttle\nErin Symonds\nIan Mitchell","Changes from BEIS to DESNZ.  Expired links removed or refreshed.  This version combines aspects of the pilot R log and the non-excel log alongside the guidance produced by Advanced Analytics to capture a greater number of code-based environments."]

{"sheet":"Lookups","index":13,"n_rows":29,"n_cols":3,"rows_kept":29,"cut":false,"hidden":false,"merged":[]}
[]
[{"$f":"IF(SecurityClassification=\"OFFICIAL\",\"\",SecurityClassification & \" - \")  & DocumentName & \" QA log - version \" & VersionNumber","v":" -  QA log - version "}]
[]
[]
[null,"Rating","Weight"]
[null,"1) Excellent",0]
[null,"2) Good",1]
[null,"3) Some issues",3]
[null,"4) Needs improvement",7]
[null,"5) Significant issues",10]
[null,"N/A","N/A"]
[]
[null,"Priority","Weight"]
[null,"High",9]
[null,"Medium",3]
[null,"Low",1]
[]
[null,"Worst value",{"$f":"MAX(Rating_Weight[Weight])","v":10}]
[]
[null,"Importance","Weight"]
[null,"Essential",3]
[null,"Important",2]
[null,"Best Practice",1]
[]
[null,"Security Classification"]
[null,"OFFICIAL"]
[null,"OFFICIAL - SENSITIVE"]
[null,"SECRET"]
[null,"TOP SECRET"]