<!DOCTYPE article PUBLIC "-//NLM//DTD JATS (Z39.96) Journal Archiving and Interchange DTD v1.0 20120330//EN" "JATS-archivearticle1.dtd">
<article xmlns:xlink="http://www.w3.org/1999/xlink">
  <front>
    <journal-meta />
    <article-meta>
      <title-group>
        <article-title>An approach for processing and document flow automation for Microsoft Word and LibreOfice Writer file formats</article-title>
      </title-group>
      <contrib-group>
        <contrib contrib-type="author">
          <string-name>Pavlo V. Zahorodko</string-name>
          <xref ref-type="aff" rid="aff0">0</xref>
        </contrib>
        <contrib contrib-type="author">
          <string-name>Pavlo V. Merzlykin</string-name>
          <xref ref-type="aff" rid="aff0">0</xref>
        </contrib>
        <aff id="aff0">
          <label>0</label>
          <institution>Kryvyi Rih State Pedagogical University</institution>
          ,
          <addr-line>54 Gagarin Ave., Kryvyi Rih, 50086</addr-line>
          ,
          <country country="UA">Ukraine</country>
        </aff>
      </contrib-group>
      <fpage>66</fpage>
      <lpage>82</lpage>
      <abstract>
        <p>The rapid growth of modern information technologies influences all aspects of human life. Companies all over the world are adopting new approaches to solve business problems, such as diverse automation, by using information technologies. Automation substitutes routine human work and noticeably increases eficiency. This research examines diferent approaches to document automation. Basic concepts of document processing using XML and existing solutions have been reviewed and a library based on LibreOfice UNO API has been designed and implemented. The library contains diferent helpers, wrappers, and processing tools to create an additional layer of abstraction. Moreover, the library is aimed at simplifying processing, working, and converting documents, which might considerably optimize a process of creating document reports generators.</p>
      </abstract>
      <kwd-group>
        <kwd>eol&gt;document processing</kwd>
        <kwd>automation</kwd>
        <kwd>library</kwd>
        <kwd>OpenDocument</kwd>
        <kwd>Ofice Open XML</kwd>
      </kwd-group>
    </article-meta>
  </front>
  <body>
    <sec id="sec-1">
      <title>1. Introduction</title>
      <p>
        A significant amount of organizations, companies, and educational institutions deal frequently
with diferent document-related processes. Eventually, the growth of a company causes a demand
on optimizing processes. Documentation generators are one of the earliest and substantial
stages of business processes automation [
        <xref ref-type="bibr" rid="ref1">1</xref>
        ].
      </p>
      <p>
        According to McKinsey Global Institute [
        <xref ref-type="bibr" rid="ref2">2</xref>
        ], which is a part of the worldwide
managementconsulting firm McKinsey&amp;Company, from 9 to 26 percent of working hours could be saved by
automation. Additionally, with a midpoint of 15 percent, about 30 percent of working places
could be displaced by 2030, which is equivalent to 400 million full-time working days. In
addition, the research admits that about 50 percent of working time, which is spent on diferent
types of work, might be optimized with automation.
      </p>
      <p>
        Hospitals, as well as other organizations, work with an immense amount of documents.
According to Steve Wilson’s paper on Electronic Health Reporter website [
        <xref ref-type="bibr" rid="ref3">3</xref>
        ], every day doctors
have to deal with a large amount of diferent documents, starting from physician agreements
and credential documents to time sheets and other organizational forms. Undoubtedly, it is hard
to handle or search through such a number of paper documents in comparison with digital ones.
Another, surely important, reason to use automation is working with patients. Digital forms
help to avoid human interaction, which has become crucial due to the COVID-19 pandemic. In
addition, digital forms might help simplify the whole process of requesting prescriptions.
      </p>
      <p>Whilst the described problem seems completely explored, it is not exactly so. Many existing
implementations are proprietary, that is to say you could not obtain their source code easily.
This leads to the fact that it is hardly possible to launch software locally for your company or
set it up preferably, for instance, choose a web-server or database. Moreover, the assortment of
the supported documents is usually meager and often includes only Microsoft Ofice formats.
Another hot topic is privacy. If processed documents contain users’ sensitive or corporate data,
you could not trust proprietary cloud services you are not able to control. Moreover, it could
be simply considered illegal in some countries to transfer personal data to 3rd parties servers.
Consequently, it is critical for document automation systems to allow users to have control over
their data. The aforesaid leads us to the reasons why we decided to develop our own document
management system as an attempt to solve the mentioned problems.</p>
    </sec>
    <sec id="sec-2">
      <title>2. Overview</title>
      <p>
        A review of scientific literature [
        <xref ref-type="bibr" rid="ref4 ref5 ref6 ref7">4, 5, 6, 7</xref>
        ] on the topic of document flow automation showed
