Как создать программу для документов

Прошло некоторое время с момента запуска, и я думаю пришла пора поделиться опытом создания собственного сервиса для подготовки документов. Возможно он будет полезен начинающим программистам о том, как не стоит делать и на чем можно сэкономить время.

Постановка проблемы

Однажды ко мне обратился друг со следующим вопросом: есть накопленная экспертиза в виде базы юридических документов, хотелось бы эту экспертизу монетезировать в виде сервиса. На что было предложено встретиться через некоторое время и обсудить техническое задание.

Анализ спроса

На сервисе подбора слов от Яндекса были найдены обнадеживающие цифры. Люди постояно ищут образцы документов.

Анализ конкурентов

В качестве конкурентов виделся только Freshdoc. Он позволяет после заполнения анкеты за небольшую сумму скачивать документы. Как преимущество можно было предоставить возможность редактировать текст, т.к основными пользователями сервиса должны были стать опытные юристы. Они отвечали бы за дальнейшее наполнение и актуализацию базы документов.

Python как сделать красивую программу под ПК за 10 минут?

А также убрать необходимость вводить однотипные параметры несколько раз: фио, адреса. Второй категорией пользователей должны были стать обычные пользователи и менее опытные юристы, которые бы скачивали готовые документы, созданные по готовым шаблонам.

Техническое задание

Организовывать шаблоны документов по разделам/папкам в виде дерева. Дополнительно необходимо автоматически предзаполнять поля документов из шаблонов, используя значения параметров в карточках дела.

Минимально значимый продукт

На коленке была быстро написана первая версия приложения. Технически это был монолит на .net core версии 2.1. На фронтенде выбор пал на VueJs с Vuetify как более простого, если сравнивать с React, и популярного на тот момент решения. Для импорта и конвертации документов использовался сервис docsbox от dveselov.

Docsbox написан на питоне и имеет удобное HTTP API и при необходимости мог масштабироваться, т.к в нем есть очередь на Redis и воркер процессы для вызова API LibreOffice (pyuno). На фронтенде использовался rich text editor: tinymce с плагином templates. В качестве хостинга выбор пал на Digital Ocean с dokku. Был поднят CI на Gitlab и Nexus репозиторий для хранения пакетов и библиотек.

внешний вид первой версии

Впечатления и недостатки первой версии

Была даже выпущена отдельная версия с редактором .tex на библиотеке pandoc по аналогии с сервисом Overleaf. Но использовать .tex человеку далекому от программирования не представлялась возможным.

пример генерации превью документа .tex

Ненужные улучшения

Монолит был преобразован в микросервисы. От MVC части отделился API проект, добавлен отдельный процесс Worker для обработки событий из API. Здеь очень помогла библиотека Marten и ее поддержка стримов событий.

Очень много времени было потрачено на настройку SSR и webpack. Изначально использовалилсь штатные node services для пререндерера от Microsoft, но их вскоре задепрекейтили. Для чего был написан свой велосипед на ViewComponent и KoaJs

public class PrerendererViewComponent : ViewComponent < private readonly IConfiguration _configuration; private readonly IHttpClientFactory _factory; private readonly ILogger_logger; public PrerendererViewComponent(IConfiguration configuration, IHttpClientFactory factory, ILogger logger) < _configuration = configuration; _factory = factory; _logger = logger; >public async Task InvokeAsync( Dictionary claims) < var upstreamHost = new Uri(_configuration[«NODE:PRERENDERER:URL»]); var uri = new Uri(UriHelper.BuildAbsolute( upstreamHost.Scheme, HostString.FromUriComponent(upstreamHost), PathString.FromUriComponent(upstreamHost), HttpContext.Request.Path, HttpContext.Request.QueryString)); var accessToken = await HttpContext.GetTokenAsync(«access_token»); var prerenderedOptions = JsonSerializer.SerializeToUtf8Bytes(new < claims, accessToken >); _logger.LogDebug(«prerendering: «, Encoding.UTF8.GetString(prerenderedOptions)); var streamContent = new StreamContent(new MemoryStream(prerenderedOptions)); streamContent.Headers.ContentType = MediaTypeHeaderValue.Parse(«application/json»); var request = HttpContext.Request.CreatePrerendererHttpRequest( streamContent, _logger); request.Headers.Host = uri.Authority; request.RequestUri = uri; var prerenderedResponse = await _factory.CreateClient().SendAsync(request); if (prerenderedResponse.StatusCode == HttpStatusCode.Unauthorized) < throw new UnauthorizedException(); >if (prerenderedResponse.StatusCode == HttpStatusCode.Forbidden) < throw new ForbiddenException(); >prerenderedResponse.EnsureSuccessStatusCode(); var htmlString = await prerenderedResponse.Content.ReadAsStringAsync(); return new HtmlContentViewComponentResult(new HtmlString(htmlString)); >

