Skip to the lesson
CivOps AI Academy · M01Paper to Glass: Digital Forms, Checklists and Inspections as Governed Records
0%

Chapter 1 · Purpose, scope and standards

From paper to a governed record

A paper form is a sheet. A governed digital record is a sheet that also knows who filled it in, when, on which version of the form, with what evidence, and what happened next. This chapter says what Paper to Glass builds, what it leaves to other modules, and which standards it is measured against.

20 min9 data-integrity attributes11 capabilities3 tiers: MVP, STD, BIC

By the end of this chapter you can

  • Say what a governed digital record is and which paper documents Paper to Glass replaces.
  • Place a form in one of the nine categories and say which neighbouring module owns what this one leaves out.
  • Name the five standards the module is built against and the nine ALCOA+ attributes, and say where in the module each is met.

What Paper to Glass does

Paper to Glass converts any paper form, checklist, round or inspection into a governed digital record. The record can be filled in on the floor with no signal, scored, signed, trended, and turned into follow-up work: a work request, a nonconformance report or an observation. It replaces the mobile forms and inspection tools a business usually pays for, such as SafetyCulture (iAuditor) [7] and GoFormz [6]. The module specification also names Fulcrum, GoCanvas, ProntoForms, Jotform, Operations1 and Microsoft Forms with Power Apps as tools it replaces.

It is also the first spoke on the platform's hub, and the engine that later modules reuse for their own data capture. A form built here is not a special case: the same designer, versions, offline queue and typed answers carry the work of the modules that come after.

The nine categories

Every template carries one category. Choosing it is the first act of the first lab, and it decides who acts on the form.

CategoryWhat it isA typical example
inspectionA look at a thing against a standard, with pass or failPre-start check of a machine
checklistSteps or items to tick off in orderShift start-up list
roundThe same points visited on a route, on a rhythmReading eight gauges every shift
auditA scored review of a process or areaA 5S walk of a cell
permitPermission to do risky work, with conditions and sign-offHot-work permit
logA running record of events, one entry at a timeVisitor or delivery log
surveyQuestions to people, not checks of thingsOperator feedback after a trial
recordA single event written down onceA calibration record
otherAnything that fits none of the aboveA one-off site walk

What is in, and what is not

The module is wide enough to replace the tools above and narrow enough to leave documents, step-enforced production and statistical charts to the modules built for them.

The edge of Paper to GlassInside: designer, ingestion, execution, scoring and routing, and field-to-table mapping. Outside, each with its owner: controlled SOPs in M06, step-enforced production in M04 and SPC charts in M09. INSIDE PAPER TO GLASS (M01)Form designerPaper ingestionExecutionScoring and routingField-to-table mappingOUTSIDE, WITH ITS OWNERControlled SOPsowned by M06Step-enforced productionowned by M04SPC chartsowned by M09, which reads form results
The edge of Paper to Glass. Inside: designer, ingestion, execution, scoring and routing, field-to-table mapping. Outside, each with its owner: controlled SOPs (M06), step-enforced production (M04) and SPC charts (M09, which consumes form results).
  • In: form designer with versioning and a template library; AI-assisted ingestion of scanned and PDF paper forms with human review; scheduled and ad-hoc execution; offline-first mobile capture with photo, signature, GPS and barcode evidence; scoring, failed-item actions, routing and approvals; field-to-table mapping so a submission can create records in other modules.
  • Out: controlled SOP authoring and approval (M06 Document Control); step-enforced production execution with material verification (M04 MES); SPC charting of numeric results (M09 consumes form results).

Eleven capabilities in three tiers

The capability map lists what the module does, and each capability carries a tier. MVP must exist for a small or mid-size plant to cancel the incumbent subscription with confidence. STD is parity with mainstream tools, what a buyer expects in a demo. BIC marks best-in-class differences, such as those made possible by AI and by the shared spine. MVP and STD are required for the course; BIC is advanced work.