that the topic is relevant. But due to the lack of access to the source code, we will examine only
those implementations that are open or provide, at least partially, free trial access to the service.
      </p>
      <p>Let’s take a look at the proprietary document processing systems.</p>
      <p>
        Hypatos [
        <xref ref-type="bibr" rid="ref8 ref9">8, 9</xref>
        ] is a workflow automation system which uses artificial intelligence, namely
Cognitive Process Automation (CPA) technology. It is a fairly high-quality and professional
tool. It supports AWS and cloud storage. Both API and free version are available.
      </p>
      <p>
        DocuPhase [
        <xref ref-type="bibr" rid="ref10">10</xref>
        ] is a system for automating business processes. It supports web forms that
allow one to generate ready-made PDFs. It also features a document management system with
user-friendly interface for processing and managing files shared among diferent departments.
      </p>
      <p>
        Docupilot [
        <xref ref-type="bibr" rid="ref11">11</xref>
        ] is an automation and documentation generation system. It supports working
with cloud services such as Zapier, DropBox, Docusign. It has a good templating engine with
conditional statements, tables and loops support. It could handle docx, pptx, pdf or a custom,
created with a WYSIWYG editor, template. It also supports email messages sending. There is
documentation and examples of using the internal API.
      </p>
      <p>
        Contactbook [
        <xref ref-type="bibr" rid="ref12">12</xref>
        ] is a platform for organizing, storing and processing documents. The service
supports docx and pdf files. An integration with 3000+ programs has been implemented. A
public API as available as well.
      </p>
      <p>Now let’s take a look at the open-source applications.</p>
      <p>
        One of these is Docassemble [
        <xref ref-type="bibr" rid="ref13">13</xref>
        ], an open-source system for working with web forms and
documents. The system is implemented with Python, YAML and Markdown. It is focused on
“Interview” questions. That is to say, one web form is divided into several questions and at the
end you can get a result. It supports YAML code in configuration files. With Markdown, one
could dynamically create PDF, RTF, and DOCX files.
      </p>
      <p>
        M2Doc [
        <xref ref-type="bibr" rid="ref14">14</xref>
        ] is an open-source plug-in for automating MS Word files processing. There
are add-ons for MS Word and Eclipse IDE. The generator takes input data from a generator
configuration .genconf. One is able to work with the original Java API.
      </p>
      <p>Summarizing this section, the reviewed systems are competitive and powerful tools. But,
they have the following disadvantages:
1. Static patterns. Most tools use only one proposed pattern for fields filling. It means that
only system prefix and sufix ought be used in templates. For instance, with the prefix {{
and the sufix }}, field definition would look like {{field}}.
2. Solely Microsoft Word formats support. Most mentioned systems don’t support
LibreOfifce file format or other similar formats. However Microsoft products usage is not always
possible or acceptable by some companies.
3. No internal converters. Sometimes it is needed to convert a document into diferent
format than docx or pdf.</p>
      <p>Thus, it was decided to design our own system for documents processing that would satisfy
our needs.</p>
    </sec>
    <sec id="sec-3">
      <title>3. Approaches in document processing</title>
      <p>Document management system needs a core document processing tool. There are a few diferent
approaches in Microsoft Ofice and LibreOfice documents processing. We will overview the
most popular: XML processing and frameworks.</p>
      <p>Microsoft Ofice and LibreOfice documents are basically archives with all content inside.
Most of the files inside are XML files. They represent document’s structures, styles, metadata,
settings, and other configurations.</p>
      <p>Microsoft Ofice documents (doc and docx) have their own XML-based file format developed
by Microsoft, which is called Ofice Open XML (OOXML). Its structure is shown on the figure 1.</p>
      <p>The actual content of the document is stored in the word folder in the document.xml file.</p>
      <p>LibreOfice documents also have their own XML-based format called Open Document Format
(ODF) also known as OpenDocument [15]. ODF is developed by The Document Foundation.
The structure of the document is shown on the figure 2.</p>
      <p>In this case, the actual content of the document is stored in the content.xml file. Depicted
