Development Software Plan 62304
Development Software Plan 62304
PLAN-001, Rev. 1
Innolitics, LLC.
Contents
1 Purpose 2
2 Overview 2
2.1 Definitions . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 2
2.2 Development Life Cycle Model . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 3
2.3 Roles and Responsibilities . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 3
2.4 Related Documents . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 3
2.5 Development Standards . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 4
2.6 Development Methods . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 4
2.7 Development Tools . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 4
2.8 Testing Plan . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 4
2.9 Quality Assurance . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 4
2.10 Risk Management . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 4
3 Activities 5
3.1 Activity Diagram . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 6
3.2 Planning . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 7
3.3 Requirements Analysis . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 8
3.4 Architectural Design . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 8
3.5 Risk Assessment . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 9
3.6 Risk Control . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 9
3.7 Division of Labor . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 10
3.8 Release Planning . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 10
3.9 Detailed Design . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 11
3.10 Unit Implementation and Testing . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 11
3.11 Integration . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 13
3.12 Integration and System Testing . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 13
3.13 Release . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 13
3.14 Problem Analysis . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 14
3.15 Prepare Problem Report . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 14
3.16 Problem Investigation . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 15
4 Appendices 16
4.1 Requirements Analysis . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 16
4.2 Risk Management . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 17
4.3 SOUP . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 17
Software Plan PLAN-001, Rev. 1
1 Purpose
This document describes a set of activities which will be used during software risk management,
development, and maintenance of PROJECT. It is written primarily for software developers.
PROJECT is assigned a Class C software safety class, which means death or serious injury could
occur if the software fails [62304:4.3.a]. See risk.yml for details. All of the software items that
compose the software system are also presumed to have the same Class C safety class [62304:4.3.c
62304:4.3.d 62304:4.3.d 62304:4.3.e 62304:4.3.f 62304:4.3.g]. The primary purpose of this document is
to help developers ensure PROJECT is safe and useful while also allowing developers to be productive.
The secondary purpose is to comply with IEC62304:2006+A1:2015.
[In order to assist auditors and regulators, we have included section references to IEC62304:2006+A1:2015
as well as occasional comments throughout this document. These references and comments are
always placed inside square brackets, and they are not present in the software-developer version of
the document. Other than these comments, the software-developer version is identical to the auditor
version of this document.]
[FDA-CPSSCMD:dev-environment]
2 Overview
2.1 Definitions
[Most of these definitions are very similar to the IEC62304:2006+A1:2015 definitions, however, they
have been modified as appropriate for a better understanding by software developers.]
Activity A set of one or more interrelated or interacting tasks. An activity has an input, an output,
and often an explicit verification task. Records of activity outputs must be available in case of an
audit.
Change Request A documented specification of a change to be made to the software system.
Known Anomaly A problem report that we do not plan on addressing.
Problem Report A record of actual or potential behavior of a software product that a user or other
interested person believes to be unsafe, inappropriate for the intended use or contrary to specification.
Record A special type of document that states the results achieved or provides evidence that
activities were performed. Unlike other documents---such as this software plan---records are not
usually revised after being approved.
SOUP Software of unknown provenance, also known as "off-the-shelf software", is a software
item that has not been developed for the purpose of being incorporated into the medical device and
for which adequate records of the development processes are not available.
Software Item A module within the software system which may further decomposed into smaller
software items. The software system is itself a software item, and thus the software items for
a hierarchy. See the software design specification for a description of how the software system is
decomposed into smaller software items.
Software Requirement A particular function that the software must support, or some other
constraint that the software must fulfill. Requirements describe the what, while specifications and
designs describe the how.
Page 2 of 18
Software Plan PLAN-001, Rev. 1
Software System All of the software in the project. The software system is decomposed into
software items.
Software Unit A software item which is not further subdivided.
PROJECT will be developed using an agile software development life cycle model. The agile strategy
develops the software system using a sequence of builds. Customer needs and software system
requirements are partially defined up front, then are refined in each succeeding build [62304:5.1.1; by
"agile" we mean a combined evolutionary and incremental life cycle model].
The activities described in this document are designed for a team composed of a project lead and
one to eight software developers. One of the software developers shall be assigned the role of the
project lead. The project lead, working on behalf of the manufacturer, is responsible for the safety
and utility of the software system built by the team.
At least one team member must be trained in risk management [14971:4.3].
Page 3 of 18
Software Plan PLAN-001, Rev. 1
TODO: The project lead should keep an up-to-date list of development standards here (e.g., PEP8
on a Python project).
If the software system’s safety classification is not level C (the highest), you may delete this section.
[This section fulfills 62304:5.1.4.a]
[62304:5.1.4.b]
TODO: The project lead should keep an up-to-date list of development methods here (e.g., Test
Driven Development) if relevant.
If the software system’s safety classification is not level C (the highest), you may delete this section.
[62304:5.1.4.c]
TODO: The project lead should keep an up-to-date list of development tools here, such as linters
and versions.
If the software system’s safety classification is not level C (the highest), you may delete this section.
To the extent possible, checking against these standards should be performed in an automated fashion
(e.g., using a linter which is run on a Git-commit hook) [62304:5.1.4].
[62304:5.5.2]
All final tests must include the Git hash or other objective reference that can be used to identify the
exact software tested [62304:5.1.11].
TODO: Write out a testing plan for PROJECT.
This plan should include a pass/fail criteria for the entire test suite. E.g., you require that all unit
tests pass and that all integration tests pass or the cause of the failure is understood and justified
[62304:5.7.1.a]
The activities below are designed to meet ISO 13506 quality control standard [62304:4.1].
The Risk Assessment, Risk Control and other activities below are intended to meet ISO 14971 risk
management standard [62304:4.2 14971:3.1 14971:3.2].
Page 4 of 18
Software Plan PLAN-001, Rev. 1
3 Activities
This section of the software plan describes the various activities involved with software development,
maintenance, risk management, problem resolution, and version control (also known, in regulatory
lingo as "configuration management"). The relationship between the inputs and outputs of these
activities are displayed in the following diagram and are fully described in the sub-sections below.
Since we are using an agile development life cycle, activities may be performed before their inputs
have settled and thus inputs and outputs may not be consistent between releases. [Note that tasks
are presented within each activity, although we do not explicitly demarcate them.]
[This software plan does not explicitly separate the software development process, software mainte-
nance process, configuration management process, problem resolution process, and software-related
risk management because we are using an agile software development life cycle and thus the
processes overlap with one another significantly. The activities described here fulfill 62304:4.2
62304:5.1.1.a, 62304:5.1.1.b, 62304:5.1.6, 62304:5.1.7, and 62304:5.1.9.b as well as, software-related
portions 14971:3.4.a, 14971:3.4.b, 14971:3.4.c, 14971:3.4.e, and 14971:3.5]
Page 5 of 18
Software Plan PLAN-001, Rev. 1
Planning
Software Plan
Requirements
Gathering
Software Requirements
Approved
Change Requests
Unit Implementation
and Testing**
Activity
Input Integration
Role Responsible
Activity
for Performing Activity
Integrated Changes
Role Responsible
for Verifying Outputs
Activity Integration & Internal Feedback
Output
System Testing
**The person who verifies the output must be different than the
person who generated it.
Software Release & User Feedback
Regulatory Documents
Page 6 of 18
Software Plan PLAN-001, Rev. 1
3.2 Planning
Page 7 of 18
Software Plan PLAN-001, Rev. 1
Page 8 of 18
Software Plan PLAN-001, Rev. 1
[[:This activity is meant to fulfill sections 14971:4.1.a, 14971:4.1.b, 14971:4.1.c, 14971:4.2 14971:5,
14971:6.1, and 14971:6.2 of 14971 with respect to software related risks]]
Input: Software design specification
Begin by identifying known and forseeably hazards associated with the device [14971:4.3]. It is
frequently necessary to consult with a clinical expert to understand and identify hazards in their
clinical context.
Next, identify which software items could cause hazardous situations [62304:7.1.1 62304:7.3.3.a], and
list them, along with the forseeably causes [62304:7.3.3.b]. Consider:
• whether requirements are appropriate and are meeting the needs of users
• incorrect or incomplete specifications of functionality [62304:7.1.2.a]
• software defects in the software item [62304:7.1.2.b]
• failure or unexpected results from SOUP [62304:7.1.2.c]
• how hardware failures or software defects in other items could result in unpredictable operation
[62304:7.1.2.d]
• reasonably forseeably misuse by users [62304:7.1.2.e]
• the list of causes in Annex B of IEC80002-1:2009 [62304:5.1.12.a 62304:5.1.12.b]
Include the sequences of events that could result in the hazardous situation [62304:7.1.5 ]. If failure
or unexpected results from SOUP is a potential cause contributing to a hazardous situation, review
the list of anomalies for the SOUP (if any) for known anomalies relevant to this hazardous situation
[62304:7.1.3].
Record the identified hazards, causes, hazardous situations, and harms in risk.yml as an individual
risk [62304:7.1.4 and 62304:9.5].
Finally, estimate the severity and probability of each risk and record this as well [14971:4.4].
See the appendices for additional information.
Output: Risk assessment
Verification:
• Ensure that the hazard, hazardous situation, and harms recorded for new risks appropriately
follow their ISO14971 definitions.
• Ensure that the risk probability is justifiable.
• Ensure that the new risks listed are appropriate, and are not unnecessarily detailed to the
point of not contributing to improved safety.
Page 9 of 18
Software Plan PLAN-001, Rev. 1
[This activity addresses 62304:6.3.1, since change requests resulting from maintenance and problem
resolution are processed in the same manner in which risk control measures and feature change
requests. Note that some releases are only meant for tracking development. The first commercial
release is typically v1.0.] ]]
Input: Feature and problem fix change requests
To organize and prioritize the development work, change requests are assigned to GitHub milestones.
Change requests that have not yet been assigned to a GitHub milestone have not yet been approved,
and should not be worked on [62304:8.2.1, 62304:6.2.4].
Once a change request is assigned to a milestone, it has been "approved" and may be worked on by a
developer. The project lead will then assign developers to change requests to divide up the work.
Software developers may also assign themselves to change requests, so long as it is not assigned to
another developer and they don’t have other outstanding tickets they can work on.
Page 10 of 18
Software Plan PLAN-001, Rev. 1
The project lead should coordinate with the business owner regarding which change requests to
include in a release. When planning a release:
• Consider outstanding problem reports [62304:9.4].
• Look through historical problem reports and attempt to identify any adverse trends. For
example, some software items may have many problem reports associated with them [62304:9.6
and 14971:9.a] or may have new or revised standards [14971:9.b].
• Review risk.yml for risk control measures that have not been implemented [62304:7.3.1 and
62304:7.2.2.c].
• Review soup.yml. Look for SOUP which has become obsolete, SOUP which should be upgraded,
and for known anomalies in published anomalies lists as appropriate [62304:6.1.f]. See the
appendices for additional details.
Create change requests as appropriate.
Output: The set of change requests which should be implemented for the next release
Verification: Not applicable to this activity
Input: SDS
Begin a new Git branch, as discussed in the unit implementation and testing activity, but before
implementing the change request, document a detailed design either within the SDS or as code
comments, as appropriate, for each new software item [62304:5.4.2]. These detailed designs should be
stored as closely as possible to their corresponding source files. As appropriate, write out function
signatures for the essential procedures, functions, classes, and/or modules involved with the change
request.
Detailed designs for interfaces between software items and external components (hardware or software)
should be included as appropriate [62304:5.4.3].
Once you have completed the detailed design, open a pull request and assign the project lead to
review the design.
Output: Software item designs
Verification: Ensure software requirements:
• is not more complicated than it needs to be to meet the requirements
• implements system and software requirements [62304:5.4.4.a]
• is free from contradiction with the SDS [62304:5.4.4.b].
Page 11 of 18
Software Plan PLAN-001, Rev. 1
• reference the change request that prompted the changes (the rdm hooks command can stream-
line including these references).
During development, as appropriate:
• Analyze how this change request effects the entire software system, and consider whether any
software items should be refactored or reused [62304:6.2.3].
• Consider whether any external systems that the software system interfaces with may be affected
[62304:6.2.3].
• If software has been released, consider whether any existing data needs to be migrated.
• Write unit tests and new integration tests.
• If SOUP was added, removed, or changed, update the soup.yaml file (see the appendices for
details).
• If the change request includes risk control measures, record the risk control measures in
risk.yml along with the residual risk. Also add new software requirements for the risk control
measure and record the software requirement id along with the risk [14971:6.2 and 62304:7.2.2.a].
• Perform the Risk Assessment [14971:6.6] and Risk Control Activities on any software items
(including SOUP) which were are added or modified [62304:7.4.1.a], including new risk control
measures[[62304:7.4.1.b, since they may have introduced new risks [62304:6.1.c, 62304:7.4
62304:7.3.1, 62304:7.4.3 since risk control measures will be implemented as part of this activity]
or impact on existing risk control measures [62304:7.4.2].
When work on a change branch is nearing completion, a pull request should be created for this
branch. A brief summary of the changes should be included in the pull request description. These
comments will be included in the final release history. The description should also mention whether
risk assessments were performed, or why not, and if tests were not required, why not.
Output: Code and documentation changes, stored in un-merged Git branches with corresponding
approved pull requests
Verification: Code review by at least on other developer.
Code review should ensure the code changes made in the Git branch:
• implements the associated change request
• is consistent with the related detailed designs
• follows the project’s software standards
• includes unit tests or justifies why they are not necessary
• any risk assessments are reasonable
• is covered by existing integration tests or includes a new integration test [62304:5.5.5 and
62304:8.2.3].
The developer performing the review should create a GitHub review and record their notes there. If
any changes are requested, address them and re-submit the review once they have been addressed.
The reviewer must approve the pull request from within the GitHub user interface [62304:8.2.4.c].
We suggest using the following format for your reviews:
- [x] Implements change request
- [x] Consistent with software system design
- [x] Documentation: Description of why fufilled, insufficient, or not needed.
- [ ] Unit Tests: Ditto
- [ ] Risk Assessment: Ditto
- [ ] Integration Tests: Ditto
This detailed checklist is not necessary for small changes or for changes early during the project.
Page 12 of 18
Software Plan PLAN-001, Rev. 1
3.11 Integration
Input: Software system built using the changes from this release’s change requests
The final integration prior to a release must formally record the test output in a test record. The
test record must include:
• The list of tests that passed or failed [62304:5.6.7.a 62304:5.7.5.a]
• Verification that the results meet the pass/fail criteria listed in the Test Plan [62304:5.7.4.c
62304:5.6.7.a]
• The version of the software being tested (e.g., the Git commit hash) [62304:5.6.7.b 62304:5.7.5.b]
• The name of the person who ran the tests [62304:5.6.6, 62304:5.6.7, 62304:5.7.5.c, 62304:5.6.7.c
and 62304:9.8].
Any test failures found during the formal release system testing shall be recorded as problem reports
[62304:5.6.8 62304:5.7.4.d]. See the prepare problem report activity for details [62304:5.7.2]. If any
change requests are implemented in response to these problem reports, the tests must be re-run
[62304:5.7.3.a 62304:5.7.3.b]. If it is deemed unnecessary to re-run some of the tests, the justification
as to why shall be included in the test record [62304:5.7.3.c note that the risk management activities
for (c) will be handled as part of the unit implementation and testing activity].
Output: Test record and problem reports [62304:5.6.3, 62304:5.6.4, and 62304:7.3.3.d] Verification:
Ensure code changes:
• the original problem is fixed and the problem report closed [62304:9.7.a]
• any adverse trends have been reversed [62304:9.7.b].
[Note that we combine our integration and system testing into one activity. We presume that if our
integration tests and system tests are passing, no new problems were introduced, per 62304:9.7.d]
3.13 Release
[This activity addresses 62304:6.3.2, since development releases and maintenance releases are treated
equivalently]
Page 13 of 18
Software Plan PLAN-001, Rev. 1
TODO: Write out how to archive the software system release. This will vary from project to project.
Here are some exmples:
• If the output of the build process is a binary, then the binary should be saved somewhere.
• If the output is a set of Python scripts with out any SOUP, then the source code within the
Git repository is already sufficient.
• If the output is a set of Python scripts with Python dependencies, then copies of the Python
dependencies must be archived somewhere. Likewise, if there are other system dependencies,
like postgres, then the debian package files (or perhaps a virtual box image) need to be archived.
ENDTODO
The purpose of the archive is to provide a means to re-test problems which may occur in an old
version of the software.
Input: Implemented and verified change requests for the current milestone
When a new version of the software is released, the Git commit corresponding to the state of the
code should be tagged with the version number.
Archived releases shall be kept until indefinitely.
[This section fulfills 62304:5.8.7.a and 62304:5.8.7.b; note that documentation and configuration items
are archived automatically due to the fact that they are stored in Git]
Output: An archived software release
Verification: Ensure that
• all of the planned change requests have been implemented and integrated [62304:5.6.2 and
62304:9.7.c]
• the outputs of each activity are in a consistent state [62304:5.1.6.c, 62304:5.1.6.d, and 62304:5.8.6]
• the unit tests adequately verify the software units [62304:5.5.2]
• the integration tests adequately verify the software system [62304:5.6.5 and 62304:5.7.4]
• all software requirements have been tested or otherwise verified [62304:5.7.4.a and 62304:5.7.4.b]
• the software design specification is accurate and up-to-date
• integration and system testing activity has been completed after the last change request was
integrated, and a test record has been written [62304:5.8.1]
• the Release History Document is up-to-date and none of the anomlies result in unacceptable
risk [62304:5.8.2, 62304:5.8.3, and 62304:5.8.4]
Record these verification steps in a new software release record.
Feedback from users, internal testers, and software developers will be recorded in USER FEEDBACK
SOFTWARE [62304:6.1.a, 62304:6.1.b and 62304:6.2.1.1; details about where direct customer feedback
is recorded and tracked is not handled here. It is assumed that other processes (e.g., perhaps part
of the broader quality management system) will handle this. We also do not go into detail here
regarding what criteria should be used to determine whether feedback is considered a problem, as
required by 62304:6.1.b].
Page 14 of 18
Software Plan PLAN-001, Rev. 1
Page 15 of 18
Software Plan PLAN-001, Rev. 1
4 Appendices
The subsections here provide guidance on following the software risk management, development, and
maintenance activities.
Writing software requirements is an art and a science; one must find balance between precision and
usefulness.
The distinction between system requirements and software requirements can be challenging. System
requirements describe the requirements of the entire system, including software and hardware.
Software requirements must be traceable to all of the system requirements that they help fulfill.
Software requirements are usually more detailed than the system requirements they refer to. Many
system requirements will be fulfilled using both hardware and software.
The distinction between software requirements and the specifications is also typically challenging.
Requirements should:
• not imply solution
• be verifiable
• be short, ideally one or two sentences long.
Specifications, on the other hand, should:
• be one of possibly many solutions
• be detailed.
Software requirements are often categorized as one of the following types [62304:5.2.2 and 62304:5.2.3]:
a. Functional and capability requirements [62304:5.2.2.a]
• performance (e.g., purpose of software, timing requirements),
• physical characteristics (e.g., code language, platform, operating system),
• computing environment (e.g., hardware, memory size, processing unit, time zone, network
infrastructure) under which the software is to perform, and
• need for compatibility with upgrades or multiple SOUP or other device versions.
b. Software system inputs and outputs [62304:5.2.2.b]
• data characteristics (e.g., numerical, alpha-numeric, format) ranges,
• limits, and
• defaults.
c. Interfaces between the software system and other systems [62304:5.2.2.c]
d. Software-driven alarms, warnings, and operator messages [62304:5.2.2.d]
e. Security requirements [62304:5.2.2.e]
• those related to the compromise of sensitive information,
• authentication,
• authorization,
• audit trail, and
• communication integrity.
f. Usability engineering requirements that are sensitive to human errors and training [62304:5.2.2.f]
Page 16 of 18
Software Plan PLAN-001, Rev. 1
This subsection provides a brief introduction to risk management in the context of software develop-
ment.
Safety is freedom from unacceptable risk. Note that it does not mean that there is no risk, as that
is impossible. The perception of risk can depend greatly on cultural, socio-economic and educational
background, the actual and perceived state of health of the patient, as well as whether the hazard
was avoidable.
Our obligation as medical device software developers is to develop safe devices, while balancing
economic constraints---a device that is never made can not help patients, so there may be risk
associated with not bringing a device to market if the device meets a clinical problem.
Risk is the combination of the probability of harm and the severity of that harm.
Harm is physical injury or damage of health of people (patients or users), or damage to property or
the environment.
A hazard is a potential source of harm.
A hazardous situation is a circumstance in which people, property, or the environment is exposed
to one or more hazard(s). Not every hazardous situation leads to harm.
Software is not itself a hazard because it can not directly cause harm, but software can contribute
towards producing hazardous situations.
4.3 SOUP
Information in the soup.yaml file may duplicate information found in other files (e.g.,
requirements.txt or package.json).
Sometimes, especially when working on software items with low levels of concern, it can be appropriate
to lump a few SOUP packages into a single item within the soup.yml file.
Page 17 of 18
Software Plan PLAN-001, Rev. 1
The soup.yaml should contain a sequence of mappings, each containing the keys in parenthesis below.
Some keys are optional. All values must be strings.
The header of each sub-section contains the title of the SOUP [62304:8.1.2.a].
The manufacturer is the name of the company that developed the SOUP. If the manufacturer field
is absent, then this SOUP was developed collaboratively by the free open-source software community,
and does not have a manufacturer in the traditional sense [62304:8.1.2.b].
The version of each SOUP is a unique identifier, which specifies the version of the SOUP which
is used in the software [62304:8.1.2.c]. The version may follow varying formats, such as 1.0.13,
1.2r5, or even 2021-05-05, as appropriate. The purpose of each SOUP describes the functional
and performance requirements that are necessary for its intended use [62304:5.3.3].
The requirements will be present if there are any noteworthy hardware and software requirements
for the SOUP to function properly within the system [62304:5.3.4].
The known anomalies present in the SOUP which may affect the functioning of PROJECT should be
recorded, as should the anomaly_reference, a location of the published anomalies list [62304:7.1.3].
When reviewing open anomalies:
• Follow a risk based approach; concentrate on high priority anomalies (assuming the SOUP
manufacturer provides such a categorization).
• If the list of known anomalies is large (e.g., more than 100), without prioritization, then sample
the list as appropriate for the risk associated with the SOUP.
• When possible, focus the review on anomalies which affect portions of SOUP which are used
by PROJECT.
Page 18 of 18