====== Система автоматизации сбора статистической информации ====== **Проблема** - организовать сбор статистической информации с подчиненных организаций. Информационные потоки в таких системах организаций включают два направления: - Вниз - приказы о сборе информации, шаблон документа-отчета, инструкция по сбору и подготовке результата. - Вверх - отчетный документ на основе шаблона и собранных данных. Имеет смысл обобщить систему организаций и представить ее в виде иерархии. В каждом узле с ветвлением (нелистовом) происходит копирование информации, передаваемой вниз, и агрегация информации, передаваемой вверх. В листовых вершинах осуществляется только выполнение части инструкции - как получать заполняемую информацию и куда ее вставлять. **Объект автоматизации** - деятельность организаций, организованной в иерархию, направленная на сбор статистической информации. Шаблон документа готовится в Word или Excel. Инструкция указывает какие элементы шаблона подлежат копированию и реорганизации, например заполнение скопированной ячейки собранной информацией. Инструкция изначально - это текстовое описание вышеуказанных процедур. В принципе при реализации можно придумать способ формализации инструкции на техническом английском языке. Разрабатываемая программная система должна выполнять следующие действия: - Проводить анализ шаблона документа и извлекать оттуда информацию о структуре собираемых данных. - Сгенерировать таблицу для хранения данных. Можно предусмотреть повторное использование ранее созданных таблиц, если сбор информации повторяется. - Генерировать формы сбора информации для организаций, находящихся в листовых вершинах. - Организовывать сбор информации: - Из базы данных подшефных организаций извлекаются контактные данные ответственных лиц (в общем случае зависит от типа собираемой задачи), - Форма и инструкция по ее заполнению рассылается ответственным лицам (ссылка на **персонализированную** (идентифицирующую конкретную организацию) форму на почту, телеграм, вацап, телеграм и т.п.). - Ответственное лицо выполняет инструкцию и заполняет форму. В форме надо **предусмотреть возможность частично сохранять информацию**, т.е. дать возможность заполнять форму поэтапно, если процедура сбора информации во времени распределена. Самый простой способ - две кнопки: "Сохранить", "Подписать". - Ответственное лицо подписывает форму, система сохраняет результат в базе данных. - Генерировать отчетный документ. Имеет смысл предусмотреть возможность автоматизации корректировки формул шаблона для учета обновленной структуры документа. ====== Задел ====== Пробовал реализовать эту систему для документов WORD: https://github.com/eugeneai/icc.quest . Здесь в docx-шаблоне ячейки представляются при помощи структур :<название поля>:<тип> + можно добавить еще :disabled, если ячейку править нельзя. Пример в проекте input/query1.docx . Потом ушел в дебри модификации Документа Excel: https://github.com/eugeneai/if2xlsx . Идея - не интерпретировать и не загружать данные excel, а вносить модификации копированием строки или столбца переименовывая ячейки. Что копировать должно определяться структурой таблицы. Копируемые элементы (строки или столбцы) определяются при помощи "переменных диапазонов". До копирования дело так и не дошло.