This is a ready-to-use classification record. It is the document that decides how much validation effort a homegrown analytics tool gets, and it is the first thing an assessor reads when asking why a tool was validated lightly. Complete one per tool before development is released for GxP use. Replace every <<FILL: ...>> placeholder with your own specifics and route the completed form through your normal review and approval. A worked classification table and a filled specimen follow. This content is educational reference, not legal or regulatory advice; verify each cited regulation against the current source before you rely on it.
Record control header
| Field | Entry |
|---|---|
| Form title | GxP Analytics Tool Risk Classification and Assurance Level |
| Form number | <<FILL: form ID, e.g. FRM-CSV-031-01>> |
| Governing procedure | <<FILL: SOP-ID for validation of GxP scripts, notebooks, and low-code analytics>> |
| Classification record number | <<FILL: RC-YYYY-nnnn>> |
| Tool ID | <<FILL: from the analytics tool inventory register>> |
| Tool name | <<FILL>> |
| Tool type | Script / Notebook / Dashboard / Query / Macro workbook / Pipeline job |
| Classification date | <<FILL>> |
| Reason for classification | Initial / Reclassification following change <<FILL: change record>> / Periodic review / Discovery sweep |
Section 1: Tool description
| Field | Entry |
|---|---|
| What the tool does, in two sentences | <<FILL>> |
| Language, platform, or application | <<FILL>> |
| Author | <<FILL: name and role>> |
| Proposed owner | <<FILL: name and role>> |
| Business process served | <<FILL: e.g. stability, CPV, environmental monitoring, release testing, batch disposition>> |
| Input source system(s) and whether they are validated | <<FILL>> |
| Where the output goes | <<FILL: named report, record, document, or system>> |
| Who consumes the output and in what role | <<FILL>> |
Section 2: The five determining questions
Answer each question with the level that describes the tool as it will actually be used, not as the author intends it to be used. Record the evidence or reasoning for each answer. An answer without a reason is not a classification.
Q1. What GxP decision does the output support?
| Level | Description | Selected |
|---|---|---|
| D3 | Directly determines or gates a batch disposition, a release result, a shelf-life or expiry conclusion, content of a regulatory submission or health authority commitment, a patient dose, or a product-impact conclusion | <<FILL: Y/N>> |
| D2 | Supports a GxP decision that a qualified person takes on the basis of this output together with other evidence: trending, continued process verification monitoring, CAPA effectiveness, deviation impact, quality metrics reviewed at management review | <<FILL: Y/N>> |
| D1 | Used in a GxP context but informational only. No decision is taken on the output, or the output is independently checked at the point of use every time it is used | <<FILL: Y/N>> |
| D0 | No GxP decision at any point. Exploratory, developmental, or internal only | <<FILL: Y/N>> |
Reason: <<FILL: name the decision and the document or record where it is taken>>
Q2. Is the output the record of origin, or a view of a record held elsewhere?
| Level | Description | Selected |
|---|---|---|
| O2 | The tool produces the authoritative value. The number the tool writes is the number that is filed, reported, transcribed, or dispositioned against, and no other system holds it | <<FILL: Y/N>> |
| O1 | The authoritative value stays in a validated source system. The tool presents, aggregates, or visualises it | <<FILL: Y/N>> |
| O0 | Not applicable, non-GxP output | <<FILL: Y/N>> |
Reason: <<FILL>>
A view is not automatically low risk. If a filter, join, or security rule can drop or duplicate rows, the view can misrepresent a correct source. Record here whether the view can change the apparent value: <<FILL: Y/N and how>>
Q3. How complex is the calculation?
| Level | Description | Selected |
|---|---|---|
| C3 | Statistical fitting, regression, confidence or tolerance bounds, capability indices, outlier exclusion rules, iterative or model-based computation, or any method whose correctness a competent non-specialist could not confirm by inspection | <<FILL: Y/N>> |
| C2 | Multi-step deterministic transformation: joins across tables, conditional logic, unit conversion, date or period logic, weighted aggregation, pivoting, or any chain long enough that an error would not be obvious in the output | <<FILL: Y/N>> |
| C1 | A single transparent operation whose correctness is visible on inspection, for example a count, a sum of one column, or a straight pass-through | <<FILL: Y/N>> |
Reason: <<FILL: state the calculation and the source method, SOP, or compendial procedure it implements>>
Q4. How much reliance is placed on it, and how often?
| Level | Description | Selected |
|---|---|---|
| R3 | Recurring use by multiple people or across multiple lots, batches, studies, or sites, on a routine schedule | <<FILL: Y/N>> |
| R2 | Recurring use by one person or a small defined group | <<FILL: Y/N>> |
| R1 | One-off, occasional, or ad hoc use | <<FILL: Y/N>> |
Reason: <<FILL: state expected frequency and the number of consumers>>
Q5. Could an undetected error in this tool reach product or patient?
This is the question the FDA Computer Software Assurance framing turns on, and it is the one that overrides the others. Note the scope: that guidance addresses software used in medical device production and in the device quality management system under 21 CFR Part 820, so in a drug GMP setting it is applied here by analogy rather than as a directly binding requirement. Borrowing its risk-based framing across into drug manufacturing is normal and widely accepted practice, but state in your governing SOP that you are doing so, so that the basis is on record.
| Level | Description | Selected |
|---|---|---|
| E3 | Yes. A wrong output could propagate to product disposition, labelling, dose, shelf life, or a submission with no intervening independent check that would plausibly detect it | <<FILL: Y/N>> |
| E2 | Possible, but a downstream independent check (a second calculation, a qualified person review against source data, an out-of-specification or out-of-trend control, a reconciliation) would plausibly detect it before it reached product or patient. Name the check | <<FILL: Y/N>> |
| E1 | No credible path from an error in this tool to product or patient | <<FILL: Y/N>> |
Reason and named downstream check if E2: <<FILL>>
Section 3: The risk grid
Apply the rules in order. The first rule that matches sets the class.
| Rule | Condition | Resulting risk class |
|---|---|---|
| 1 | Q5 answered E3 | A (High), regardless of any other answer |
| 2 | Q1 is D3 and Q2 is O2 | A (High) |
| 3 | Q1 is D3 and Q3 is C3 | A (High) |
| 4 | Q1 is D3 or D2, and rules 1 to 3 do not apply | B (Medium) |
| 5 | Q1 is D1 | C (Low, GxP) |
| 6 | Q1 is D0 | Non-GxP |
Additional escalation triggers, any one of which raises the class by one level: the tool reads from a source system that is not validated; the tool writes back to a source system; the output is transcribed by hand into a controlled record; no downstream check on the output exists at all; the tool is the only route by which the value can be produced.
| Field | Entry |
|---|---|
| Rule matched | <<FILL: rule number>> |
| Escalation triggers present | <<FILL: list, or None>> |
| Resulting risk class | <<FILL: A / B / C / Non-GxP>> |
Downgrade requests
A class may be reduced by one level only where a specific, named, independent control makes the risk demonstrably lower, and only with QA approval. A downgrade justified by workload, timeline, or the author’s confidence is not acceptable.
| Field | Entry |
|---|---|
| Downgrade requested | Yes / No |
| From class, to class | <<FILL>> |
| Named compensating control | <<FILL: the specific independent check, who performs it, on what frequency, and where it is recorded>> |
| QA decision | Approved / Rejected, with reason <<FILL>> |
Section 4: Assurance level
The risk class sets the deliverable set. Confirm each deliverable is planned, or record why it does not apply.
| Deliverable | Class A | Class B | Class C | Non-GxP | Planned for this tool |
|---|---|---|---|---|---|
| Inventory register entry | Required | Required | Required | Required | <<FILL>> |
| Written specification with numbered testable requirements | Required, full | Required, at measure or function level | Required, short statement of intended use, calculation, and limits | Not required | <<FILL>> |
| Source under version control with tagged release | Required | Required | Required | Recommended | <<FILL>> |
| Independent code review, signed by a non-author | Required | Required | Required | Not required | <<FILL>> |
| Statistical or method verification by a specialist | Required where the method is statistical or compendial | Where applicable | Not required | Not required | <<FILL>> |
| Pinned environment manifest and isolated execution | Required | Required | Recommended | Not required | <<FILL>> |
| Testing approach | Scripted protocol with pre-approved expected results and independent recomputation | Targeted documented testing of each calculation, boundary, and error path | One recorded verification against a reference | Not required | <<FILL>> |
| Reproducibility test | Required | Required | Recommended | Not required | <<FILL>> |
| Release statement approved by owner and QA | Required | Required | Required, short form | Not required | <<FILL>> |
| Change control on code, calculation, and environment | Required | Required | Required | Not required | <<FILL>> |
| Periodic review interval | <<FILL: e.g. annual>> | <<FILL: e.g. 2 years>> | <<FILL: e.g. 3 years>> | Confirmed at inventory sweep | <<FILL>> |
| Output provenance stamp (tool, version, timestamp, operator, input identifier) | Required | Required | Recommended | Output watermarked non-GxP | <<FILL>> |
Section 5: Rationale statement
Write the rationale in plain sentences that a person who has never seen the tool can follow. State what the tool decides, why the class is what it is, and what specifically would have to go wrong for the classification to be wrong.
<<FILL: rationale, typically 4 to 8 sentences>>
Stated limitations of validity, meaning what the tool is explicitly not approved for:
<<FILL>>
Section 6: Signatures
| Role | Name | Signature | Date | Statement |
|---|---|---|---|---|
| Tool owner | <<FILL>> | I confirm the description of intended use is complete and accurate, and that the tool will not be used outside the stated limits without reclassification. | ||
| Independent reviewer or SME (where a specialist method is involved) | <<FILL>> | I confirm the method description and complexity assessment are accurate. | ||
| Validation or CSV lead | <<FILL>> | I confirm the classification rules were applied correctly and the assurance level matches the class. | ||
| Quality Assurance | <<FILL>> | I approve the risk class, the assurance level, and any downgrade recorded in section 3. |
Section 7: Reclassification history
| Date | From class | To class | Trigger | Change record | Approved by |
|---|---|---|---|---|---|
<<FILL>> | <<FILL>> | <<FILL>> | <<FILL>> | <<FILL>> | <<FILL>> |
Worked classification table
Four tools taken through the same five questions. The point of putting them side by side is that the answers, not the technology, decide the outcome: the statistical script and the small spreadsheet both land in class A, while the far larger dashboard lands in class B.
| Statistical script (ANL-0012) | Dashboard (ANL-0021) | Macro workbook (ANL-0034) | Exploratory notebook (ANL-0048) | |
|---|---|---|---|---|
| What it does | R notebook that fits the control limits used to judge whether a drug substance batch is in a state of control | Business-intelligence dashboard showing release test status and results against specification for lots awaiting disposition | Spreadsheet macro that converts a viable cell count to the dispense volume for a patient dose in an autologous cell therapy | Jupyter notebook exploring the relationship between two process parameters and yield |
| Q1 decision | D3, sets CPV control limits used to judge state of control | D2, the QA lead reviews it alongside the batch record before disposition | D3, determines the volume dispensed for a patient dose | D0, no GxP decision |
| Q2 output status | O2, the limits are the record of origin | O1, LIMS holds the authoritative results | O2, the calculated volume is transcribed into the batch record | O0 |
| Q3 complexity | C3, statistical estimation with a defined outlier exclusion rule | C2, fourteen calculated measures, several joins, a date-window filter | C2, a two-step conversion, but with a unit trap between cells per millilitre and cells per kilogram | Any |
| Q4 reliance | R3, all commercial drug substance batches | R3, every disposition, four QA reviewers | R2, every patient lot, two operators | R1 |
| Q5 reach | E3, a wrong limit would not be caught by any downstream check before batches were judged in control | E2, the QA lead reviews the batch record and certificate of analysis against the dashboard, so a dropped row would be visible on the lot in front of them, though a systematic error might not be | E3, a wrong volume goes to the patient | E1 |
| Rule matched | 1 (E3), also 2 and 3 | 4 | 1 (E3) | 6 |
| Escalation triggers | None | None | Output transcribed by hand into a controlled record | None |
| Risk class | A | B | A | Non-GxP |
| Assurance level | Full: specification, version control, independent code review, statistician recomputation in a second package, pinned environment, scripted protocol, release statement, annual periodic review | Targeted: per-measure specification, version control of the project file, independent review, targeted documented test of each of the fourteen measures plus join and row-level-security tests, release statement, two-yearly review | Full, scaled to a small tool: specification with the equation and units stated, locked and signed template under version control, independent review, scripted test including the unit boundary and a known-answer dose calculation, release statement, annual periodic review | Register entry only, non-GxP watermark on output, stated limitation that output must not enter a controlled document |
| The reason people get this wrong | Assume a notebook by a statistician needs no second pair of eyes because the statistician is the expert | Assume a view of validated data cannot be wrong | Assume a spreadsheet is not software | Assume exploratory work needs no record at all, so nothing stops it being reused later |
Filled specimen
Completed form for the macro workbook, which is the case that most often gets misclassified downward.
| Field | Entry |
|---|---|
| Classification record number | RC-2026-0058 |
| Tool ID and name | ANL-0034, Cell dose calculation workbook |
| Tool type | Macro workbook |
| Classification date | 26 February 2026 |
| Reason for classification | Initial |
Section 1. A spreadsheet with a macro that takes the viable cell concentration reported by the cell counter and the patient weight recorded on the manufacturing order, and returns the volume in millilitres to be dispensed into the final container to deliver the prescribed dose per kilogram. Written in a spreadsheet application with a signed macro. Author J. Boateng, MSAT Lead; proposed owner J. Boateng. Serves autologous cell therapy manufacturing. Inputs come from MES-03 (validated) for patient weight and from the cell counter export (validated instrument) for concentration. The calculated volume is written by hand into the batch record by the operator and verified by a second operator. Consumed by the manufacturing operator performing the fill.
Section 2.
| Question | Answer | Reason |
|---|---|---|
| Q1 | D3 | Determines the volume dispensed for a patient dose. |
| Q2 | O2 | No other system computes this value. The workbook output is the value transcribed into the batch record. |
| Q3 | C2 | Two steps, but the conversion crosses units: cells per millilitre from the counter, cells per kilogram in the prescription, kilograms from the order. A unit error here is not visible in the answer. |
| Q4 | R2 | Every patient lot, currently around three per week, two trained operators. |
| Q5 | E3 | The second-operator check verifies the transcription, not the arithmetic, because the second operator reads the same workbook output. There is no independent recomputation before the dose is filled. |
Section 3. Rule 1 matched on Q5 = E3. Rules 2 and 3 would also have given class A. Escalation trigger present: output is transcribed by hand into a controlled record. Resulting risk class: A. No downgrade requested. A downgrade was discussed and rejected: the proposal was that the second-operator check compensates, but that check reads the same output and therefore is not independent of the calculation.
Section 4. Full assurance, scaled to the size of the tool. Deliverables planned: specification stating the equation and the units of every term; the workbook held as a locked, signed template under version control with the macro source exported to a text file so it can be reviewed by diff; independent code review by the MSAT engineer who did not author it; scripted test protocol including a known-answer dose calculation, the unit boundary, a zero and a negative concentration, and a rounding boundary; release statement; annual periodic review; provenance recorded by template version stamped on the printed output.
Section 5 rationale. This workbook is three lines of arithmetic and it decides how much of a cell therapy product a patient receives. Its size is irrelevant to its risk. The determining answer is Q5: the only downstream check is a second operator reading the same number off the same screen, which detects transcription errors and cannot detect a wrong formula or a wrong unit. Because the workbook is also the sole origin of the value, there is no reconciliation available later. It is therefore class A and gets a specification, an independent review, and a scripted test with a hand-calculated known answer, even though the whole tool fits on one screen. The classification would be wrong only if an independent recomputation of the dose volume were introduced before the fill, by a different tool or by hand from source values; if that control is implemented, resubmit this form for reclassification.
Known-answer case agreed for testing: viable cell concentration 1.25 x 10^7 cells/mL, prescribed dose 2.0 x 10^6 cells/kg, patient weight 70 kg. Required cells = 2.0 x 10^6 x 70 = 1.4 x 10^8. Required volume = 1.4 x 10^8 / 1.25 x 10^7 = 11.2 mL.
Stated limitations. Valid only for the autologous product <<FILL: product code>> and only for dose prescriptions expressed in cells per kilogram. Not valid for flat-dose prescriptions, not valid where the counter reports cells per microlitre, and not valid for patient weights outside 30 kg to 150 kg without reassessment.
Section 6. Owner J. Boateng, signed 26 February 2026. SME reviewer L. Andersen, MSAT Engineer, signed 26 February 2026. Validation lead P. Nwosu, signed 27 February 2026. QA approval T. Marchetti, signed 02 March 2026, with the note that the rejected downgrade rationale is to be cited in the training material for the procedure because it is the error the team is most likely to repeat.
Common inspection findings this form prevents
- A tool feeding a GxP decision was validated lightly, and there is no record of anyone deciding that light was appropriate.
- Risk was assigned by tool size or technology, so every script got the same treatment regardless of what it decided.
- A spreadsheet macro determining a dose or a release result was treated as not software.
- A dashboard was excluded from scope because it only views validated data, with no assessment of whether its filters or joins can change what is shown.
- The classification exists but has no rationale, so it cannot be defended when the assessor asks why.
- An exploratory tool’s output was used in a controlled document because nothing on record said it was non-GxP.
- The classification was never revisited after the tool’s use changed, so the deliverable set no longer matches how the tool is used.
- A risk class was downgraded on the basis of a compensating check that turns out not to be independent of the thing it is supposed to check.
How to adapt this form
- Map the class labels A, B, C to whatever tier names your quality system already uses, and keep them identical across the inventory register, the specification, the test protocol, and this form.
- Set the periodic review intervals in section 4 once, in the governing SOP, and reference them here rather than restating them, so they cannot drift apart.
- If your organization uses a numeric scoring model elsewhere, resist converting these five questions into a score. A score invites arguing about the number instead of the decision, and the override in rule 1 is the whole point.
- Add a sixth question if your regulatory context needs it, for example whether the output is submitted to a health authority or supports a commitment made in a filing. Keep it as an override rather than a contributing factor.
- Train on the downgrade section specifically. Inappropriate downgrades routinely cite a compensating control that is not independent of the calculation, exactly as in the specimen, which is why the independence test deserves its own training time.
- Where a tool is one component in a chain, classify the chain by its output and record the component tools as dependencies rather than classifying each separately at the same rigor.
- Confirm the current status of every cited reference in the governing SOP before issue, including the FDA Computer Software Assurance guidance, current version issued 3 February 2026, which is scoped to device production and quality management system software under 21 CFR Part 820 and is used here by analogy in a drug GMP context, and the EU GMP Annex 11 revision that was still in draft at the time of writing.