Tips for using Confluence for managing controlled documents

The Atlassian Confluence wiki software is a good tool for managing controlled documents, as required by a standard quality system (e.g. a system based on ISO 9001, ISO 13485, etc.).

I have found that a few simple modifications transforms a default Confluence installation into a fully compliant document management system.

Document identification and approval

Confluence automatically keeps track of meta data such as document name, author, and versions of pages, but the default Confluence install doesn't include this meta data page information in exports, e.g., to PDF files.

Also, controlled documents needs to be approved. Confluence does not include tools for marking pages as approved, but I have found that

Here is an easy solution to that issue: Create a user macro which shows a table with the document identification information, and include the macro on every page that contains a controlled document.

The following macro display a table with document id (space key and document title), page revision no, page revision time, page author.

 

## Macro title: Page Version
## Macro has a body: N
## Body processing: No macro body
##
## Developed by: jacsv
## Date created: 2018-03-07

## @noparams
<table>;
<tbody>;
<tr>;<th>;Document<td>;$space.getKey() / $content.getTitle()
<tr>;<th>;Revision<td>;v$content.version  ($action.dateFormatter.formatDateTime($content.getLastModificationDate()))
<tr>;<th>;Author<td>;$content.getLastModifier().getFullName()
</tbody>;
</table>;

Document approval

Controlled documents needs to be approved. Confluence does not include tools for marking pages as approved, but I have found that the free Page Approval plugin is all you need to enable this functionality,

With this plugin you can insert the Page Approval macro in all controlled documents, which then provides a table that lists document approval state, the reviewers and the approval date and time. It will also reference the last approved version, when the current version has not yet been approved.

A real nice feature is that the plugin enables you to create a page that lists the page approval status of all controlled documents (pages with the page approval table) within a space.

The plugin can also be used for tracking page read acknowledgments, when that is required by your quality system, e.g., read acknowledgement for new procedures.

Nicer PDF exports

The default Confluence installation does not include any particular formatting of a PDF export. A simple PDF style sheet is all you need to make the PDF file exports look more professional. The following style sheet defines A4 page size, adds a page header with "Company name" (replace with your company name) and the document name, and page footer with page number and page count.

/* Page size and margins */
@page
{
 /*The A4 paper size is 210 mm wide by 297 mm long*/
 size: 210mm 297mm;
 margin-top: 2.54cm;
 margin-bottom: 2.54cm;
 margin-left: 1.5cm;
 margin-right: 1.27cm;

/* Header */
 @top-left { 
 content: "Company name";
 font-family: ConfluenceInstalledFont, Helvetica, Arial, sans-serif;
 font-size: 8pt;
 font-weight: normal;
 }
 @top-right { 
 content: element(runningheader);
 }

/* Footer */
 @bottom-center
 {
 /* This is the content that will appear in the footer */
 content: counter(page) "/" counter(pages);;
 font-family: ConfluenceInstalledFont, Helvetica, Arial, sans-serif;
 font-size: 8pt;
 }
}

.pagetitle h1 {
 position: running(runningheader);
 font-family: ConfluenceInstalledFont, Helvetica, Arial, sans-serif;
 font-size: 8pt;
 font-weight: normal;
 text-align: right;
}


/* Style the Page Approval table */
#pastatus { background-color: #FFFFFF; border-style: none; }
#pastatus img { display: none }
#statusnote { display: none }
#pageapproval td.confluenceTd a { display: none }
#pageapproval td.confluenceTd { background-color: #FFFFFF !important }
#UnapprovePage &gt; input[type=submit] { display: none }
#ApprovePage &gt; input[type=submit] { display: none }

/* Style all tables */
table {
 table-layout:auto !important; 
 width: auto !important;
}