Eleven capabilities by tierThree columns: MVP with five capabilities, STD with four and BIC with two. MVP (5)Form designerConditional logicVersioning and libraryOffline-first executionEvidence and signaturesSTD (4)Assignment and schedulingFailed-item actionsReview and approvalRecords and reportingBIC (2)Paper ingestion with AIIntegration mapping
Eleven capabilities by tier. MVP (5): form designer, conditional logic, versioning and library, offline-first execution, evidence and signatures. STD (4): assignment and scheduling, failed-item actions, review and approval, records and reporting. BIC (2): paper ingestion with AI, integration mapping.
CapabilityWhat it doesTier
Form designerFields: text, number with unit and limits, choices, date and time, photo with markup, signature, barcode or QR, GPS, file, table, calculated; sections, repeating groups, scoring weightsMVP
Conditional logicShow, hide or require by answer; follow-up questions on a fail; totals; cross-field validationMVP
Versioning and libraryDraft, published, retired; published versions immutable; submissions pinned to the version used; JSON import and exportMVP
Offline-first executionLocal queue, auto-save, conflict-free sync, device ID and capture times keptMVP
Evidence and signaturesPhotos per question, annotation, GPS stamp, e-signature with meaningMVP
Assignment and schedulingTo a role, person, equipment or location; RRULE recurrence; due windows, grace, escalation; QR on the assetSTD
Failed-item actionsA failed or out-of-limit answer creates an action item, work request, NCR or observation, with a back-linkSTD
Review and approvalSupervisor queue, reject with comment, multi-step approvalSTD
Records and reportingImmutable submission, branded PDF, completion and overdue dashboards, failure hot-spots, score trendsSTD
Paper ingestion (AI)Upload a PDF or photo; AI proposes fields; a reviewer accepts or edits each one; provenance keptBIC
Integration mappingMap form fields to other modules' tables; webhooks and an event outbox on submitBIC

The standards, and what each one is used for

StandardUsed in this module for
21 CFR Part 11 / EU GMP Annex 11 [2]Electronic records and signatures, when a form is a regulated (GxP) record
ALCOA+ data integrity (FDA 2018 guidance; MHRA GXP Data Integrity 2018) [3][4]Nine attributes a record must show; the test for every design choice in this course
ISO 9001:2015 clause 7.5 [1]Control of documented information: a template version is documented information
RFC 5545 (iCalendar RRULE)Recurrence rules for scheduled rounds and inspections (chapter 3)
W3C WCAG 2.2 AA [5]Accessibility of the capture screen: gloves, glare, large targets

ALCOA stands for Attributable, Legible, Contemporaneous, Original and Accurate. The plus adds Complete, Consistent, Enduring and Available. They are easy to recite and hard to meet with paper, because a sheet cannot show who changed a number or when. Each one becomes a design decision in a digital record.

ALCOA+ in Paper to GlassNine ALCOA+ attributes in a grid, each beside the feature that meets it. AttributablePerson and signatureLegibleTyped fieldsContemporaneousCapture timesOriginalImmutable submissionAccurateLimits on fieldsCompleteRequired fieldsConsistentPinned version, server clockEnduringArchive, not deleteAvailableSearch and PDFThe first five are ALCOA; the last four are the plus.
ALCOA+ in Paper to Glass. Nine attributes, each beside the feature that meets it: who and when from the person and signature; legible from typed fields; contemporaneous from capture times; original from the immutable submission; accurate from limits; complete from required fields; consistent from the pinned version and server clock; enduring from archive, not delete; available from search and PDF.
AttributeIn plain wordsWhere the module meets it
AttributableWho did it, and whencreated_by, submitted_by, signature with meaning
LegibleReadable and permanentTyped fields, branded PDF render
ContemporaneousRecorded at the timeCapture timestamps on each answer
OriginalThe first capture, or a certified true copyImmutable submission; original photos kept
AccurateCorrect and free of errorValidation rules, limits, out_of_limit flag
CompleteNothing missingRequired fields; skipped items only through logic
ConsistentSame order, same clockSubmission pinned to a version; server clock
EnduringLasts as long as it is neededarchived_at, never delete
AvailableCan be found and read when neededSearch, dashboards, PDF

Knowledge check

A hot-work form needs a supervisor's signature before the work can start. Which category fits best?

Knowledge check

Which of these does Paper to Glass leave to another module?