и тогда из Index.cshtml вызывается следующий код

Также ушло время на прикручивание и настройку OAuth 2 с OpenID Connect. Был взят стандартный IdentityServer 4 с хорошим дополнением в виде админки Skoruba Identity Server.

В IdentityServer были добавлены тенанты на уровне единой базы. Далее идентификатор тенанта использовался для запросов данных в ORM Marten.

Также был применен подход backend for frontend. Это позволило уйти от CORS запросов для API с одной стороны, с другой стороны реализовать автоматическое продление токена.

С помощью велосипеда на SSR можно было бы добавлять новые frontend фреймворки, разделяя их на уровне ViewComponent. Хоть эта идея и казалась очень интересной, но такой необходимости так и не возникло.

Принципиально другое решение. Версия 2

Как-то вечером я наткнулся на статью про LibreOffice Online. В нем для рендеринга использовался canvas, что решало мою проблему с отображением документов, но весь код для подстановки параметров в tinymce пришлось выкинуть, а вместо них писать макросы на питоне

def InsertVariable(variable_name, variable_value): # get the doc from the scripting context which is made available to all scripts desktop = XSCRIPTCONTEXT.getDesktop() model = desktop.getCurrentComponent() # check whether there’s already an opened document. Otherwise, create a new one if not hasattr(model, «Text»): model = desktop.loadComponentFromURL( «private:factory/swriter», «_blank», 0, ()) # get the XText interface xModel = XSCRIPTCONTEXT.getDocument() field = build_variable(model, variable_name, variable_value) # the writer controller impl supports the css.view.XSelectionSupplier interface xSelectionSupplier = xModel.getCurrentController() # see section 7.5.1 of developers’ guide xIndexAccess = xSelectionSupplier.getSelection() count = xIndexAccess.getCount() if count >= 1: # ie we have a selection i = 0 while i < count: xTextRange = xIndexAccess.getByIndex(i) theString = xTextRange.getString() xText = xTextRange.getText() xWordCursor = xText.createTextCursorByRange(xTextRange) xWordCursor.setPropertyValue(«CharStyleName», variables_style_name) xText.insertTextContent(xWordCursor, field, True) xSelectionSupplier.select(xTextRange) i += 1 return None

Читайте также:
Сетевые операционные системы это комплекс программ для одновременной работы

внешний вид второй версии

Недостатки версии 2

Почти сразу я столкнулся с ограничением LibreOffice Online на 10 документов и пришлось собирать его из исходников. Также была исправлена проблема с терминированием TLS. Сервис просто не запускался. После того, как были изменены конфиги и поправлен код проверки инициализации TLS сервис наконец ожил. Для WOPI сервера было решено использовать открытый проект на .net.

Для хранения файлов s3-совместимый продукт — Minio. Так как сервис предполагал хранение персональных данных, то у заказчика всегда должна была быть возможность развертывания локально. Было понятно к этому времени, что любовь LibreOffice Online к потреблению памяти на открытый документ

убивает идею хостинга сервиса на одном сервере. Нужно было переходить на более отказоустойчивую архитектуру. Как стандарт выбор пал на Kubernetes, а так как денег у меня было мало, то его дистрибутив k3s от Rancher.

Kubernetes на Hetzner

Целью было создать демо-кластер для разработки стоимостью до 50 euro в месяц.

Был найден удобный terraform скрипт и написаны helm-чарты.

