# Product development: why the app refuses (/docs/product-development/refusals)

The app refuses a step to keep the controlled record true: a released document does not change by
accident, and nothing is released with a gap. A refusal changes nothing; fix the cause and try again.
Messages about signatures, signing authority, training and field ranges are the same in every flow and
are explained in [Signatures and common refusals](/docs/get-started/signatures-and-refusals). Messages about
engineering change notes are in [Engineering changes: why the app refuses](/docs/product-development/engineering-changes-refusals).

```mermaid
%% title: Why a controlled document refuses a change
flowchart TD
  A["You change a product, method, work instruction or a line of it"] --> B{"Is the document a Draft?"}
  B -->|"Yes"| C["Saved"]
  B -->|"No"| D["Refused: start a new revision"]
  D --> E["Raise an engineering change note"]
```

## Start a development item [#start-a-development-item]

Task page: [Start a development item](/docs/product-development/development-items).

### Move to the next stage [#move-to-the-next-stage]

| Message | When | What it means | What to do |
|---|---|---|---|
| `Record the specification lines first` | Pressing **Move to DFM review** with no specification gap recorded | An empty list is not a specified item. | Add the gaps and close them. |
| `Close the specification gaps first` | Pressing **Move to DFM review** with a gap still open | The item is not specified well enough to review. | Close each gap, or remove one that no longer applies. |
| `Record the DFM checks first` | Pressing **Move to Trial** with no DFM check recorded | An empty list is not a review. | Add the checks and pass them. |
| `Complete the DFM review first` | Pressing **Move to Trial** with a check not passed | The DFM review is not finished. | Pass each check. |
| `Link the product first` | Pressing **Move to First article** or **Approve · qualified** with no **Product** | The item must name the product it develops. | Choose **Edit** and pick the **Product**. |
| `Qualified needs an accepted first article for {pn}, a validated process and the customer's approval reference.` | Pressing **Approve · qualified** | Only the missing parts are named, so the message can be shorter. A customer's approval reference is needed only when the item names a **Customer**. | Get a first article accepted, finish the process validation, or write the **Customer approval ref.**. |
| `This step needs a QA manager signature. You are signed in as {name} ({role}).` | Pressing **Approve · qualified** as anyone but the QA manager (or a delegate) | The QA manager signs a development item as qualified. | Ask the QA manager. |
| `This is a controlled record. Enter the reason for the change.` | Saving an edit to an item without a reason | A development item is controlled. | Write the reason of at least four characters. |
| `This item is already qualified.` | A second **Move to** at **Qualified** | There is no next stage. | None. |
| `Development item {key} was not found.` | Closing a gap or passing a check on an item that was deleted | | Reload the screen. |
| `That item was not found.` | Closing or reopening a gap or check that no longer exists | Another person changed the list. | Reload the screen. |

### Regulatory requirements and cleanliness [#regulatory-requirements-and-cleanliness]

| Message | When | What it means | What to do |
|---|---|---|---|
| `Enter the requirements passed to General` / `Enter the source` / `Enter the requirements passed to General, source` | **Approve** or **Record review** on a regulatory requirement with those fields blank | The requirement cannot be approved without what is passed on and where it comes from. | Fill in **Requirements passed to General** and **Source**. Only the blank ones are named. |
| `Enter the specification` / `Enter the verification method` / `Enter the acceptance limit` (two or three joined by commas) | **Approve** on a cleanliness requirement with those fields blank | | Fill in the named fields. |
| `Enter the last result and whether it is OK` | **Record verification** with **Last result** or **Last result OK** blank | | Fill in both. |
| `Failed cleanliness verification: link an NCR` | **Record verification** with **Last result OK** set to **No** and no **NCR** | A failed verification needs a nonconformance report. | Raise the NCR and select it in **NCR**. |

## Set up items and products [#set-up-items-and-products]

Task page: [Set up items and products](/docs/product-development/items-and-products).