structures may vary depending on the complexity of a document. In comparison to docx
document, which has three folders files hierarchy, an odt document has a similar structure but
contains additional folders such as configurations.</p>
      <p>In the case of document generating on the basis of a template with custom keywords, the
keywords might be split by ofice software into diferent tags. Therefore, this approach needs
additional validation and handling of the keywords parts to merge them together.</p>
      <p>To inquire the issue let us look at a simple document that contains the following text:
1
${KeyWord}${KeyWord2} and ${KeyWord3}
${KeyWord4} some text.</p>
      <p>${ and } statements indicate the beginning and the ending of a keyword. All the paragraphs
have the same style family, namely Calibri 11 pt. However, things appear to be more surprising
in the content file. Figure 3 shows the XML representation of the first keyword.</p>
      <p>Microsoft Word splits text into diferent w:r elements called runs. Inside each run, we can
see a w:r tag that represents a text element. So one keyword in this example has 3 diferent
runs with diferent parts of the keyword. The second keyword is shown on figure 4.</p>
      <p>In this case, we have four diferent runs. The number of runs depends on the length of the
keyword and diferent special symbols. The same issue may be found in LibreOfice documents.</p>
      <p>For the LibreOfice document, we will use the same font family and font size. Right after
document creation, we get the solid not split paragraphs. The XML representation of the text is
shown on the figure 5.</p>
      <p>A problem may appear after editing the document with LibreOfice editor. Let’s change the
KeyWord2 keyword to KeyWord_New. The result of this replacement is depicted on the figure 6.</p>
      <p>As a result of a slight document editing, the XML changed significantly. New elements were
added and the keyword split into 2 parts, even though the keyword still has the same style. At
ifrst glance, it may seem that the problem is in using the underscore character. However, to
dispel this assumption, we will return the original value to the keyword. The result is shown
on the figure 7.</p>
      <p>Even after original value recovery, we still have the XML code which is diferent from the
initial one. Moreover, two extra text:span elements appeared. In the case of the LibreOfice
documents, text:span elements may be added as a consequence of updating or text changing
within the document.</p>
      <p>Another approach is using LibreOfice UNO API. LibreOfice provides Universal Network
Objects, which allows using this API in diferent programming languages, such as C++, Java,
Python, Perl, C#, JavaScript, and many others. This API supports working with diferent formats,
originally LibreOfice applications, but partly including support of Microsoft Ofice applications.
As a matter of fact, LibreOfice UNO API is almost completely compatible with OpenOfice.</p>
      <p>LibreOfice has a Frame-Controller-Model paradigm (FCM) that is similar to the
Model-ViewController paradigm (MVC) [16]. The model contains the document data and methods to change
them. The controller views the status of the documents and manipulates screen presentations.
The frame contains the controller and knows which windows are being used. This approach
allows interacting easily with the application’s GUI and its functionality.</p>
      <p>LibreOfice UNO API is extremely functional and useful in document manipulation. However,
API documentation is bulky and might be time-consuming to read [17]. Due to this fact, we
decided to develop a library as a layer over the LibreOfice UNO API.</p>
      <p>Returning to the split issue in XML documents, LibreOfice UNO API allows one to use GUI
and work with text in a simpler manner. It handles text as though it had been edited by user. In
addition, in comparison with the XML approach, this API provides access to styles and other
functionality, like pictures, converters and other GUI functions.</p>
      <p>We have chosen the Java programming language to work with the LibreOfice UNO API. Our
library provides an abstraction to process documents easier in comparison with UNO API, and
it does not require knowledge of the LibreOfice UNO API. As a part of this library, we have
implemented classes for XML manipulations. In more detail, this library will be discussed in
the next section.</p>
    </sec>
    <sec id="sec-4">
      <title>4. Documents processing Java library implementation</title>
      <p>The easier document processing approach is XML processing. It allows developers to implement
a simple keywords replacement. On the other hand, LibreOfice UNO API provides a rich set
of functionality for document manipulation. Nevertheless, it does not nullify the usefulness
of the XML approach. A combination of two diferent approaches allows choosing developers
which one is the most appropriate for their application. Usually, one ought to use two diferent
libraries or frameworks to implement it, but our library provides a simple interfaces to interact
with both solutions simultaneously.</p>
      <p>Our library’s purpose is to simplify access to the documents and their handling by providing