Для мониторинга сначала прикрутил New Relic c pixie, но из-за высокой стоимости New Relic (на конец месяца из-за одних только метрик насчиталось 400 usd) и повышенных требований на агентов pixie (2 GB RAM на агент) пришлось заменить на cilium.

Для cilium в скриптах понадобилось лишь выключить flannel.

#!/bin/bash export DEBIAN_FRONTEND=noninteractive apt-get update apt-get upgrade -y -o Dpkg::Options::=»—force-confdef» -o Dpkg::Options::=»—force-confold» —force-yes # Installing and enabling fail2ban apt-get install -y fail2ban systemctl start fail2ban systemctl enable fail2ban INTERNALIP=`ip -br a | grep ens10 | awk ‘< print $3 >’ | awk -F/ »` # Initializing Worker curl -sfL https://get.k3s.io | K3S_TOKEN=$ sh -s — server —disable-network-policy —flannel-backend=none —no-flannel —cluster-init —token=$ —disable=traefik,local-storage,servicelb —kubelet-arg=»cloud-provider=external» —disable-cloud-controller —tls-san $ -i $INTERNALIP —node-external-ip $INTERNALIP sudo mount bpffs -t bpf /sys/fs/bpf

архитектура приняла свой финальный вид

Лендинг и уроки

Чтобы не наполнять базу пользователей ботами регистрацию в IdentityServer закрыл. Для запроса доступов в систему поднял простейший статический сайт на eleventy с шаблоном от google. До добавления аналитики сайт выдавал 100 по оценкам page speed test.

После добавления сервисов аналитики сайт деградировал до приемлимых 80.

Вместо документации записал на youtube обучащие ролики с субтитрами.

Запуск и аналитика в Яндекс.Бизнесе

Перед запуском я написал в несколько популярных юридических форумов. Ответ получил только в одном с предупреждением о рекламе. Самое ценное, что было в ответе, следующее:

Забавно. На сколько мне известно, люди обычно ищут шаблоны, а не программы для их составления.

результаты работы рекламы за неделю

Выводы

Разработку нужно было начинать с оценки реальных заявок на поднятый лендинг, а не надеяться на статистику поисковых запросов.

Как ни печально, все технические решения и архитектура не будут играть никакой роли если проект никому не нужен.

  • шаблонизатор
  • libreoffice

Источник: habr.com

Как создать программу для документов

Программа Doc.filler

Заполнение шаблонов
Программа Doc.filler (beta)

Каждому хоть раз в жизни приходилось заполнять договоры, шаблоны, бланки и прочие документы. Конечно, если это разовая операция, то можно потратить время и кропотливо заполнить нужную информацию. Но когда эта операция ежедневная, то хочется автоматизировать эту рутинную работу. Ведь каждый день заполняются одни и те же поля, постоянно допускаются ошибки, часть информации указывается по несколько раз в одном документе. Наш новый продукт нацелен как раз на решение этих задач.

Возможности программы

Программа представляет собой расширение функционала в Excel. После установки на ленте меню появится отдельная вкладка для автоматизации заполнения документов. Почему Excel? Все просто — это самый привычный формат для пользователя по ведению реестра и заполнению различных форм. Не нужно обучаться новому функционалу и осваивать сложные программы, все необходимое уже есть.

Вы продолжаете как обычно заполнять форму Excel но плюс к этому получаете возможность автоматически генерировать документы. Вот так выглядит лента меню в программе:

Лента меню

Пример создания форм заполнения

Создавайте простые формы для заполнения прямо в Excel. Просто укажите программе какие ячейки (поля) вы хотите вставлять в отчеты. Вы также можете создавать сложные формы для заполнения документов с различными условиями. Например, договоры, где различные формулировки должны вставляться при определенных условиях. Подробнее про создание форм в Excel.

Вставка функций

Часто при заполнении мы указываем числа прописью или склоняем фамилии или должности по падежам. Теперь вы сможете вставить функцию в Excel и она автоматически сделает это за вас. Вам потребуется один раз указать ФИО, а программа сама просклоняет ее и подготовит к вставке в документ. Аналогично с должностями или другими фразами. Программа склоняет фразы по всем падежам русского языка.

