| | 3 | Скрипт пересчитывает products.mismatch по следующим правилам: |
| | 4 | |
| | 5 | 1. Если запись дефекта имеет status=fail или старое значение NULL, её bond указывает на номер N записи устранения со статусом ok, а bond устранения указывает обратно на этот дефект, то дефект считается закрытым. Обе записи должны относиться к одному изделию — иметь одинаковый UID. |
| | 6 | |
| | 7 | 2. Если у изделия есть запись устранения со статусом ok, у которой bond=NULL или 0, и ни одна другая запись не ссылается на неё через bond, то скрипт считает её устранением по старой схеме. Если таких устранений несколько, используется последнее по дате; при одинаковой дате — с наибольшим N. |
| | 8 | |
| | 9 | 3. Если запись дефекта имеет bond=NULL или 0 и находится до устранения из пункта 2, то дефект считается закрытым. Если находится после него, то считается открытым. |
| | 10 | |
| | 11 | 4. Если у изделия нет записи устранения, соответствующей пункту 2, то дефекты с bond=NULL или 0 считаются открытыми. |
| | 12 | |
| | 13 | 5. Если по этим правилам найден хотя бы один открытый дефект, то в products.mismatch записывается yes. Если открытых дефектов нет — no. Уже совпадающее значение не изменяется. |
| | 14 | |
| | 15 | 6. Если bond указывает на отсутствующую запись, на другое изделие, на саму запись, на неподходящую запись либо отсутствует обратная ссылка, то изделие не исправляется автоматически. Оно попадает в «Для ручного разбора». Туда же попадают случаи с неизвестными статусами и отсутствующими датами, необходимыми для определения порядка событий. |
| | 16 | |
| | 17 | Под дефектом понимается запись, у которой type_write содержит mismatch, а status=fail или NULL. Под устранением — запись со статусом ok, у которой type_write содержит mismatch |
| | 18 | «Проверить» ничего не меняет. «Исправить» изменяет только products.mismatch. История и значения bond не переписываются. |
| | 19 | |
| | 20 | |