an additional abstraction. The library has been implemented using the Java programming
language. The source code may be found at [18].</p>
      <p>The XML approach is quite simple to use. The main class is OdtDocumentPatternsAdjust.
It has two constructors. The first one is empty, and the second one with a Pattern parameter.
The Pattern class is a JavaBean class with two fields, the start of the pattern and the end of
the pattern.</p>
      <p>The OdtDocumentPatternsAdjust class implements the DocumentPatternsAdjust
interface which has two methods for adjusting the XML content. The methods are the following:
String adjustPatterns(File archive)</p>
      <p>The actual processor of the XML content is the OdtXmlPatternAdjustProcessor class.
It contains diferent methods for content processing, most of which are private. One of the
public method is processXml. The algorithm of XML content processing is the following:
1. Get the position of the start and the end of the pattern.
2. Set ofset to the position of the start of the pattern.
3. Get text before the next tag. It is needed to get the part of the pattern before there will be
the next tag like w:r or text:span.
4. Move ofset by adding the length of the found part of the pattern.
5. Look for the next possible part of the pattern meanwhile skipping tags without actual
text inside.
6. When the next part of the pattern is found, get the text. At this step, the text will be
extracted and inserted into the beginning of the pattern in the XML content.
7. Check whether the ofset is less than the position of the end of the pattern; if it is, then
repeat every action starting with step 5, otherwise the next step.
8. If the next part of the pattern could be found, repeat every action starting with step 1,
and add the earlier found pattern into the ArrayList, otherwise return the list of the
pattern.</p>
      <p>The LibreOfice UNO API part is larger and ofers richer functionality. There are a few
essential classes. First of all, consider the DocumentManagerProvider class. This class is a
Factory and provides the implementation of corresponding DocumentManager depending
on file extension. This class contains one static method called createDocumentManager and
has the following signature:
DocumentManager createDocumentManager(File file)</p>
      <p>DocumentManager is an interface that provides an ability to open a passed document. It has
the following method:
Document openDocument(File file);</p>
      <p>The openDocument method returns a Document instance, which is also an interface. This
approach allows avoiding specific implementations for a developer. The Document class contains
the following set of methods:
void saveDocument(File file);
void saveDocument(String filepath);
void saveDocument();
void saveDocumentAs(File file, DocumentConvertTypes convertTo);
void saveDocumentAs(String filepath, DocumentConvertTypes convertTo);
void saveDocumentAs(DocumentConvertTypes convertTo);
void replace(String search, String replace);
void close();</p>
      <p>These methods allow converting documents to any supported format and replacing a
particular value in a document. The LibreOfice UNO API supports a considerable amount of formats
to convert. All of them are described in Apache OpenOfice Wiki [ 19]. Partly, those types had
been moved to our library and stored in an enum called DocumentConvertTypes. We decided
to use enums to simplify the usage of constants that can be used as properties. In comparison
with final static variables, enums make it easier to specify what should be passed there.</p>
      <p>To provide more functionality, a lower abstraction layer is available. The
LibreOfficeUnoManager contains most of the implemented methods in the Document class.
This class provides basic methods to interact with documents without direct work with UNO
API. As return values, it uses API’s objects, so it may be considered an additional functionality
layer.</p>
      <p>There are small utility classes which might help in working with documents. Nevertheless,
developers will rarely use them because most of the LibreOfficeUnoManager methods already
have been optimized with the use of those utility classes. Let us look into two useful classes. The
OdtDocumentProperties provides a wrapper for the PropertyValue class to simplify
working with document properties. The OdtFilePathHandler helps to convert the initial File class
into an understandable LibreOfice UNO API string. The reason for OdtFilePathHandler
class existence is that LibreOfice UNO API works with Uniform Resource Identifier (URI). This
means that the file path should be started with the file:/// prefix and all backslash characters
should be replaced with the slash character.</p>
      <p>The next example demonstrates a basic usage of our library to replace keywords in the
document and convert it into an appropriate format:
File file = ResourcesManager.getResourceFile("Document.odt");
DocumentManager documentManager =</p>
      <p>DocumentManagerProvider.createDocumentManager(file);
Document document = documentManager.openDocument(file);
document.replace("{Search}", "Value");
document.saveDocumentAs(new File(
"C:/Users/hp/IdeaProjects/XmlDocumentProcessing/File.docx"),
DocumentConvertTypes.MS_WORD_2007_XML);</p>
      <p>In order to work with text, we implemented a few specific classes. The