| Message | When | What it means | What to do |
|---|---|---|---|
| `Factor must be greater than zero.` | Saving a unit conversion with a factor of 0 or less | | Enter a factor above zero. |
| `Unit "{unit}" for {item} has no approved conversion to {base}. Receive in {base}, or approve the conversion in Inventory › Unit conversions.` | Receiving or booking a quantity in a unit with no approved conversion | Only approved conversions are used. | Approve the conversion, or use the base unit. |
| `Unit "{unit}" for {item} has no approved conversion to {base}. The approved pack is {pack}.` | The unit text does not match the approved pack size | | Use the approved pack text. |
| `Qty must be greater than zero.` | A converted quantity comes out at zero or less | | Enter a larger quantity. |
| `A lot enters stock through a goods receipt, so its Receipt movement and incoming inspection are recorded. Receive it in Inventory › Goods receipts (ISO 13485 7.5.8).` | Adding a stock lot by hand | Stock is created by receiving. | Receive the goods. See [Receive goods](/docs/purchasing/receive-goods). |
| `A lot's {fields} cannot be edited directly. Use receiving, a stock movement, a stock count or a nonconforming stock disposition, so the change leaves a ledger entry (ISO 13485 7.5.8).` | Editing a lot's quantity, status, bin, expiry, item or owner | Stock changes leave a ledger entry. | Use a stock movement or count. |
| `Product {key} rev {rev} is {status}. Start a new revision to change it.` (or `Production method`, `Work instruction`) | Editing or deleting a product, method or work instruction that is not a **Draft** | A controlled document is read-only. | Start a new revision under an approved change note. See [Change a released product](/docs/product-development/engineering-changes). |
| `Approval signatures are written by the approval steps only.` | Editing the approvals of a document | Only the approval buttons write them. | Use the buttons. |
| `The revision history is written by the revision steps only.` | Editing the revision history | | Use **New revision**. |
| `The change note of a revision is written by the revision steps only.` | Editing the change note field of a revision | | Use **New revision**. |
| `{record} already exists.` | Saving a number that is taken | Numbers are unique. | Use another number. |

## Build the bill of materials [#build-the-bill-of-materials]

Task page: [Build the bill of materials](/docs/product-development/bill-of-materials).

| Message | When | What it means | What to do |
|---|---|---|---|
| `Product {key} rev {rev} is {status}. Start a new revision to change it.` | Adding, editing or deleting a line of a product that is **In review**, **Released** or **Obsolete** | The bill follows its product. | Start a new revision. |
| `Production method {id} rev {rev} is {status}. Start a new revision to change it.` | Changing a line that names a method that is not a **Draft** | The line is locked with its method. | Start a new revision of the method. |
| `Production method {id} is not a method of {product}.` | Saving a line with a method of another product | | Choose a method of this product, or leave it empty. |
| `{record} already exists.` | Two lines with the same number for the same product and method | | Use the next free line number. |

## Define the production method [#define-the-production-method]

Task page: [Define the production method](/docs/product-development/methods-and-routings).

### Saving the method and its lines [#saving-the-method-and-its-lines]

| Message | When | What it means | What to do |
|---|---|---|---|
| `Lot size from ({a}) cannot be above lot size to ({b}).` | Saving a method with the lot range reversed | | Swap or correct the two numbers. |
| `Valid to ({b}) is before valid from ({a}).` | Saving a method with the dates reversed | | Correct the dates. |
| `The product of a production method with a revision history cannot change.` | Changing the **Product** of a method that has been released | Its kept release belongs to that product. | Leave the product. |
| `Production method {id} rev {rev} is {status}. Start a new revision to change it.` | Editing a method, an operation, a line, an option or a parameter of a method that is not a **Draft** | | Start a new revision. |
| `{Label} must be a number.` | Typing a non-number in **Std time**, **First piece sample**, **IPQC every** or **IPQC sample** | | Use digits. |
| `{Label} is not one of the options.` | Choosing a value the field does not offer | | Pick from the list. |
| `{Label} {value} does not exist.` | Naming a machine, work instruction or IPQC frequency that does not exist | | Pick from the list. |
| `Operation {n} of {method} was not found.` | Editing, duplicating or removing an operation that was removed | | Reload the method. |
| `The operation number is not valid.` | An operation request with a bad number | | Reload the method. |
| `Pick another production method to copy from.` | **Copy operations from…** the same method | | Choose a different method. |
| `{method} has no operations` | Copying from a method with no operations | | Choose a method with operations. |
| `The operations changed. Reload and try again.` | Dragging an operation after another person changed the list | | Reload and drag again. |
| `Renumbering {method} would move rows of {product}, which is released: {rows} and {n} more. A new production method cannot change a released product. Revise the product or release a revision of the method through an engineering change first.` | Reordering the operations of a new Draft method when lines or options of the released product name those operations | The product's own rows must not move. | Use the change process, or attach the rows to the method. |
| `Production method {id} was not found.` / `Machine option {key} was not found.` | Editing something that was deleted | | Reload. |
| `First piece sample (pcs) must be a number.` | Changing a machine option's first piece sample | | Use digits. |
| `Work instruction {id} does not exist.` / `IPQC frequency {id} does not exist.` | Setting a machine option's work instruction or frequency | | Pick from the list. |