Необходимо вставить сумму, количество или дни прописью — тоже не проблема в программе имеются функции для записи прописью любых данных.

Читайте также:
Как конвертировать видео в программе видеомонтаж

Заполнение шаблона

После того, как форма для заполнения документа готова необходимо создать шаблон документа. В шаблоне нужно расставить так называемые метки, в которые программа будет вставлять данные. Например, , , и так далее. Для простоты мы подготовили примеры готовых документов. Вы можете создавать свои метки в любых количествах.

В этой статье можно посмотреть процесс создания шаблона документа.

После того как шаблон готов, данные в него вставляются из формы Excel всего одной кнопкой.

Заполнение нескольких документов

Как правило, единовременно необходимо заполнить сразу несколько документов. Например договор и счет на аванс, акт выполненных работ и счет-фактуру и так далее. В программе предусмотрена возможность заполнения сразу нескольких документов.

Создание и ведение реестра документов

Помимо заполнения документов в программе можно вести реестр создаваемых документов. Данные будут автоматически переноситься в реестр и вы сможете к ним вернуться спустя время. Вы сможете повторно создавать документы или исправлять в них данные нажав пару кнопок.

Реестр документов можно настраивать по своему усмотрению добавляя в него формулы или дополнительные данные, а можно и наоборот хранить в нем только выжимку информации.

В дальнейшем у нас в панах добавить функционал документооборота с возможностью создавать напоминания и визуальным отслеживанием статусов.

Источник: micro-solution.ru

Как сделать самому электронную цифровую подпись?

Электронная подпись — как сделать самому данный аналог собственноручной подписи, зашифрованный при помощи криптографического преобразования информации? Ответ на этот вопрос рассмотрим в статье далее.

  • Как создать свою подпись и печать в электронном виде на компьютере бесплатно
  • Создание ЭЦП в Word
  • Программа Карма для создания ЭЦП без MS Office
  • Как создать ЭЦП и зарегистрировать сертификат онлайн
  • Регистрация сертификата ЭЦП
  • Процесс подписания документа в электронном виде
  • Итоги

Как создать свою подпись и печать в электронном виде на компьютере бесплатно

В век информационных технологий на смену бумажным документам приходят электронные носители информации. Для придания им юридической значимости их также необходимо заверять подписью и печатью. В связи с чем у многих пользователей возникает вопрос, как сделать электронную печать и подпись самому. Чтобы ответить на него, необходимо выяснить, что же такое электронно-цифровая подпись (ЭЦП)?

ЭЦП — информация о подписанте, присоединенная к другой информации (подписываемому документу).

Выделяют два вида ЭЦП: простую и усиленную. Усиленная, в свою очередь, делится на квалифицированную и неквалифицированную.

Простая ЭЦП (ПЭП) — подпись, состоящая из набора символов и паролей. Ярким примером ПЭП является использование банковской карты. При ее оформлении регистрируется логин и пароль, а при совершении платежных действий абоненту на зарегистрированный в банковской системе телефонный номер приходит код, который следует ввести для подтверждения платежа.

Неквалифицированная ЭП — сведения об абоненте, зашифрованные с использованием криптографического преобразователя информации, которые позволяют отследить подписанта, а также все вносимые в документ изменения после его подписи.

Квалифицированная ЭП обладает теми же свойствами, что и неквалифицированная подпись, но обязательным ее атрибутом является сертификат ключа проверки ЭЦП.

Простая и неквалифицированная ЭП соответствуют визе на бумажном документе, квалифицированная — это электронная печать и подпись.

Об основных отличиях усиленной подписи читайте в материале «Чем отличаются два основных типа электронных подписей».

Сделать подпись на компьютере и заверить ею документ можно несколькими способами. Какими именно, рассмотрим далее.

Создание ЭЦП в Word

Электронная подпись бесплатно создается в документах пакета MS Office. Рассмотрим пример с файлом Word. Чтобы заверить документ, созданный с использованием софта Word, необходимо осуществить следующие действия:

  1. Ставим курсор в то место, куда нужно добавить подпись.
  2. Переходим во вкладку «Вставка» и нажимаем кнопку «Строка подписи Microsoft Office».

