[{"data":1,"prerenderedAt":394},["ShallowReactive",2],{"cms-page:platform":3,"icon:alert-triangle":208,"icon:arrows-exchange":219,"icon:chart-bar":226,"icon:clipboard-check":239,"icon:file-text":249,"icon:flag":265,"icon:forms":272,"icon:gauge":291,"icon:message-report":304,"icon:microscope":314,"icon:notebook":336,"icon:refresh":346,"icon:route":353,"icon:school":363,"icon:signature":370,"icon:truck":374,"icon:user-shield":384},{"slug":4,"seo":5,"sections":8},"\u002Fplatform",{"title":6,"description":7},"QAbility Platform — One Approval Engine for Quality Records","One versioned approval engine runs documents, CAPA, nonconformance, change control, audits, inspection and your own record types, with one task inbox.",[9,25,112,132,159,185,202],{"type":10,"id":11,"eyebrow":12,"title":13,"highlight":14,"blurb":15,"actions":16,"image":23},"hero","top","Platform","One approval engine.","One inbox. One ledger.","Document versions, CAPAs, nonconformances, change requests, complaints, audits and inspection lots all approve through the same engine, and so do the record types you build. Every step lands in one task inbox, and every signature in one ledger. Learn it once.",[17,20],{"label":18,"href":19},"Book a demo","\u002Fcontact",{"label":21,"href":22},"See pricing","\u002Fpricing",{"src":24},"workflows.accountability",{"type":26,"name":27,"id":28,"eyebrow":29,"title":30,"blurb":31,"data":32},"signature","engineMap","engine","The engine","Many record types in. One engine. One place the work lands.","There is no second approval system anywhere in the product. Each record type below starts a run on the same chain of objects, named here after the tables that hold them.",{"spokesLabel":33,"spokes":34,"engineLabel":62,"chain":63,"outputs":92,"outside":109},"Record types wired to it",[35,38,41,44,47,50,53,56,59],{"name":36,"href":37},"Document versions","\u002Fdocuments",{"name":39,"href":40},"CAPAs","\u002Fcapa",{"name":42,"href":43},"Nonconformances","\u002Fnonconformance",{"name":45,"href":46},"Change requests","\u002Fchange-control",{"name":48,"href":49},"Quality and customer complaints","\u002Fcomplaints",{"name":51,"href":52},"Audits","\u002Faudits",{"name":54,"href":55},"Inspection lots and specifications","\u002Fqc-inspection",{"name":57,"href":58},"Log books","\u002Flogbooks",{"name":60,"href":61},"Record types you build","\u002Fapp-builder","One workflow engine",[64,68,73,78,83,88],{"name":65,"table":66,"detail":67},"Template","workflows","The process, drawn once: steps in order or in parallel, reviewers by role or by name, ALL or ANY to pass, a due-in, and whether a comment or a signature is required.",{"name":69,"table":70,"detail":71,"guard":72},"Version","workflow_versions","Publishing retires the version before it, so one version is live. A step with nobody to review it cannot be published.","A retired or archived version never comes back.",{"name":74,"table":75,"detail":76,"guard":77},"Run","workflow_instances","One per record submitted, tied to the version it started on.","Its status moves only through the engine’s own actions.",{"name":79,"table":80,"detail":81,"guard":82},"Step","workflow_instance_steps","Carries its own copy of the rule, due-in, comment and signature settings, so editing the template later does not rewire a run in flight.","Its status moves only along legal edges, and only through the engine.",{"name":84,"table":85,"detail":86,"guard":87},"Task","task_instances","Activating a step gives each reviewer a task with a due date.","An approval task cannot be actioned except through the endpoint that checks the signature.",{"name":89,"table":90,"detail":91},"Signature","signatures","Where the step asks for one, the reviewer re-authenticates and the signature is written against their task or step.",[93,100],{"label":94,"title":95,"detail":96,"points":97},"One inbox","My Tasks","Whatever module a step belongs to, the task lands in the same queue, with its record and due date.",[98,99],"Documents, CAPAs and NCs side by side","Overdue dates stand out",{"label":101,"title":102,"detail":103,"points":104,"href":107,"linkLabel":108},"One ledger","Signatures and the audit trail","Every signature is a row in one signature ledger, and every change to templates, runs, steps and tasks is on the audit trail.",[105,106],"One signature table for every record type","The same append-only audit trail","\u002Faudit-trail","Anatomy of a signature",{"label":110,"text":111},"Not on the engine.","Quality events and training have their own, simpler flows: an event has one assigned reviewer, and training runs on assignment, completion and a manager’s verification. And a run does not branch on the record’s data. Steps run in the order the template sets.",{"type":113,"id":113,"items":114},"showcase",[115,123],{"eyebrow":94,"title":116,"body":117,"points":118,"image":122},"Everything waiting on you, wherever it came from.","A step activating anywhere in the system creates a task. Those tasks land in one list with their record, its type and its due date, so nobody has to remember which module was waiting on them.",[119,120,121],"Assignments from every module in a single queue","Due dates computed from the step that created them","Open the record straight from the task","platform.inbox",{"eyebrow":124,"title":125,"body":126,"points":127,"image":131},"Automation rules","When this happens, tell these people.","A rule reads: when a record of this type is created, updated or changes status, and these conditions match, do this, optionally only at certain sites or in certain departments. Most actions notify groups, people, the owner, the supplier or outside email addresses. A quality event can also raise a nonconformance, and a record type you build can raise a task.",[128,129,130],"Conditions over the record’s own fields","Scoped by site and department","Works on the record types your admins build, including a daily date check","platform.automation",{"type":133,"id":133,"eyebrow":134,"title":135,"blurb":136,"rules":137},"ledger","The rules","What the engine will not let anyone do","The rules sit on the engine’s own tables, so a direct write through the app’s GraphQL API is refused like any other caller.",[138,142,145,148,152,155],{"rule":139,"detail":140,"enforcedBy":141},"Set a run or a step to approved by hand","Run and step statuses change only through the engine’s actions, such as approve, reject, reassign and cancel, and only along legal edges.","db",{"rule":143,"detail":144,"enforcedBy":141},"Tick off an approval task directly","An approval task can only be actioned through the endpoint that verifies the signature and advances the run. A task cannot be re-pointed at another record.",{"rule":146,"detail":147,"enforcedBy":141},"Bring back a retired process","Retired and archived template versions are terminal. To change the process, you publish a new version.",{"rule":149,"detail":150,"enforcedBy":151},"Publish a step nobody can review","Publishing is refused, and the version goes back to draft, if any step has neither a role nor a named reviewer.","server",{"rule":153,"detail":154,"enforcedBy":151},"Rewire an approval already in flight","Each run keeps its own copy of the step rule, due-in, comment and signature settings. Template edits apply to the next run.",{"rule":156,"detail":157,"enforcedBy":158},"The route, the reviewers and the deadlines","Steps, parallel groups, ALL or ANY, due-ins and comment and signature requirements are yours to set per template.","configure",{"type":160,"id":160,"eyebrow":161,"title":162,"blurb":163,"columns":164,"rows":167,"note":184},"table","Connections","What it connects to today","A short list, and a true one.",[165,166],"Connection","What it is for",[168,172,176,180],{"label":169,"cells":170},"Service accounts",[171],"Machine users for system-to-system work. They have no password and cannot sign in; their keys are shown once and stored hashed, and they act with only the roles you give them. Created by a person, never self-issued, and set up with us on request.",{"label":173,"cells":174},"Google and Microsoft",[175],"Sign in with the accounts your people already have.",{"label":177,"cells":178},"Google Cloud Storage or S3-compatible storage",[179],"Document and attachment storage.",{"label":181,"cells":182},"SendGrid",[183],"Outbound notification email.","There is no public API, no webhooks and no ERP, MES or LIMS connector today.",{"type":186,"id":186,"eyebrow":187,"title":188,"items":189},"faq","Straight answers","What evaluators ask about the engine",[190,193,196,199],{"q":191,"a":192},"Does every record type run on the engine?","No. Document versions, CAPAs, nonconformances, change requests, both kinds of complaint, audits, inspection lots, specifications, log books and the record types you build do. Quality events have one assigned reviewer instead, and training runs on assignment, completion and a manager’s verification.",{"q":194,"a":195},"Can a workflow branch on the record’s data?","No. A template runs its steps in the order it sets, sequentially or in parallel groups. It does not choose a path from a field on the record. If two kinds of record need different routes, give them different templates.",{"q":197,"a":198},"What happens to approvals in flight when we change the process?","They finish on the settings they started with. Each run keeps its own copy of the step rules, due-ins and comment and signature requirements, and publishing a new version retires the old one for the next run.",{"q":200,"a":201},"Is there an API or webhooks?","Not a public one, and no webhooks. For system-to-system work we set up a service account with you: a machine user with its own roles, no password, and a key that is shown once and stored hashed.",{"type":203,"id":204,"eyebrow":205,"title":206,"action":207},"ctaPanel","cta","One system, not a suite","See one engine run your documents, CAPAs and NCs.",{"label":18,"href":19},[209,213,216],[210,211],"path",{"d":212},"M12 9v4",[210,214],{"d":215},"M10.363 3.591l-8.106 13.534a1.914 1.914 0 0 0 1.636 2.871h16.214a1.914 1.914 0 0 0 1.636 -2.87l-8.106 -13.536a1.914 1.914 0 0 0 -3.274 0",[210,217],{"d":218},"M12 16h.01",[220,223],[210,221],{"d":222},"M7 10h14l-4 -4",[210,224],{"d":225},"M17 14h-14l4 4",[227,230,233,236],[210,228],{"d":229},"M3 13a1 1 0 0 1 1 -1h4a1 1 0 0 1 1 1v6a1 1 0 0 1 -1 1h-4a1 1 0 0 1 -1 -1l0 -6",[210,231],{"d":232},"M15 9a1 1 0 0 1 1 -1h4a1 1 0 0 1 1 1v10a1 1 0 0 1 -1 1h-4a1 1 0 0 1 -1 -1l0 -10",[210,234],{"d":235},"M9 5a1 1 0 0 1 1 -1h4a1 1 0 0 1 1 1v14a1 1 0 0 1 -1 1h-4a1 1 0 0 1 -1 -1l0 -14",[210,237],{"d":238},"M4 20h14",[240,243,246],[210,241],{"d":242},"M9 5h-2a2 2 0 0 0 -2 2v12a2 2 0 0 0 2 2h10a2 2 0 0 0 2 -2v-12a2 2 0 0 0 -2 -2h-2",[210,244],{"d":245},"M9 5a2 2 0 0 1 2 -2h2a2 2 0 0 1 2 2a2 2 0 0 1 -2 2h-2a2 2 0 0 1 -2 -2",[210,247],{"d":248},"M9 14l2 2l4 -4",[250,253,256,259,262],[210,251],{"d":252},"M14 3v4a1 1 0 0 0 1 1h4",[210,254],{"d":255},"M17 21h-10a2 2 0 0 1 -2 -2v-14a2 2 0 0 1 2 -2h7l5 5v11a2 2 0 0 1 -2 2",[210,257],{"d":258},"M9 9l1 0",[210,260],{"d":261},"M9 13l6 0",[210,263],{"d":264},"M9 17l6 0",[266,269],[210,267],{"d":268},"M5 5a5 5 0 0 1 7 0a5 5 0 0 0 7 0v9a5 5 0 0 1 -7 0a5 5 0 0 0 -7 0v-9",[210,270],{"d":271},"M5 21v-7",[273,276,279,282,285,288],[210,274],{"d":275},"M12 3a3 3 0 0 0 -3 3v12a3 3 0 0 0 3 3",[210,277],{"d":278},"M6 3a3 3 0 0 1 3 3v12a3 3 0 0 1 -3 3",[210,280],{"d":281},"M13 7h7a1 1 0 0 1 1 1v8a1 1 0 0 1 -1 1h-7",[210,283],{"d":284},"M5 7h-1a1 1 0 0 0 -1 1v8a1 1 0 0 0 1 1h1",[210,286],{"d":287},"M17 12h.01",[210,289],{"d":290},"M13 12h.01",[292,295,298,301],[210,293],{"d":294},"M3 12a9 9 0 1 0 18 0a9 9 0 1 0 -18 0",[210,296],{"d":297},"M11 12a1 1 0 1 0 2 0a1 1 0 1 0 -2 0",[210,299],{"d":300},"M13.41 10.59l2.59 -2.59",[210,302],{"d":303},"M7 12a5 5 0 0 1 5 -5",[305,308,311],[210,306],{"d":307},"M18 4a3 3 0 0 1 3 3v8a3 3 0 0 1 -3 3h-5l-5 3v-3h-2a3 3 0 0 1 -3 -3v-8a3 3 0 0 1 3 -3h12",[210,309],{"d":310},"M12 8v3",[210,312],{"d":313},"M12 14v.01",[315,318,321,324,327,330,333],[210,316],{"d":317},"M5 21h14",[210,319],{"d":320},"M6 18h2",[210,322],{"d":323},"M7 18v3",[210,325],{"d":326},"M9 11l3 3l6 -6l-3 -3l-6 6",[210,328],{"d":329},"M10.5 12.5l-1.5 1.5",[210,331],{"d":332},"M17 3l3 3",[210,334],{"d":335},"M12 21a6 6 0 0 0 3.715 -10.712",[337,340,343],[210,338],{"d":339},"M6 4h11a2 2 0 0 1 2 2v12a2 2 0 0 1 -2 2h-11a1 1 0 0 1 -1 -1v-14a1 1 0 0 1 1 -1m3 0v18",[210,341],{"d":342},"M13 8l2 0",[210,344],{"d":345},"M13 12l2 0",[347,350],[210,348],{"d":349},"M20 11a8.1 8.1 0 0 0 -15.5 -2m-.5 -4v4h4",[210,351],{"d":352},"M4 13a8.1 8.1 0 0 0 15.5 2m.5 4v-4h-4",[354,357,360],[210,355],{"d":356},"M3 19a2 2 0 1 0 4 0a2 2 0 0 0 -4 0",[210,358],{"d":359},"M19 7a2 2 0 1 0 0 -4a2 2 0 0 0 0 4",[210,361],{"d":362},"M11 19h5.5a3.5 3.5 0 0 0 0 -7h-8a3.5 3.5 0 0 1 0 -7h4.5",[364,367],[210,365],{"d":366},"M22 9l-10 -4l-10 4l10 4l10 -4v6",[210,368],{"d":369},"M6 10.6v5.4a6 3 0 0 0 12 0v-5.4",[371],[210,372],{"d":373},"M3 17c3.333 -3.333 5 -6 5 -8c0 -3 -1 -3 -2 -3s-2.032 1.085 -2 3c.034 2.048 1.658 4.877 2.5 6c1.5 2 2.5 2.5 3.5 1l2 -3c.333 2.667 1.333 4 3 4c.53 0 2.639 -2 3 -2c.517 0 1.517 .667 3 2",[375,378,381],[210,376],{"d":377},"M5 17a2 2 0 1 0 4 0a2 2 0 1 0 -4 0",[210,379],{"d":380},"M15 17a2 2 0 1 0 4 0a2 2 0 1 0 -4 0",[210,382],{"d":383},"M5 17h-2v-11a1 1 0 0 1 1 -1h9v12m-4 0h6m4 0h2v-6h-8m0 -5h5l3 5",[385,388,391],[210,386],{"d":387},"M6 21v-2a4 4 0 0 1 4 -4h2",[210,389],{"d":390},"M22 16c0 4 -2.5 6 -3.5 6s-3.5 -2 -3.5 -6c1 0 2.5 -.5 3.5 -1.5c1 1 2.5 1.5 3.5 1.5",[210,392],{"d":393},"M8 7a4 4 0 1 0 8 0a4 4 0 0 0 -8 0",241564436]