### Machine options [#machine-options]

| Message | When | What it means | What to do |
|---|---|---|---|
| `{mould} is a mould, so the option needs a cycle above 0 seconds.` | Saving an option with a mould and a cycle of 0 | A zero cycle gives an infinite rate. | Enter the cycle in seconds. |
| `Operation {n} is not an operation of production method {method}.` | Saving an option for an operation the method does not have | | Add the operation or correct the number. |
| `Operation {n} is not an operation of any production method of {product}.` | Saving an option with no method when no method of the product has that operation | | Add the operation to a method. |

### Process parameters [#process-parameters]

| Message | When | What it means | What to do |
|---|---|---|---|
| `The set value must sit inside the validated window.` | Saving a parameter whose **Set** is outside **Validated min** and **Validated max** | | Correct the set value or the window. |
| `{product} already has a parameter "{name}" for this method, machine option and operation ({key}). Edit that one instead.` | Saving a second parameter with the same name | One set point per parameter. | Edit the existing parameter. |

### Submit for review and release [#submit-for-review-and-release]

| Message | When | What it means | What to do |
|---|---|---|---|
| `Production method {id} rev {rev} has no operations. Add its operations before it is submitted.` (or `released`) | **Submit for review** or the last approval on a method with no operation | | Add operations. |
| `Production method {id} rev {rev} has {n} operation{s} with gaps: op {n} {gap}, {gap}; op {n} {gap}. Fix them in the Draft before it is submitted.` (or `released`) | **Submit for review** or the last approval | The gaps are `no station`, `no work instruction`, `work instruction not released`, `no std time` and `no machine option`. | Fix each operation. A work instruction must be **Released**. An **Inactive** machine option does not count. |

## Write work instructions [#write-work-instructions]

Task page: [Write work instructions](/docs/product-development/work-instructions).

| Message | When | What it means | What to do |
|---|---|---|---|
| `{doc} is in review, so its steps are read-only. Return it to draft to edit.` | Editing steps in the studio while the work instruction is **In review** | | Choose **Return to draft** on the record. |
| `{doc} is obsolete and kept for history only.` | Editing steps of an obsolete work instruction | | Use the live revision. |
| `Work instruction {doc} rev {rev} is released. Start a new revision to change it.` | Editing steps of a released work instruction | | Start a new revision. |
| `Work instruction {doc} was not found.` | Opening the studio for a work instruction that does not exist | | Check the number. |
| `Step {n} was not found.` | Editing or moving a step that was removed | | Reload the studio. |
| `Confirmation is not one of the options.` | Setting a confirmation that is not **Tick**, **Scan** or **Enter value** | | Pick from the list. |
| `A work instruction keeps at least one step.` | **Delete step** on the last step | | Add another step first, or leave it. |
| `Link {doc} to an operation first, on the product's production method` | **Generate steps** on a work instruction no operation names | There is nothing to draft from. | Set the work instruction on an operation. |
| `The system finds a setup guide by its mould, not by an operation: {doc} is for mould {mould}. Write its steps by hand.` | **Generate steps** on a setup guide (`SG-M307` for mould `M-307`) | A setup guide is tied to its mould by its number, not to an operation. | Name the guide after the mould and type its steps. |
| `Work instruction {doc} rev {rev} has no steps. Add at least one step before it is submitted for review.` (or `released`) | **Submit for review** or the last approval | | Add a step. |