LibreOfficeUnoManager class supports working with text using the findAllAsText
method. The method’s signature is the following:
public List&lt;Text&gt; findAllAsText(String search);</p>
      <p>This method returns a list of Text classes. The Text class supports text editing, creating
cursor, getting all paragraphs, setting font weight, and paragraph adjustment. The list of the
methods is shown on the Figure 8.</p>
      <p>An example of getting a text and performing some basic operations is shown below.
Text allDocumentText = libreOfficeUnoManager.findAllAsText("and").get(0);
allDocumentText.createCursor().gotoStartOfTheSentence(true);
allDocumentText.setCenteredAdjustment();</p>
      <p>The Cursor class is basically usual graphic cursor. In order to move through the text,
LibreOfice UNO API implements cursor as a main mechanism for this purpose. But, considering
the fact of complexity of some original UNO API methods, we have implemented a simplified
wrapper class. The list of its methods is shown on the figure 9.</p>
      <p>The names of most methods, such as gotoNextSentence, are intuitively recognizable. Every
type of goto moving has two diferent implementations. One does not have parameters and
another one has a Boolean parameter. The Boolean parameter is used for telling the LibreOfice
UNO API, whether should we stop and select current word or go to next one. Methods without
parameters basically just use methods with parameters by passing false to them.</p>
      <p>Also, to implement a more convenient way of Cursor class methods usage, goto methods
take advantage of Builder design pattern. The example of such use is shown below.
allDocumentText.createCursor()
.gotoStartOfTheSentence()
.gotoNextSentence()
.gotoNextWord()
.gotoPreviousWord();</p>
      <p>It is impossible to predict diferent components usage due to LibreOfice UNO API complexity
and massiveness. So, to simplify it for developers, all the classes contain corresponding methods
which return the original LibreOfice UNO API objects. For instance, the Cursor class has
getTextCursor, which returns a XTextCursor object.</p>
      <p>In order to demonstrate the developed library usage, we implemented a cloud-based system
which aims to automate document flow.</p>
      <p>The application is divided onto frontend and backend parts. The development stack is shown
below:
• Server development stack: Spring (Spring boot, Spring Security, Spring WebFlux, Spring
JPA), jjwt (Java JWT: JSON Web Token for Java and Android), Connector/J (Mysql Java
Connector).
• Client development stack: Vue.js 3 (Vue Cli, Vue Router, Vuex, Vue i18n, Vue Class
Component, Vue FontAwesome, SFC, Element Plus), Typescript, Javascript, Babel, Webpack.</p>
      <p>The backend has microservice architecture. In order to minimize the application load, we
have implemented 3 diferent microservices:
1. Microservice for login and token generation.</p>
      <p>2. Microservice for document processing (storage and document management).
3. Microservice for generating documents according to the data.</p>
      <p>As a matter of application security and microservice communication, we have used the JWT
token as the most eligible.</p>
      <p>For signing up and signing in into the application, the login page may be used (figure 10).</p>
      <p>After this procedure, the user goes to the main page for handling documents, which is called
Document Management (figure 11).</p>
      <p>This page contains all the document information. To create a document, one should push a
side bar button which leads to a document adding page (figure 12). The index of the documents
is shown as a list, and each item has two diferent buttons:
1. Generate Form. This button is responsible for form generating. These forms may be used
as data origins for producing documents from templates.
2. Delete. Remove the entry.</p>
      <p>Furthermore, our system supports custom template patterns, which means that documents
may contain any kind of keyword distinguishers.</p>
      <p>The forms are common way of document generating from an uploaded template. All created
forms are displayed and might be changed in the Form page (figure 13).</p>
      <p>The actual form page, which may be accessed by using the View Form button, contains all of
the extracted from the template document keywords. The example of a form is shown on the
ifgure 14.</p>
      <p>Considering the fact that key words are not always named human-friendly, it is also possible
to change their display name using the Edit button on the table. After submitting a form, the
user automatically receives the document.</p>
      <p>At the moment, the following features have been implemented:</p>
      <p>We are planning to implement a cloud-based interface for working with documents without
coding. In addition, we have intention to provide the richest functionality for working with
LibreOfice UNO API.</p>
    </sec>
    <sec id="sec-5">
      <title>5. Conclusion</title>
      <p>Document processing may be complicated and confusing. The XML processing is more
complicated and limited. The reason is that handling raw XML is dificult, especially when a document
is massive.</p>
      <p>LibreOfice UNO API is one of the richest open-source APIs for processing documents. It