References

  1. ISO 9001:2015 Quality management systems: requirements (clause 7.5, documented information). https://www.iso.org/standard/62085.html
  2. eCFR: Title 21, Part 11, Electronic records; electronic signatures. https://www.ecfr.gov/current/title-21/chapter-I/subchapter-A/part-11
  3. FDA: Data integrity and compliance with drug CGMP: questions and answers (2018). https://www.fda.gov/regulatory-information/search-fda-guidance-documents/data-integrity-and-compliance-drug-cgmp-questions-and-answers
  4. MHRA: Guidance on GxP data integrity (2018). https://www.gov.uk/government/publications/guidance-on-gxp-data-integrity
  5. W3C: Web Content Accessibility Guidelines (WCAG) 2.2. https://www.w3.org/TR/WCAG22/
  6. GoFormz: mobile inspection management. https://goformz.com/use-cases/inspections
  7. Microsoft Store: SafetyCulture (iAuditor) feature list. https://apps.microsoft.com/detail/9nblggh5flq2

Chapter 2 · The data model

Templates, versions and typed answers

How a form is stored decides what you can ever do with it. Eight tables hold the design, the schedule, the answers and the follow-up. Three rules keep the record honest: a published version never changes, every answer is a typed row, and the record time is the server's.

25 min8 tables3 statuses of a template3 pitfalls

By the end of this chapter you can

  • Name the eight frm_ tables and say what each one holds.
  • Explain why a published version is immutable and how a submission stays pinned to it.
  • Say why answers are typed rows and not one JSON blob, and why the server's clock is the record time.

Eight tables on the shared spine

Every table in the module starts with the standard columns every platform table has: id, tenant_id, created_at, created_by, updated_at, updated_by, row_version, archived_at and ext. The module has no people table, site list or file store of its own: it points at core_person, core_site, core_job_role, core_uom, core_data_tag, core_attachment and core_e_signature. Its own tables share the prefix frm_.

The eight frm_ tablesEight tables. A template has many versions and a version has many fields. An assignment points at a template. A submission points at a version and an assignment and has many responses and triggered actions. An ingestion job produces a version. frm_templatefrm_template_versionfrm_fieldfrm_assignmentfrm_submissionfrm_ingestion_jobfrm_responsefrm_triggered_actionhas manyhas manypoints atpinned tofromproduceshas manyhas many
The eight tables. frm_template holds the header and has many frm_template_version rows; each version has many frm_field rows. frm_assignment points at a template. frm_submission points at a version and an assignment, and has many frm_response and frm_triggered_action rows. frm_ingestion_job produces a version.

The table below is the full definition: every column the module adds to the standard ones, with its type and whether it is required (marked req). Types are written as in the specification: text, int, num (a decimal number), bool, ts (a timestamp with time zone), uuid and json (jsonb in Postgres); an arrow means a foreign key to that table. It is what your agent builds from in Session 2.

TableHoldsColumns: type, req = required
frm_templateThe form's headercode text req, unique per tenant; name text req; category text req, one of the nine in chapter 1; owner_id → core_person; site_id → core_site; current_version_id uuid; status text req: draft, published or retired
frm_template_versionOne version of the form: field schema, logic and scoring as JSON. A draft while published_at is empty; read-only once it is settemplate_id → frm_template req; version_no int req; schema json req; logic json; scoring json; published_at ts; published_by → core_person; change_note text; source_ingestion_id uuid
frm_fieldA normalised copy of each field, for analytics, SPC links and limitstemplate_version_id → frm_template_version req; field_key text req; label text req; field_type text req, one of the fourteen types below; required bool req; uom_id → core_uom; lsl num; usl num; options json; sort_order int; data_tag_id → core_data_tag
frm_assignmentA recurring or one-off assignment of a template to a targettemplate_id → frm_template req; target_type text req: equipment, location, area, person, role or site; target_id uuid; assignee_person_id → core_person; assignee_role_id → core_job_role; rrule text; due_window_min int; grace_min int; active bool req; next_due_at ts
frm_submissionOne execution of a template versionsubmission_no text req, unique per tenant; template_version_id → frm_template_version req; assignment_id → frm_assignment; subject_type text; subject_id uuid; status text req, one of the six below; started_at ts req; submitted_at ts; submitted_by → core_person; score num; max_score num; geo json; device_id text; captured_offline bool; signature_id → core_e_signature
frm_responseOne answer, typed into value columnssubmission_id → frm_submission req; field_key text req; value_text text; value_num num; value_bool bool; value_ts ts; value_json json; out_of_limit bool; failed bool; answered_at ts; attachment_id → core_attachment
frm_triggered_actionA downstream record created from a failed or flagged answersubmission_id → frm_submission req; field_key text; action_type text req: action_item, work_request, ncr, observation, notification or webhook; target_module text; target_record_id uuid; status text req: pending, created or failed
frm_ingestion_jobPaper-to-digital AI ingestion with human reviewsource_attachment_id → core_attachment req; status text req: queued, extracting, in_review, approved, rejected or failed; extracted json; mean_confidence num; reviewer_id → core_person; reviewed_at ts; resulting_version_id → frm_template_version