## Set the inspection plan [#set-the-inspection-plan]

Task page: [Set the inspection plan](/docs/product-development/inspection-plan).

| Message | When | What it means | What to do |
|---|---|---|---|
| `Tolerance must be greater than zero.` | Saving a characteristic with **± Tol** of 0 or less | The limits would be a single point. | Enter a tolerance above zero. |
| `Product {key} rev {rev} is {status}. Start a new revision to change it.` | Adding, editing or deleting a characteristic of a product that is not a **Draft** | The plan follows its product. | Start a new revision. |
| `Production method {id} rev {rev} is {status}. Start a new revision to change it.` | The same, for a characteristic that names a method that is not a **Draft** | | Start a new revision of the method. |
| `Production method {id} is not a method of {product}.` | Naming a method of another product | | Pick the product's method. |

## Validate the process [#validate-the-process]

Task page: [Validate the process](/docs/product-development/process-validation).

### Process FMEA [#process-fmea]

| Message | When | What it means | What to do |
|---|---|---|---|
| `Score severity, occurrence and detection (1–10)` | **Score · set priority** with S, O or D blank | | Choose 1 to 10 for all three. |
| `Enter the owner`, `Enter the due date`, `Enter the recommended action and owner`, or `Enter the recommended action, owner and due date` | **Start action** with the named items blank | The message names only what is empty. | Fill in the recommended action, the owner and the due date. |
| `Re-score S, O and D after the action` | **Re-score · close** with **S after**, **O after** or **D after** blank | | Fill in all three. |
| `Severity can only drop through a design change. Keep S at {S} or record the design change in the action.` | **Re-score · close** with a lower severity and no design change in the action | | Keep S, or write the design change in **Recommended action**. |
| `Occurrence or detection must be reduced by the action (O×D now {n}).` | **Re-score · close** where O after × D after is not lower | The action did not reduce the risk. | Re-score honestly, or carry out a further action. |
| `Still High priority after action (RPN {rpn}, S {s} with O {o}). Reduce occurrence below 3 or add a further action.` | **Re-score · close** where the line is still **High** | | Add a further action. |

### Process validation [#process-validation]