Строка подписи Microsoft Office

  1. В открывшемся окне заполняем необходимые поля.

Как сделать самому электронную цифровую подпись?

  1. Подпись готова и имеет следующий вид:

Как сделать самому электронную цифровую подпись?

Добавить подпись можно и из меню «Файл». Для этого открываем документ, нажимаем кнопку «Файл», «Сведения», «Защита документа» и выбираем функцию «Добавить цифровую подпись».

Далее заполняем форму так же, как показано на рисунке 2. Однако подпись, сгенерированную вышеописанным способом, сложно проверить на подлинность. Поэтому многие пользователи выбирают относительно недорогой софт «Карма».

Программа Карма для создания ЭЦП без MS Office

Программное обеспечение «Карма» — продукт криптографического обеспечения, разработанный российскими программистами, который может использоваться в различных системах любого уровня:

  • для юридически значимого электронного документооборота (ЭДО);
  • для работы в системе «1С»;
  • для сообщений, отправляемых по электронной почте;
  • для управленческого документооборота;
  • для подписания файлов, открываемых проводником Windows, и т. д.

Особенностью системы является возможность добавления в документ графического изображения подписи и печати (факсимиле). При использовании данной функции бумажная копия практически не отличается от подлинника.

Кроме того, отправитель может прикрепить к подписываемому документу стикер, записав в нем сообщения, комментарии или поручения, предназначенные для получателя документа. При этом софт имеет интуитивно-понятный интерфейс, не требующий специальных знаний от обычного пользователя.

Однако подпись, сгенерированная программой «Карма», не подходит для отправки отчетности в ФНС или для работы на портале «Госуслуги».

Как создать ЭЦП и зарегистрировать сертификат онлайн

Чтобы сделать электронную подпись онлайн для ЭДО с ИФНС, физлицу необходимо зарегистрироваться в личном кабинете налогоплательщика (ЛКН). Для получения сертификата в ЛКН следует перейти в раздел «Профиль» и кликнуть на кнопку «Получение сертификата ключа проверки электронной подписи». Данный ключ действителен в течение 1 года, по истечении которого сертификат запрашивается повторно. В ЛКН генерируется электронная подпись онлайн бесплатно.

Читайте также:
Правила произвольной программы у женщин в фигурном катании

Данная функция доступна только физлицам, к которым не относятся ИП, частные нотариусы и другое самозанятое население. Кроме того, ЭЦП, полученная физлицом в ЛКН для отправки отчетности в ФНС, не подходит для работы на портале «Госуслуги». Вместе с тем при наличии ЭЦП для Госуслуг, оформленной на физлицо, можно полноценно авторизоваться в ЛК налогоплательщика на сайте ФНС.

Электронная подпись может быть использована для организации эффективного кадрового документооборота. Узнайте больше о перспективах применения ЭЦП в соответствующем направлении из специальной публикации, размещенной в системе «КонсультантПлюс». Получите пробный доступ к ней бесплатно.

Для организации ЭДО с фискальными органами и фондами, а также для работы на площадках, предназначенных для участия в тендерах по закону от 18.07.2011 № 223-ФЗ, абоненты могут получить сертификат ключа проверки ЭЦП только в аккредитованном удостоверяющем центре (УЦ).

ВАЖНО! С 1 июля 2021 года действует новый порядок оформления ЭЦП для физлиц и хозяйствующих субъектов. Появилась возможность получить полноценную электронную подпись в ФНС бесплатно.

Регистрация сертификата ЭЦП

Для генерации ключа абоненту необходимо обратиться в ближайший УЦ с пакетом документов

  1. Физлицу:
  • заявление на получение сертификата;
  • копии паспорта, ИНН, СНИЛС физлица — владельца сертификата.
  1. Юрлицу:
  • документы, указанные в п. 1;
  • выписку из ЕГРЮЛ (ЕГРИП);
  • приказ о назначении руководителя или иной документ, позволяющий лицу действовать от имени субъекта;
  • иные документы по требованию УЦ.

Сертификат, как правило, записывается на съемный носитель или выдается на бумаге.

