Эволюция продукта
Все хозяйства обязаны передавать данные в государственный реестр, и вопрос к книге у них один: что из этого она отдаст, а чего не хватит. Здесь ответ по каждому из двадцати шаблонов — с числами, сосчитанными по живой базе, и с честно названным тем, чего система пока не ведёт вовсе.
Шаблонов реестра
20
У всех есть кнопка выгрузки; 10 заполним целиком
Колонок во всех шаблонах
194 из 265
есть чем заполнить — по живой базе, а не по схеме
Строк уехало бы сегодня
22 723
по прогону 30 августа 2026 и по тем шаблонам, что собирались к тому дню
Шаблоны — версии 2.6.0, прочитаны файлами: все двадцать шапок сверены с ними построчно, колонка за колонкой. «Заполним» — это поля, которые книга умеет положить в ячейку; строки, у которых обязательное поле пусто, выгрузка придерживает и называет причину, а не отправляет пустыми. Число строк — из прогона по живой базе 30 августа 2026: 1576 животных, 2065 отёлов, 3208 осеменений, 13 927 доек.
Шаблон за шаблоном
| Шаблон ФГИАС | Колонок | Заполним | Состояние | Что мешает и чего не хватает |
|---|---|---|---|---|
| Достоверность происхождения | 27 | 25 | отдадим | Файл собирается: npm run export:fgias. Книга ведёт тест целиком: лабораторию с ИНН и КПП, номер и дату генетического сертификата, метод, способ подтверждения, вывод, число SNP-маркеров и все двенадцать локусов ISAG. Группа крови берётся у животного. Пустой уходит одна колонка — «Проба»: справочник, на который она ссылается, оказался списком болезней и генов и на вопрос «какую пробу брали» не отвечает, а заполнять догадкой хуже, чем оставить пустой. |
| Отёл / Аборт / Запуск | 11 | 9 | отдадим | Файл собирается: npm run export:fgias. Тип события завёлся отдельным полем — прежде «Аборт» лежал в одном списке с «Тёлкой», то есть ответ на один вопрос стоял среди ответов на другой. Приплод считается тремя числами: живых тёлочек, живых бычков, мертворождённых. У двух тысяч отёлов, загруженных раньше, числа проставлены переводом из прежнего поля там, где оно их подразумевало, — «Тёлка» это одна живая тёлочка; у двоен пол не восстановить, и выдуман он не был. Не хватает базового номера животного. |
| Осеменение | 10 | 8 | отдадим | Файл собирается: npm run export:fgias. Совпадает почти целиком, включая метод, плодотворность и дату подтверждения стельности. Номер попытки внутри лактации книга считает по датам, если хозяйство его не вело. Плодотворность у осеменения, которое ещё не проверяли, уходит пустой, а не «нет»: это разные утверждения. Упирается в двойную регистрацию — нужен базовый номер не только коровы, но и быка-осеменителя: реестр ждёт производителя ключом, а не кличкой. В отчёте это отдельная причина, чтобы было видно, чьей регистрации не хватает. |
| Контрольное доение | 15 | 12 | отдадим | Файл собирается: npm run export:fgias. День лактации книга считает из даты отёла, номер доения — по порядку внутри лактации. Лаборатория уходит наименованием, ИНН и КПП — они берутся из связи с организацией, а не переписываются в каждый замер. Пустым уходит номер пробы: это номер пробирки в лаборатории, книга его не ведёт, и заводить колонку под него рано — сперва надо увидеть, приходит ли он в присылаемых файлах. |
| Участие в выставках и соревнованиях | 8 | 6 | отдадим | Файл собирается: npm run export:fgias. Книга ведёт выставки в карточке животного и отдаёт файлом: дата, мероприятие, место, награды, выигрыш. Загружается тем же файлом обратно. Не хватает только базового номера животного. |
| Живая масса | 7 | 5 | отдадим | Файл собирается: npm run export:fgias. Книга ведёт взвешивания отдельным разделом: дата, масса, признак («при рождении», «на возраст», «при продаже»), номер лактации. Загружается ведомостью и выгружается файлом. Не хватает только базового номера животного. |
| Лактация: молочная продуктивность | 13 | 9 | отдадим | Файл собирается: npm run export:fgias. Девять колонок из тринадцати книга берёт из своих лактаций, наш ключ уходит в «Идентификатор учётной системы», «Идентификатор ФГИАС ПР» пуст у новой записи по самому шаблону. Остаются два: базовый номер животного — он приходит обратным файлом после сдачи «Основных сведений», — и «Признак», который мы проставляем своим прочтением справочника и просим уточнить в поддержке реестра. |
| Индекс племенной ценности | 5 | 3 | отдадим | Файл собирается: npm run export:fgias. Индекс книга считает сама и хранит с датой. Реестр ждёт «результат оценки» текстом, и это нам на руку: индекс — собственный расчёт по собственной базе сравнения, а текстовая колонка честно означает «вот наш результат», а не «вот значение известной всем величины». Без даты расчёта строка не уезжает: число без дня не отличить от прошлогоднего. |
| Межотельный период | 5 | 3 | отдадим | Файл собирается: npm run export:fgias. Считается из отёлов, а не хранится: разница между соседними датами. Хранить её значило бы завести второй ответ на вопрос, у которого уже есть первый, — правку даты отёла пришлось бы разносить по производным, и однажды не разнесли бы. У первого отёла периода нет по определению, и строки для него не будет. Прежде здесь стояло «пять из пяти» — по счёту колонок, которые книга умеет посчитать; теперь по общему правилу описи из счёта вычтены два номера реестра, которых у нас нет. |
| Сервис-период | 5 | 3 | отдадим | Файл собирается: npm run export:fgias. От отёла до плодотворного осеменения — по настоящей дате, а не «межотельный минус двести восемьдесят пять». Второе было бы проще и почти всегда близко к правде, но ошибалось бы там, где стельность вышла короче или длиннее обычного, то есть ровно на тех коровах, ради которых показатель и смотрят. Плодотворным считается последнее осеменение перед следующим отёлом. Контракт требует от 10 до 775 дней; выходящее за границы придержано с названной причиной, а не прижато к краю. |
| Подтверждение владения | 8 | 7 | частично | Файл собирается: npm run export:fgias. Вопреки названию это не история движений, а одно утверждение: кто владеет животным сегодня и как оно к нему попало. Тип поступления берётся из перемещения — продажа значит «Покупка», поступление извне значит «Импорт», — а если перемещений нет, но хозяйство рождения совпадает с владельцем, это «Рождение». Молчание рождением не считается: у хозяйства, перенёсшего историю из прежней системы, перемещений нет вовсе, и все его покупные коровы уехали бы в реестр рождёнными здесь. Такая строка придерживается, и причина действенная — заполнить место рождения или записать перемещение. |
| Корова: оценка типа телосложения | 14 | 12 | частично | Файл собирается: npm run export:fgias. Пять сводных оценок по шкале 50–100 заведены в той же записи об осмотре, что и линейные признаки: бонитёр ставит и то и другое за один приезд, одной подписью. Пересчитать одно в другое нельзя и не пытались: линейный признак говорит, какое животное («таз приподнят» или «свислый»), и середина шкалы у половины признаков и есть оптимум, а сводная оценка говорит, насколько хорошо, и сотня всегда лучше пятидесяти. Записей пока нет: поля заведены только что. |
| Корова: линейная оценка | 26 | 22 | частично | Файл собирается: npm run export:fgias. Шестнадцать признаков из восемнадцати совпадают, и шкала совпадает тоже — реестр требует целое от одного до девяти, ровно нашу. Организация-оценщик уходит наименованием, ИНН и КПП из связи. Двух признаков реестра книга не меряет: ширины задней части вымени и выраженности скакательного сустава; колонки уходят пустыми, а не заполняются похожим соседом — по экстерьеру выбирают быка. Своих у нас тоже два лишних: ориентация передних ног и гармоничность движения, их реестр не спрашивает. Но в живой базе шесть признаков не заполнены ни разу: угол копыта, постановка задних ног, длина и расположение сосков. |
| Бык: комплексная оценка экстерьера | 13 | 11 | частично | Файл собирается: npm run export:fgias. Та же шкала 50–100, но набор другой: вместо качества вымени — задняя часть туловища. Вымени у быка нет, и оценивают то, что он передаёт дочерям. Номера отёла в шаблоне тоже нет. Бык в коровий файл не попадает и наоборот — иначе его оценка уехала бы чужим набором колонок и была бы принята. Записей пока нет. |
| Экстерьер молодняка (самки) | 11 | 9 | частично | Файл собирается: npm run export:fgias. Три оценки по шкалам 1–3 и 1–4 — третья система измерения, а не третье представление первой: тёлку до первого отёла не меряют ни линейно, ни по сотне, вымени ещё нет, тело не сформировано. Границы стоят при каждом признаке, а не общей парой чисел: у общего вида шкала до трёх, у туловища до четырёх. Записей пока нет. |
| Комплексный класс | 10 | 8 | частично | Файл собирается: npm run export:fgias. Бонитировка стала записью с датой, баллом и организацией-оценщиком — реестр требует её наименование, ИНН и КПП, и берутся они из связи, а не переписываются в каждую строку. Не хватает только базового номера животного. Но записей пока нет ни одной: класс, проставленный в карточке до этой правки, лежит там без даты и в файл не попадает — «элита» без года не говорит, действует ли она сейчас, а подставить сегодняшнюю дату значило бы сказать реестру, что мы оценили полторы тысячи животных сегодня. |
| Наличие спермопродукции | 10 | 8 | частично | Файл собирается: npm run export:fgias. Семенной код, статус наличия, собственник семени — в карточке быка, рядом с оплодотворяющей способностью: про то же семя, только не о качестве, а о наличии. Собственник семени — своё поле, а не владелец быка: бык стоит на племпредприятии, а семя разошлось по дистрибьюторам. «Нет в наличии» уезжает наравне с «есть»: реестр спрашивает статус, и молчание он прочтёт как «семя всё ещё есть». Записей пока нет. |
| Молочность по отёлу | 6 | 4 | частично | Файл собирается: npm run export:fgias. Несмотря на название, молока в шаблоне нет вовсе — это связь отёла с телятами, и нескольких реестр ждёт через точку с запятой в одной ячейке. Телята нужны номерами реестра, а связаны они у четырёх отёлов из двух тысяч: приплод в книге ведут карточками телят, а не привязкой к отёлу. Файл выйдет почти пустым, и отчёт назовёт это прямо. |
| Основные сведения | 46 | 27 | частично | Файл собирается: npm run export:fgias. Это единственный шаблон, где животное названо нашим ключом, а не номером реестра, — с него всё и начинается: хозяйство сдаёт его, получает обратный файл с базовыми номерами, и только после этого оживают лактации и родословная. Заполняются паспорт, кличка, дата рождения, половозрастная группа, порода и её тип, кровность, линия, масть, назначение, способ получения, технологический номер, реквизиты собственника, даты определения группы, породы и назначения, а также место рождения — страна, регион, район и хозяйство. Три территориальных справочника загружаются однажды: npm run sync:fgias-geo. Остаются незаполненными реквизиты продавца и всё импортное — дата, страна-экспортёр, импортные номер и кличка: книга их не ведёт, и заводить пять полей в карточке каждой российской коровы ради десяти импортных дороже, чем польза. |
| Родословная | 15 | 3 | частично | Файл собирается тем же npm run export:fgias, но заполнить его пока нечем. Все пятнадцать колонок — номера реестра: «Идентификатора учётной системы» в этом шаблоне нет вовсе, и предка нельзя назвать ни номером со свидетельства, ни кличкой. То есть родословная сдаётся только после того, как в реестре зарегистрированы и само животное, и все его предки. Плюс прежняя беда: книга уверенно знает отцов и почти не знает матерей, второй ряд целиком не собирается ни у одного животного. |
Что из этого следует
Ежемесячная отчётность закрыта почти целиком
Дойки, осеменения, отёлы и лактации — то, что хозяйство сдаёт чаще всего, — книга отдаёт полностью или почти. Обязательные поля в них заполняются железно: из двадцати двух тысяч строк не выпадает ни одна.
Формат файла готов: каждый из двадцати шаблонов собирается кнопкой в кабинете. Не хватает одного — номера животного в реестре, а он приходит обратным файлом после первой же сдачи «Основных сведений».
Родословная — самое дорогое место
Реестр требует три ряда предков, четырнадцать гнёзд, и все пятнадцать колонок шаблона — номера реестра. Колонки «Идентификатор учётной системы» там нет вовсе: предка нельзя назвать ни номером со свидетельства, ни кличкой.
Значит порядок работ жёсткий — сначала «Основные сведения» на всё стадо вместе с предками, потом обратный файл, и только потом родословная. Плюс прежняя беда: книга уверенно знает отцов и почти не знает матерей, второй ряд целиком не собирается ни у одного животного. Это не наша особенность — так ведут учёт в отрасли.
Кнопка есть у всех, полный файл — не у всех
Здесь были «пять шаблонов, которых книга не ведёт вовсе»: живая масса, три оценки экстерьера, спермопродукция. Теперь под каждый заведены поля, и каждый собирается кнопкой. Но заведённое поле — ещё не заполненное: у шаблонов, где записей пока никто не внёс, файл выйдет почти пустым.
Три оценки экстерьера дались дороже прочих. У реестра там другая система измерения, а не другое поле: линейный признак говорит, какое животное, и середина шкалы у половины признаков и есть оптимум, а сводная оценка говорит, насколько хорошо. Пересчитать одну в другую нельзя, и формула дала бы правдоподобное число, которое ничего не меряет.
Справочники реестра открыты, и это упрощает всё
Двадцать шаблонов заполняются не словами, а ключами: порода — это 1bd6b3f1-648a-…, а не «Голштинская». Пятьдесят один реестр ФГИАС отдаёт открыто, включая 556 пород и 10 580 линий.
Книга сверяет с ними свои справочники и хранит государственный ключ рядом со своим. Побочная польза: сразу видно, каких наших пород в реестре нет и какие называются иначе.
Данные не только уезжают, но и приезжают
Каждое поле, которое книга отдаёт реестру, она принимает загрузкой: ведомость бонитёра на восемнадцать признаков экстерьера, протокол лаборатории с генотипом ISAG, место рождения, склад спермопродукции. Иначе колонка в файле была бы обещанием, которое некому выполнить, — так однажды и вышло, и с тех пор за этим следит отдельная проверка.
Обратный файл реестра книга узнаёт сама: базовые номера из него ложатся к животным по нашему ключу, и повторная загрузка того же файла ничего не задваивает.
Чего эта страница не обещает
Что реестр примет собранное. Все двадцать шаблонов собираются кнопкой в кабинете, и шапка каждого сверена с настоящим файлом реестра построчно — а не переписана на слух. Но ни один такой файл ещё не был принят реестром: сказать, примет ли он его, может только настоящая отправка. До неё это готовность к отправке, а не сданная отчётность.
Что полный файл выйдет у каждого шаблона. Кнопка есть у всех двадцати, но за частью из них записей пока нет ни одной: бонитировки, сводные оценки экстерьера, спермопродукция заведены только что. Такой файл выйдет почти пустым, и отчёт назовёт, чего не хватило, — это честнее отсутствующей кнопки, за которой человеку нечего сделать.
Что книга знает номер вашего животного в реестре. Не знает и знать не может, пока хозяйство не сдало «Основные сведения» и не получило обратный файл. Внутренний ключ книги — не номер ФГИАС; подставить его в эту колонку значило бы завести в реестре второе животное рядом с настоящим. Поэтому строка без номера реестра в файл не попадает, а попадает в отчёт с названием того, чего не хватило.
Что числа вечны. «Заполним» меняется вместе с тем, что хозяйства вносят, а шаблоны — вместе с версиями реестра. Дата прогона стоит рядом с числами намеренно: страница, показывающая прошлогоднее за нынешнее, хуже отсутствующей.
Что реестр примет всё принятое. Здесь сказано, чем книга заполнит колонку. Примет ли реестр записанное — вопрос его собственных проверок, и ответ на него даёт только настоящая отправка.