provides the necessary functionality to edit and process documents. In comparison with XML
processing, this approach is more advantageous. Moreover, the LibreOfice UNO API solves the
keyword splitting issue, or to be more precise, allows avoiding it.</p>
      <p>The developed library allows one to handle both of the described processing approaches. It is
easier to combine them regardless of whether you only need to process patterns or additionally
edit the inner structure of the document. Looking at the future, we are planning to complete
the development of this library. Converters of the library are useful tools because there are
not many solutions that could manage all the major formats, such as doc, docx, odt, html, and
others. As an application of this library, we are currently working on creating a cloud-based
document management system that will be able to help in storing, handling, and processing
documents. It is going to be discussed in the further reports.
[15] Wikipedia, Opendocument, 2021. URL: https://en.wikipedia.org/w/index.php?title=</p>
      <p>OpenDocument&amp;oldid=1025760709.
[16] Apache, Frame-controller-model paradigm in apache openofice, 2021. URL: https://wiki.
openofice.org/wiki/Documentation/DevGuide/OficeDev/Frame-Controller-Model_
Paradigm_in_OpenOfice.org.
[17] A. Davison, Java libreofice programming, 2021. URL: https://fivedots.coe.psu.ac.th/~ad/
jlop/.
[18] CodePsi, GitHub - CodePsi/Lycorse-DPL: Lycorse Document Processing Library, 2021.</p>
      <p>URL: https://github.com/CodePsi/Lycorse-DPL.