Подробные алгоритмы действий по получению юрлицами разных видов ЭП можно найти в «КонсультантПлюс». Вы прямо сейчас можете перейти к порядку действий по получению простой электронной или усиленной квалифицированной электронной подписи, получив бесплатный доступ к К+.

Процесс подписания документа в электронном виде

Процесс подписания документа простой ЭЦП не требует особых знаний. Для этого следует ввести пароль и подтвердить его.

Подписание квалифицированной подписью имеет свои особенности. Перед подписанием документа необходимо установить софт «КриптоПро» или иной криптографический преобразователь информации и сам сертификат проверки ключа ЭЦП.

Алгоритм установки пошагово рассмотрен в материале «Как установить сертификат ЭЦП на компьютер?».

Далее следует завизировать необходимый документ. Алгоритмы визирования разнятся в зависимости от вида файла, типа редактора или программного обеспечения. Например, для отправки отчетности в ФНС или в фонды файл загружается в специальную программу, далее выбирается соответствующий сертификат и нажимается кнопка «Подписать файл».

Итоги

Чтобы придать документу юридическую значимость, необходима электронная цифровая подпись. Как ее сделать самому бесплатно, вы теперь знаете. Способ получения ЭЦП зависит от вида подписи, абонента и нужд, для которых она оформляется.

Советуем прочитать
Последнее с форума
Ваши вопросы
2 июня 2022 12:33

Нужна эл. подпись для отправки заявлений и ответов в МВД, Прокуратуру, Суд. но для частного лица и не предпринимателя, подтвержденная на ГОСУСЛУГАХ есть.

СтудАкадемСовещание
22 января 2022 17:37

Вообще, некоторые формы спрашивают файлы .sig and .p7s, вопрос в том, где создать подпись, чтобы формально, для алгоритма распознавания наличия или отсутствия, было сацесс, типа наличие.

Так что вопрос где создать файлы данных форматов, для создания дополнительного файла к файлу, например pdf, doc, docx, отсоединенного свойства, или присоединенного, или и то и то.

А то переименовать любой файл, типа графической геральдики ордена, или логотипа фирмы, или подписи в иллюстрации, — может не прокатит.

Например, онлайн создание файла sig and p7s, для прикпрепления файлов данных форматов к файлам остальных форматов, а то и может быть к данного же формата, делая слой защищенности данных, еще пароли поставив на архивы, двухфакторную идентификацию, подтверждение действия в офисе фнс, мфц итп.

С одной стороны может быть продвижение продаж крипто электронного кластера бизнеса в стране россиюшке, со второй, можно же сделать не безвыходно а с варьированием возможностей, ибо некоторые задачи можно подтверждать очно в офисе, приравнивая к эцп, даже для отдельных бумаг, присоединяя к электронным бумагам отдельно верифицированную бумагу, или список бумаг для зачем нибудь.

Например, в фнс или мфц, единственно подтверждая, что очно гражданин пришел, приехал, прилетел для подписи эцп, так же как мог сам, не взирая на бумагу, — отличием того, что пришел в мфц или фнс очно, подтверждая паспортом, —

и так меньше действий, если без токена и ноутбука, — а если прокторинг и приложения для эцп на мобильные платформы, — то вариативность в айти для граждан рф будет на уровне не единственной возможности типа вынужденности, и форма деятелности перейдет от императивной к диспозитивной, и тогда о государственности в сети, в айти, с гаджетами, будет мнение диспозитивности, — чем могут пользоваться сторонние выгодоприобретатели, и вероятно смекнули.

Например, из кабинета в фнс физлица, скачать на время sig and p7s, регулируя мониторингом список отосланного документов, и поддерживая на тех же госуслугах актуальность действия эцп для документов, который для сверения на предмет актуальности сохранения подписи в данных бумагах.

В том числе по свойству защищенности данных, и сами ли граждане данные документы составляли и отправляли, — а то ведь в ланах бывает разное, итп там выловили в егрюл имена и давайте подписывать, — такая народная обзора.

Студенческая Академичесаая Совета

Источник: nalog-nalog.ru

Рейтинг
( Пока оценок нет )
Загрузка ...
EFT-Soft.ru