﻿id	summary	reporter	owner	description	type	status	priority	component	resolution	keywords	cc
1549	исправить уже имеющиеся неконсистентности в БД	Denis_N	san	"По тикету (See #1394) нужно нормализовать данные несоответствий в бд. Подготовил скрипт для нормализации бд normalize_mismatch.php​. Нужно опубликовать на сервере и открыть.

Назначаю задачу на san, так как у меня нет прав на изменение записей в бд.

Скрипт пересчитывает products.mismatch по следующим правилам:

1. Если запись дефекта имеет status=fail или старое значение NULL, её bond указывает на номер N записи устранения со статусом ok, а bond устранения указывает обратно на этот дефект, то дефект считается закрытым. Обе записи должны относиться к одному изделию — иметь одинаковый UID.

2. Если у изделия есть запись устранения со статусом ok, у которой bond=NULL или 0, и ни одна другая запись не ссылается на неё через bond, то скрипт считает её устранением по старой схеме. Если таких устранений несколько, используется последнее по дате; при одинаковой дате — с наибольшим N.

3. Если запись дефекта имеет bond=NULL или 0 и находится до устранения из пункта 2, то дефект считается закрытым. Если находится после него, то считается открытым.

4. Если у изделия нет записи устранения, соответствующей пункту 2, то дефекты с bond=NULL или 0 считаются открытыми.

5. Если по этим правилам найден хотя бы один открытый дефект, то в products.mismatch записывается yes. Если открытых дефектов нет — no. Уже совпадающее значение не изменяется.

6. Если bond указывает на отсутствующую запись, на другое изделие, на саму запись, на неподходящую запись либо отсутствует обратная ссылка, то изделие не исправляется автоматически. Оно попадает в «Для ручного разбора». Туда же попадают случаи с неизвестными статусами и отсутствующими датами, необходимыми для определения порядка событий.

Под дефектом понимается запись, у которой type_write содержит mismatch, а status=fail или NULL. Под устранением — запись со статусом ok, у которой type_write содержит mismatch 
«Проверить» ничего не меняет. «Исправить» изменяет только products.mismatch. История и значения bond не переписываются.


"	дефект	assigned	minor	БД изделий АДС			