subject_type and subject_id on a submission name the thing the form was filled in about (a machine, a room, a vehicle), which is what lets the failure Pareto group by asset. geo holds the GPS stamp when one is taken, and sort_order keeps a version's fields in the order they are asked.

Look at the allowed values before you design anything. A template's category is one of the nine in chapter 1 and its status is draft, published or retired. A field's type is one of text, number, choice, multi_choice, date, datetime, photo, signature, barcode, gps, file, table, calculated or section. A target is an equipment, location, area, person, role or site. A submission moves through in_progress, submitted, in_review, approved, rejected or void.

Versions: a published form never changes

Two things carry a status here, and they are easy to mix up. The template header, frm_template, has the status draft, published or retired: whether the form as a whole is still being built, in use, or no longer used. Each version is a row in frm_template_version, with the schema, logic and scoring stored as JSON [3], and its state is read from published_at.

A draft version is a row whose published_at is empty. Anyone with the right role can edit it, and its frm_field rows point at it while the form is being built. Publishing sets published_at and published_by, and from then on that row and its fields are read-only. A change to a published form is a new version row (version_no plus one, a draft again) with a change note, and frm_template.current_version_id moves to it when it is published. Old published versions stay exactly as they were, never edited or deleted.

Every submission records the version it was filled in on. A month later, when someone asks what question 7 said on the day of a failed inspection, the answer is in the pinned version, not in whatever the form looks like now. ISO 9001 asks for exactly this control of documented information: a template version is documented information, and a record shows which version was in use [1].

Versions and pinned submissionsOne template with two versions. Two submissions are pinned to version 1 and one to version 2. One templatefrm_templateVersion 1published, left unchangedVersion 2publishedreplaced bySubmission Apinned to version 1Submission Bpinned to version 1Submission Cpinned to version 2A submission never moves to another version.
One template, two versions, three submissions. Version 1 is published and stays unchanged when version 2 is published. Two submissions taken on version 1 stay pinned to it; a later one is pinned to version 2. No submission ever moves.

Answers: one typed row each

When a form is submitted, each answer becomes a row in frm_response with the field key and a value in the column that matches its type: value_num for a pressure, value_bool for a yes or no, value_ts for a date and time, value_text for words, and value_json for the rest (a table, a multi-choice). Two flags are set as the answer arrives: out_of_limit, when a number falls outside the field's limits (lsl and usl on frm_field), and failed, when a scored or pass-fail item fails.

JSON blob or typed rowsThe same submission stored as one JSON blob, where a search opens every blob, and as typed frm_response rows, where one query answers it. One JSON blob{ "answers": { "pressure": "…", "temperature": "…", "signed": true } }Every pressure above its limit:open every blob, one by one.Typed frm_response rowsfieldvalue_numout_of_limitpressure…truetemperature…falsesigned——Every pressure above its limit:one query on value_num and out_of_limit.
Two ways to store the same submission. Left: one JSON blob, where finding every pressure above its limit means opening every blob. Right: typed frm_response rows, where the same question is one query on value_num and out_of_limit.

Time: the server is the record clock