| Message | When | What it means | What to do |
|---|---|---|---|
| `Fill in first: process, scope, trigger, protocol, validated parameters, acceptance criteria, PQ lots / samples` (only the blank ones) | **Approve protocol** | The protocol is not complete. | Fill in the named fields. |
| `Link the engineering change note` | **Approve protocol** when the trigger is **Engineering change note** and none is linked | | Select the change note in **Engineering change note**. |
| `The approver must be someone other than the preparer` | **Approve protocol** or **Approve · validated** by the **Prepared by** person | Independent approval. | Ask another QA engineer. |
| `Fill in first: results, IQ, OQ` (IQ and OQ only when the scope includes them; only the blank ones) | **Submit report** | | Fill in the named fields. |
| `PQ readings: {problem}; {problem}. Enter the PQ readings first.` (up to three problems) where a problem is `{characteristic} is on {n} of {lots} lots`, `{characteristic} lot {lot} has {n} of {readings} readings`, `{characteristic} lot {lot} has no spread in its readings`, `{characteristic} lot {lot} is entered twice` or `No PQ readings ({lots} lots of {readings})` (the numbers that your organization sets; default 3 lots of 30) | **Submit report** or **Approve · validated** for a scope with PQ | The readings are too few to judge capability. | Enter more readings in the **PQ readings** panel while **Executing**. |
| `PQ readings are not valid (row {n}): {reason}` where the reason is `Enter the lot`, `Enter the characteristic`, `Enter at least one limit (LSL or USL)`, `The lower limit must be below the upper limit`, or `must be a number` | **Save readings** | A row is incomplete. | Fix the row named. |
| `PQ lot {lot} is not a lot made by a validation run of {validation}.` | **Save readings** with a lot that is typed, or made by an ordinary order or another validation | The readings must come from real lots. | Make the lots with a validation run, see [Validate the process](/docs/product-development/process-validation#make-the-pq-lots-with-a-validation-run), and name them. |
| `PQ readings can only be entered while the validation is Executing.` | **Save readings** in any other status | | Choose **Start execution** first. |
| `Min. Cpk is calculated from the PQ readings when the report is submitted.` | Typing or changing **Min. Cpk** | The number comes from the readings. | Leave the field; submit the report. |
| `Fill in first: revalidation period` | **Approve · validated** with **Revalidate every (months)** blank | | Enter the months. |
| `Min. Cpk {x} is below 1.33. Fail the validation or record a justified deviation and re-run.` | **Approve · validated** with Cpk under 1.33 | The process is not capable enough. | Choose **Fail**, or improve the process and revalidate. |
| `Fill in first: deviations (reason for failure)` | **Fail** with **Deviations** blank | | Describe why it failed. |
| `{open} is already open as the revalidation of {base}. Finish it first.` | **Start revalidation** while one is open | | Open the revalidation that exists. |

## Release the product documents [#release-the-product-documents]

Task page: [Release the product documents](/docs/product-development/document-release).

### Submit for review and the last approval [#submit-for-review-and-the-last-approval]

| Message | When | What it means | What to do |
|---|---|---|---|
| `Product {pn} rev {rev} cannot be submitted: its medical device file lacks {gaps}. Complete the file first (a routing must be Released before its product is).` (or `released`) where gaps are `BOM`, `released routing`, `production method`, `work instruction`, `PFMEA` (or `PFMEA (no scored line; unscored: {lines})`, which names the lines to score) | **Submit for review**, or the last approval, of a product | The product's file does not have an item that the [product release requirements](/docs/settings/organization#set-the-product-release-requirements) require. | Add the missing piece. Release the method first. An Org admin can change the requirements. |
| The method messages and `Work instruction {doc} rev {rev} has no steps...` | **Submit for review**, or the last approval, of a method or work instruction | | See [Define the production method](#define-the-production-method) and [Write work instructions](#write-work-instructions). |

### Approval levels [#approval-levels]

| Message | When | What it means | What to do |
|---|---|---|---|
| `{Level} must be signed by {role}` for example `Production review must be signed by Production supervisor` | Pressing **Approve · Level n of m · name** without the level's authority (the button is normally greyed out with `This step needs a {role} signature`) | Each level has an owner. When levels sign in any order, no open level is yours: the message names the first open level, and the greyed-out button names every open role (`This step needs a Production supervisor or QA manager signature`). | Ask the person who holds one of those roles, or a person they delegated to. |
| `The same person cannot sign two levels` | Signing a second level of one revision | | Ask a different person. |
| `Every approval level is signed. Return it to draft and submit it again.` | Approving a document whose levels are all signed | | Return it to draft if it needs to go round again. |
| `That action is not available while the record is {status}.` | Signing a level of a document that is not **In review** | | Reload the document. |

### New revision and make obsolete [#new-revision-and-make-obsolete]

| Message | When | What it means | What to do |
|---|---|---|---|
| `A new revision needs an approved engineering change note` | **New revision** with no approved change note chosen, or a note that does not list or cover the document | Every revision is made under a change note. | Raise or choose an approved note. See [Change a released product](/docs/product-development/engineering-changes). |
| `{key} is still in use and cannot be made obsolete. {group}: {keys} and {n} more. {advice}` where groups are `Manufacturing orders`, `Sales orders`, `Quotations`, `Manufacturing orders running it`, `Machine options`, `Operations`, `Machines`, `PM plans` | **Make obsolete** while records use the document | Withdrawing it would strand work. | Follow the advice: for a product `Close, cancel or move them to another product first.`, for a method `Finish or cancel them first.`, for a work instruction `Pick its replacement on each first.` |

### Print a controlled copy [#print-a-controlled-copy]

| Message | When | What it means | What to do |
|---|---|---|---|
| `{key} has no released revision to print. Release it first.` | **Print or save as PDF** on a document that was never released | A copy shows a released revision, never a Draft. | Release the document. |
| `{key} is obsolete and has no released revision to print.` | **Print or save as PDF** on an obsolete document | Nothing is in force. | None. Use the replacement document. |
| `{key} rev {B} is being revised; print the released rev {A} from its revision history, or release rev {B} first.` | **Print or save as PDF** while a new revision is a Draft or In review | The sheet prints the record as it stands, which is not released. | Release the new revision, then print. |

See [Controlled copies follow the release](/docs/product-development/document-release#controlled-copies-follow-the-release).

### Return to draft [#return-to-draft]

**Return to draft** has no content check. It clears the approvals.

### QMS documents [#qms-documents]

| Message | When | What it means | What to do |
|---|---|---|---|
| `Fill in first: owner, approver, change description, distribution roles` (only the blank ones) | **Submit for review** | | Fill in the named fields. |
| `Choose the roles that must read this document.` | **Submit for review** or approve with no distribution roles | | Choose roles. |
| `The distribution names a role that does not exist: {roles}. Choose roles from the list, or All roles.` (plural: `roles that do not exist`) | Same | | Pick from the list. |
| `All roles stands for every role, so it cannot be listed beside other roles. Choose All roles on its own, or name the roles.` | Same | | Choose **All roles** alone. |
| `Assign an approver first` | Approving with no approver | | Assign an approver while it is a draft. |
| `The approver must be someone other than the owner ({name})` | The owner tries to approve, or the owner is named as approver | Independent approval. | Name another approver. |
| `Only {name} can approve this revision` | Approving as someone other than the named approver | | Ask the named person. |
| `The approver must be someone other than the person who submitted this revision ({name})` | The submitter tries to approve | | Ask the approver. |
| `The approver must be someone who did not write this revision. You created, edited or submitted it` | A person who edited the revision tries to approve | | Ask another approver. |
| `Return to draft and submit again: this revision was submitted before the system recorded who submitted it, so independent approval cannot be shown` | Approving an older submission | | Return it to draft and submit again. |
| `You cannot name yourself as the approver of a document you are editing. Ask the document owner or QA to assign another approver.` | Naming yourself as approver | | Ask someone else to assign one. |
| `{Field} cannot be changed while the revision is in review. Return it to draft first.` | Editing a fixed field in review | | Choose **Return to draft**. |
| `The document file can only change while the revision is a draft. Return it to draft or start a new revision first.` | Attaching or removing the file outside a draft | | Return it to draft. |
| `Sign in as a named user to acknowledge` | **Acknowledge read** by an account with no employee record | | Sign in with a named account. |
| `{doc} is not distributed to {role}, so you do not read and sign it. Ask the QA manager to add the role to its distribution.` | **Acknowledge read** by a role not on the distribution | | Ask the QA manager. |
| `A manager judged you not yet competent on {doc} rev {rev}; ask for retraining.` | **Acknowledge read** after a not-competent judgement | | Ask for retraining. |
| `Your training on {doc} rev {rev} is waiting for the QA manager's effectiveness check; reading again does not replace it.` | **Acknowledge read** while that check is pending | | Wait for the check. |

QMS document messages for **Periodic review · no change**, **Start revision** and **Make obsolete** are
not listed here.

<NextSteps>

<NextStep href="/docs/product-development/development-items" title="Start a development item" description="Back to the first task of the flow." />

<NextStep href="/docs/product-development/engineering-changes-refusals" title="Engineering changes: why the app refuses" description="Messages for change notes, the change board and the checklist." />

<NextStep href="/docs/get-started/signatures-and-refusals" title="Signatures and common refusals" description="The messages every flow shares." />

</NextSteps>

{/* Sources: packages/contracts/src/mes/engineering-product/{devit,regulatory,document,master-data,metrics,params}.ts; packages/contracts/src/mes/engineering-change/process.ts; packages/contracts/src/mes/quality-inspection/index.ts; packages/contracts/src/mes/quality-system/helpers.ts; apps/api/src/modules/mes/engineering-product/{devit,documents,hooks,in-use,operations,regulatory,release-gate,studio}.ts; apps/api/src/modules/mes/engineering-change/process.ts; apps/api/src/modules/mes/core/document-kids.ts; apps/api/src/modules/mes/inventory/{derive,receipts}.ts; apps/api/src/modules/mes/quality-system/actions/documents.ts. About 110 messages covered. */}