[19] Apache, Framework/article/filter/filterlist ooo 3 0, 2021. URL: https://wiki.openofice.org/
wiki/Framework/Article/Filter/FilterList_OOo_3_0.</p>
    </sec>
  </body>
  <back>
    <ref-list>
      <ref id="ref1">
        <mixed-citation>
          [1]
          <string-name>
            <given-names>IBM</given-names>
            <surname>Corporation</surname>
          </string-name>
          ,
          <article-title>The evolution of process automation</article-title>
          ,
          <year>2018</year>
          . URL: https://www.ibm.com/ downloads/cas/QAQMRGVN.
        </mixed-citation>
      </ref>
      <ref id="ref2">
        <mixed-citation>
          [2]
          <string-name>
            <surname>McKinsey&amp;Company,</surname>
          </string-name>
          <article-title>Jobs lost, jobs gained: Workforce transitions in a time of automation, 2017</article-title>
          . URL: https://www.mckinsey.com/~/media/ BAB489A30B724BECB5DEDC41E9BB9FAC.ashx.
        </mixed-citation>
      </ref>
      <ref id="ref3">
        <mixed-citation>
          [3]
          <string-name>
            <given-names>S.</given-names>
            <surname>Wilson</surname>
          </string-name>
          ,
          <article-title>How document automation is changing the healthcare industry</article-title>
          ,
          <year>2017</year>
          . URL: https: //electronichealthreporter.com
          <article-title>/document-automation-changing-healthcare-industry/.</article-title>
        </mixed-citation>
      </ref>
      <ref id="ref4">
        <mixed-citation>
          [4]
          <string-name>
            <given-names>M.</given-names>
            <surname>Bhanja</surname>
          </string-name>
          ,
          <string-name>
            <given-names>N.</given-names>
            <surname>Barik</surname>
          </string-name>
          ,
          <article-title>Library automation: problems and prospect</article-title>
          ,
          <source>in: 10th National Convention of MANLIBNET organized by KIIT University</source>
          ,
          <year>2009</year>
          , pp.
          <fpage>199</fpage>
          -
          <lpage>201</lpage>
          . URL: https://www. researchgate.net/publication/323219596_Library_Automation_problems_and_prospect.
        </mixed-citation>
      </ref>
      <ref id="ref5">
        <mixed-citation>
          [5]
          <string-name>
            <given-names>H.-Y.</given-names>
            <surname>Hsueh</surname>
          </string-name>
          ,
          <string-name>
            <given-names>C.-N.</given-names>
            <surname>Chen</surname>
          </string-name>
          ,
          <string-name>
            <surname>K.-F. Huang</surname>
          </string-name>
          ,
          <article-title>Generating metadata from web documents: a systematic approach</article-title>
          ,
          <source>Human-centric Computing and Information Sciences</source>
          <volume>3</volume>
          (
          <year>2013</year>
          ). doi:
          <volume>10</volume>
          .1186/
          <fpage>2192</fpage>
          -1962-3-7.
        </mixed-citation>
      </ref>
      <ref id="ref6">
        <mixed-citation>
          [6]
          <string-name>
            <given-names>S. T.</given-names>
            <surname>Rosenbloom</surname>
          </string-name>
          ,
          <string-name>
            <given-names>W.</given-names>
            <surname>Kiepek</surname>
          </string-name>
          ,
          <string-name>
            <given-names>J.</given-names>
            <surname>Belletti</surname>
          </string-name>
          ,
          <string-name>
            <given-names>P.</given-names>
            <surname>Adams</surname>
          </string-name>
          ,
          <string-name>
            <given-names>K.</given-names>
            <surname>Shuxteau</surname>
          </string-name>
          ,
          <string-name>
            <surname>K. B. Johnson</surname>
            ,
            <given-names>P. L.</given-names>
          </string-name>
          <string-name>
            <surname>Elkin</surname>
            ,
            <given-names>E. K.</given-names>
          </string-name>
          <string-name>
            <surname>Shultz</surname>
          </string-name>
          ,
          <article-title>Generating complex clinical documents using structured entry and reporting</article-title>
          ,
          <source>Studies in health technology and informatics 107</source>
          (
          <year>2004</year>
          )
          <fpage>683</fpage>
          -
          <lpage>687</lpage>
          . URL: https: //pubmed.ncbi.nlm.nih.gov/15360900/.
        </mixed-citation>
      </ref>
      <ref id="ref7">
        <mixed-citation>
          [7]
          <string-name>
            <given-names>M. J. A.</given-names>
            <surname>Salomi</surname>
          </string-name>
          ,
          <string-name>
            <given-names>R. F.</given-names>
            <surname>Maciel</surname>
          </string-name>
          ,
          <article-title>Document management and process automation in a paperless healthcare institution</article-title>
          ,
          <source>Technology and Investment</source>
          <volume>08</volume>
          (
          <year>2017</year>
          )
          <fpage>167</fpage>
          -
          <lpage>178</lpage>
          . doi:
          <volume>10</volume>
          .4236/ti.
          <year>2017</year>
          .
          <volume>83015</volume>
          .
        </mixed-citation>
      </ref>
      <ref id="ref8">
        <mixed-citation>
          [8]
          <string-name>
            <surname>Hypatos</surname>
          </string-name>
          ,
          <article-title>Hypatos document hyperautomation for e2e doc processing</article-title>
          ,
          <year>2021</year>
          . URL: https: //hypatos.ai/en.
        </mixed-citation>
      </ref>
      <ref id="ref9">
        <mixed-citation>
          [9]
          <string-name>
            <given-names>C.</given-names>
            <surname>Dilmegani</surname>
          </string-name>
          ,
          <article-title>The ultimate guide to document automation in 2021, 2021</article-title>
          . URL: https: //research.aimultiple.com/document-automation/.
        </mixed-citation>
      </ref>
      <ref id="ref10">
        <mixed-citation>
          [10]
          <string-name>
            <surname>Docuphase</surname>
          </string-name>
          , Enterprise automation software,
          <year>2021</year>
          . URL: https://www.docuphase.com/.
        </mixed-citation>
      </ref>
      <ref id="ref11">
        <mixed-citation>
          [11]
          <string-name>
            <given-names>Flackon</given-names>
            <surname>Inc</surname>
          </string-name>
          .,
          <source>Document automation software</source>
          ,
          <year>2021</year>
          . URL: https://docupilot.app/.
        </mixed-citation>
      </ref>
      <ref id="ref12">
        <mixed-citation>
          [12]
          <string-name>
            <surname>Contractbook</surname>
          </string-name>
          , Better contracts,
          <year>2021</year>
          . URL: https://contractbook.com/.
        </mixed-citation>
      </ref>
      <ref id="ref13">
        <mixed-citation>
          [13]
          <string-name>
            <surname>Docassemble</surname>
          </string-name>
          , Docassemble,
          <year>2021</year>
          . URL: https://docassemble.org/.
        </mixed-citation>
      </ref>
      <ref id="ref14">
        <mixed-citation>
          [14]
          <string-name>
            <surname>Obeo</surname>
          </string-name>
          ,
          <year>M2doc</year>
          ,
          <year>2021</year>
          . URL: https://www.m2doc.org/.
        </mixed-citation>
      </ref>
    </ref-list>
  </back>
</article>