A phone's clock can be wrong, set by hand, or changed after the fact. The record time therefore comes from the server's clock when the submission is received, and the device's capture times are kept separately beside it, together with device_id and the captured_offline flag. Both are needed: the server time says when the record became part of the system, and the device time says when the person actually answered. That is the contemporaneous attribute of ALCOA+ [4]. Timestamps should be written in a standard, unambiguous form such as RFC 3339 [5].

Exercise · Model one real form15 minutes

You need: One filled-in paper form from your business, the standard columns list from this chapter, and your AI coding agent

Use the form you chose in Session 1. Work on paper or in a text file first; the agent comes in at step 5.

Outcome: A one-page field list for a real form, with types, limits and evidence marked, and a sample set of typed rows your agent generated and you checked.

Knowledge check

Why does every submission store the version of the template it was filled in on?

Knowledge check

A form was completed offline at 06:00 and synced at 09:30. What should the record keep?

References

  1. ISO 9001:2015 Quality management systems: requirements (clause 7.5, documented information). https://www.iso.org/standard/62085.html
  2. eCFR: Title 21, Part 11, Electronic records; electronic signatures. https://www.ecfr.gov/current/title-21/chapter-I/subchapter-A/part-11
  3. IETF RFC 8259: The JavaScript Object Notation (JSON) Data Interchange Format. https://www.rfc-editor.org/rfc/rfc8259
  4. MHRA: Guidance on GxP data integrity (2018). https://www.gov.uk/government/publications/guidance-on-gxp-data-integrity
  5. IETF RFC 3339: Date and Time on the Internet: Timestamps. https://www.rfc-editor.org/rfc/rfc3339

Chapter 3 · On the floor

Capture, assign and act

A form earns its place on the floor: with gloves on, in glare, with no signal. This chapter follows a submission from its schedule to a phone, through the offline queue, and out the other side as a signed record and a piece of follow-up work.

30 min6 submission statuses6 action types50 queued submissions to test

By the end of this chapter you can

  • Describe how an assignment, a recurrence rule, a due window and a grace period decide what is due and overdue.
  • Explain how an offline submission is queued, synced without loss and kept from duplicating.
  • Trace a failed answer to a linked record in another module and a submission through review to approval.

Assigning a form to a target

An assignment links a template to a target: an equipment, location, area, person, role or site. It has an assignee (a person or a job role), a recurrence rule, a due window and a grace period, and the next time it is due. A QR code on the asset opens the right form for that asset in one scan, which is how a round of the same eight gauges stays a round and not a search through a folder.

The recurrence rule is a line of text in the iCalendar standard, RFC 5545 [1]. Two examples: FREQ=DAILY is every day, and FREQ=WEEKLY;BYDAY=MO,WE,FR is every Monday, Wednesday and Friday. The rule is read with a start date and time to give the series of due times; the module stores the next one in next_due_at.

One due time, to scaleA due time of 06:00 with a 60-minute window ending at 07:00, when the specification counts it overdue, then a 15-minute grace period; this course escalates after 07:15. Drawn to scale. 06:00 due07:0007:1507:30Window: 60 minutes, on timeGrace: 15 minEscalatedPast the due window at 07:00: overdue in the specification's KPI.This course escalates and publishes frm.assignment.overdue after 07:15.
One due time, drawn to scale. The example is due at 06:00 with a 60-minute window and a 15-minute grace. On time means submitted by 07:00. From 07:00 it is past its due window, which is what the specification's overdue KPI counts. This course escalates, and publishes frm.assignment.overdue, only once the grace period has also run out at 07:15.

Offline-first capture

A plant has dead spots, and a form that needs a signal fails exactly where it matters. Offline-first means the phone holds everything it needs to run the form (the published version, the lists, the limits), saves each answer as it is entered, and puts a finished submission in a local queue. When a connection returns, the queue is sent.

From phone to serverAn offline submission is saved, queued with its own id on the phone and sent when possible. The server accepts it once, writes typed rows and confirms. PHONE (MAY BE OFFLINE)Save each answeras the person worksQueue the submissionown id, device_id, capture timesSend when it canretried until confirmedSERVERAccept it oncestamps its own timeWrite the typed rowsfrm_response, one per answerConfirm to the phonethe queue entry is clearedIf the confirmation is lost, the retry is recognised and not stored twice.
From phone to server. The phone saves each answer, queues the finished submission with its own id, device_id and capture times, and sends it when it can. The server accepts it once, stamps its own time, writes the typed rows, and confirms; if the confirmation is lost, the retry is recognised and not stored twice.
  • Auto-save so a locked screen or a dead battery loses nothing already entered.
  • A local queue that survives the app being closed, and shows the person how many submissions are waiting.
  • Conflict-free sync: each submission is created on the phone with its own id, so 50 queued submissions are 50 separate records and none can overwrite another. Sending the same submission twice must not create two.
  • Device ID and capture times preserved, with captured_offline set, and the server's clock as the record time (chapter 2).

Evidence and signatures

Each question can carry evidence: a photo with markup, a GPS stamp, a scanned barcode, a file. The signature is an e-signature stored through core_e_signature and linked from the submission, and it carries a meaning: the reason the person is signing, such as "performed" or "approved". A regulated record needs the meaning, the person and the time to be part of the signed record [3][4].

A failed answer starts work

A failed or out-of-limit answer is not the end of a record. It can create a record in another module and link back to it. Each such record is a row in frm_triggered_action with an action type, the target module and the new record's id, and a status of pending, created or failed.

From a failed answer to follow-up workA failed answer sets a flag on its response row, a rule creates a triggered action row, and the target record is made in M05, M08, M11 or the core. Failed answerfailed or out_of_limiton frm_responseRule firesmakes a row infrm_triggered_actionWork requestmodule M05NCRmodule M08Observationmodule M11Action itemthe coreEach record id points back to the submission.
From a failed answer to follow-up work. The answer sets failed or out_of_limit on its frm_response row, the rule creates a frm_triggered_action row, and the target record is made in the right module: a work request in M05, an NCR in M08, an observation in M11, or an action item in the core. The record ids point back to the submission.
action_typeWhat it createsOwning module
action_itemA task with an owner and a due dateCore (core_action_item)
work_requestA request for maintenanceM05
ncrA nonconformance reportM08
observationA recorded observation, such as a safety observationM11
notificationA message to a person or roleNo owner named
webhookA call to an outside systemNo owner named

The six action types and the modules M05, M08 and M11 come from the module specification. The one-line meanings are this course's plain wording, and the specification names no owner for notification or webhook, so none is claimed here.

The status matters: pending is waiting to be made, created means the target record exists and its id is stored, failed means it could not be made and a person must be told. Never let a failed action pass silently; an unrouted failed answer is the same as a form nobody read.

Review and approval

After submission, a supervisor sees the form in a review queue. They can approve it or reject it with a comment, and a form can have more than one approval step. The submission's status says where it is: submitted, in_review, approved, rejected, or void. Review is a design choice: a daily pre-start check might need none, a permit must have it.

Events the module sends and receives

The module publishes frm.submission.submitted, frm.submission.approved, frm.response.failed and frm.assignment.overdue. It consumes mes.operation_run.started (so launching a production run can open the line checks) and cmms.work_order.completed (so finishing a repair can open a post-maintenance inspection). Field-to-table mapping, webhooks and the event outbox make these links without code in the form itself. In this course's sessions only frm.assignment.overdue is built as required work (Session 4); the other three events, the field-to-table mapping and the webhooks belong to integration mapping, a BIC capability, and are an optional extension step in Session 4.

Exercise · Prove it offline, then fail an item20 minutes

You need: A phone with your built form open, a second device or the database, and a way to put the phone in airplane mode

Use the form you modelled in chapter 2 and the build from Session 3 or 4. Use synthetic data only; do not use a real person's name or real equipment tags.

Outcome: Three offline submissions arrive once each with both clocks kept; the failed answer has a linked record; one submission is approved and one rejected with a comment.

Knowledge check

A phone sends the same queued submission twice because the first confirmation was lost. What must happen?

Knowledge check

An item is due at 06:00 with a 60-minute due window and a 15-minute grace period. When does the grace period run out?

References

  1. IETF RFC 5545: Internet Calendaring and Scheduling Core Object Specification (iCalendar). https://www.rfc-editor.org/rfc/rfc5545
  2. W3C: Web Content Accessibility Guidelines (WCAG) 2.2. https://www.w3.org/TR/WCAG22/
  3. eCFR: Title 21, Part 11, Electronic records; electronic signatures. https://www.ecfr.gov/current/title-21/chapter-I/subchapter-A/part-11
  4. European Commission: EudraLex Volume 4, EU GMP guidelines (includes Annex 11, computerised systems). https://health.ec.europa.eu/medicinal-products/eudralex/eudralex-volume-4_en
  5. GoFormz: mobile inspection management. https://goformz.com/use-cases/inspections

Chapter 4 · From the old sheet to the new record

Ingest, measure and cut over

Most forms already exist on paper or in an old tool. This chapter covers reading a paper form with AI under human review, measuring whether the module is working, moving history across, and the four tests that say the module is done.

25 minAI proposes, a person decides5 KPIs4 definition-of-done tests

By the end of this chapter you can

  • Describe paper ingestion as a job with a human review step, and say what is stored as provenance.
  • Define the five KPIs and check a dashboard against a hand count.
  • Plan a migration from an incumbent tool and state the four tests that mean the module is done.

Paper ingestion with a person in the loop

Typing a hundred paper forms into a designer is slow work. Paper ingestion lets a person upload a PDF or a photo of a paper form; AI proposes the fields, their types, limits and layout; and a reviewer accepts or edits each field one by one. Nothing the AI proposes becomes a live form until a person has reviewed it.

One ingestion jobA paper form scan becomes an ingestion job, moves from queued to extracting to in_review, and on approval creates a draft template version. On rejection or failure nothing is created. Source filescan or photoqueuedextractingin_reviewaccept or edit fieldsDraft versionresulting_version_idapprovedNothing createdrejected or failed
One ingestion job. The source file becomes an frm_ingestion_job. It moves from queued to extracting, then in_review, where a reviewer accepts or edits each field. On approval, a draft frm_template_version is created and linked as resulting_version_id; on rejection or failure, nothing is created.
Job statusMeaning
queuedUploaded and waiting
extractingThe AI is reading the file and proposing fields
in_reviewA reviewer is accepting or editing each proposed field
approvedReviewed; a version was created from it
rejectedA reviewer decided the proposal was not usable
failedThe job itself could not be completed

The job stores the file it came from (source_attachment_id), the proposal (extracted, as JSON), an average confidence (mean_confidence), who reviewed it and when, and the version it produced. The version also records source_ingestion_id. This is the provenance: anyone can later see which fields came from the machine, which a person changed, and who approved them, which is the attributable attribute again [5]. The proposal itself is also recorded as an AI suggestion in core_ai_suggestion.

Measuring whether it works

Five KPIs come with the module. Each has a definition that can be counted from the tables in chapter 2, so a dashboard can be checked against a hand count.

KPIDefinitionCounted from
Completion rateSubmitted on time ÷ scheduled in the periodfrm_assignment, frm_submission
Overdue count and ageingAssignments past their due window, by area and assignee (the specification's definition; this course escalates only after the grace period as well, chapter 3)frm_assignment, next_due_at
First-pass pass rateSubmissions with zero failed items ÷ submissionsfrm_submission, frm_response.failed
Failure ParetoFailed answers by question, asset and areafrm_response, subject_id
Paper ingestion acceptanceAI-proposed fields accepted without edit ÷ proposedfrm_ingestion_job.extracted
A hand count on a synthetic seedTwelve scheduled assignments: nine on time, two late, one overdue. Completion rate is 9 over 12, 75 percent. First-pass is 8 over 11 submissions. 123456789101112On time: 9Late: 2Overdue: 1Completion ratesubmitted on time ÷ scheduled9 ÷ 12 = 75%First-pass pass rateno failed item ÷ submissions8 ÷ 11 (eleven submitted)A synthetic seed made up for the lab, not a measurement of any business.
A hand count on a synthetic seed. Twelve scheduled assignments: nine on time, two late, one overdue. Completion rate is 9 ÷ 12 = 75%. Eleven were submitted; eight had no failed item, so first-pass is 8 ÷ 11. The seed is made up for the lab, not a measurement of any business.

The lab seeds synthetic submissions on purpose. If the dashboard says 75% and your hand count of the seed says 75%, the dashboard is right for that data; if it differs, the definition in the query is wrong or the rule for "on time" from chapter 3 was not applied the same way. A KPI nobody can reproduce by hand is a number nobody should trust.

Moving off the old tool

Per the module specification, SafetyCulture, GoFormz and Fulcrum all offer CSV or API export of templates and submissions. That is the specification's statement, not something the product pages cited here confirm, so check what your own tool gives you on the vendor's own page before you plan. The migration rule is the same as for versions in chapter 2: templates import as draft versions, for a person to review and publish, and historical submissions import as read-only archived records. They are evidence of what happened, so they must never be editable and never counted as new work.

  1. Export templates and submissions from the incumbent and keep the files untouched as the original.
  2. Map each template to a draft frm_template with a version; review and publish the ones still in use.
  3. Load historical submissions as archived, read-only rows, with the original dates kept and a note of which tool they came from.
  4. Run both systems side by side for a short, fixed period on a few forms, then move form by form.
  5. Cancel a subscription only after the export is safe and the replacement has passed its tests. Read the incumbent's contract for the notice period before relying on a date.

Done means testable

The definition of done is four tests an agent can run, and you should run them yourself.

  • A form designed in the builder can be executed offline on a phone and syncs with zero data loss across 50 queued submissions.
  • A published version cannot be modified, enforced by the database.
  • A failed answer creates a linked record in another installed module.
  • The completion and overdue dashboards match a hand count on seeded data.
Exercise · Ingest a scanned form and review it field by field20 minutes

You need: A scan or photo of one blank paper form, your ingestion screen, and the person who fills the form in

Use a blank form with no names, signatures or personal details on it. Check with your supervisor that you may upload it.

Outcome: A draft version created from a paper form after a person reviewed every field, with an acceptance figure from your own count and a published version you could not edit.

Knowledge check

The AI has proposed a number field with no upper limit. What should the reviewer do?

Knowledge check

How should a historical submission from the old tool be imported?

References

  1. GoFormz: mobile inspection management. https://goformz.com/use-cases/inspections
  2. Microsoft Store: SafetyCulture (iAuditor) feature list. https://apps.microsoft.com/detail/9nblggh5flq2
  3. Clappia: GoFormz alternatives. https://www.clappia.com/blog/top-goformz-alternatives
  4. Guideflow: best digital checklist software. https://www.guideflow.com/blog/digital-checklist-software
  5. FDA: Data integrity and compliance with drug CGMP: questions and answers (2018). https://www.fda.gov/regulatory-information/search-fda-guidance-documents/data-integrity-and-compliance-drug-cgmp-questions-and-answers

Chapter 5 · 12 questions · 80% passes

Final assessment

Twelve questions across the element. Score 80% (10 of 12) to pass. Your LMS records your score and each answer; you can review the chapters and try again.

15 min12 questions≈ 15 minutesRetake allowed

Choose one answer for each question, then submit. You will see the right answer and why for every question.

1. What is a governed digital record, as Paper to Glass builds it?
2. Which module owns controlled SOP authoring and approval, which Paper to Glass leaves out?
3. A capability is marked MVP. What does that mean?
4. Which ALCOA+ attribute says a record must be made at the time the work is done?
5. What happens to a published template version when the form needs to change?
6. Why are answers stored as typed rows in frm_response and not only as a JSON blob?
7. A form is filled in offline at 06:00 and synced at 09:30. What does the module keep?
8. Which RFC defines the recurrence rules (RRULE) used for scheduled rounds and inspections?
9. A queued submission is sent twice because the confirmation was lost. What must the server do?
10. A number answer falls outside the limits on its frm_field row. What should the module do?
11. In paper ingestion, who decides which AI-proposed fields go into the form?
12. How are historical submissions from an incumbent tool imported?