[{"data":1,"prerenderedAt":371},["ShallowReactive",2],{"cms-page:app-builder":3,"icon:alert-triangle":185,"icon:arrows-exchange":196,"icon:chart-bar":203,"icon:clipboard-check":216,"icon:file-text":226,"icon:flag":242,"icon:forms":249,"icon:gauge":268,"icon:message-report":281,"icon:microscope":291,"icon:notebook":313,"icon:refresh":323,"icon:route":330,"icon:school":340,"icon:signature":347,"icon:truck":351,"icon:user-shield":361},{"slug":4,"seo":5,"sections":8},"\u002Fapp-builder",{"title":6,"description":7},"App Builder — QAbility | Your Process as a Record Type","Draw a form, then promote it into a record type of its own — a menu entry, numbering, a permission line and a Draft, Open, Closed and Cancelled lifecycle.",[9,25,131,155,178],{"type":10,"id":11,"eyebrow":12,"title":13,"highlight":14,"blurb":15,"actions":16,"image":23},"hero","top","App Builder","Your process,","a first-class record type.","Draw the form, promote it, and it stops being a form. It gets its own menu entry, its own numbering and its own line in the permission matrix, and its records run on the same workflow engine, task list and audit trail as the records we ship.",[17,20],{"label":18,"href":19},"Book a demo","\u002Fcontact",{"label":21,"href":22},"See pricing","\u002Fpricing",{"src":24},"app-builder.hero",{"type":26,"name":27,"id":28,"eyebrow":29,"title":30,"blurb":31,"data":32},"signature","promoteDiff","promote","What promotion does","One dialog turns a form into a record type.","Promotion is not a label change. Here is the form before, the record type after, and every row the promotion writes in between.",{"limitsNote":33,"before":34,"command":44,"after":53,"diffLabel":63,"diffCaption":64,"hunks":65,"lifecycleLabel":99,"states":100,"rules":114,"limitsLabel":125,"limits":126},"A module you build gets most of what a built-in record has, not all of it. What is missing is listed at the end of this section.",{"tag":35,"kind":36,"name":37,"place":38,"facts":39},"Before","A form template","Supplier qualification","App Builder › Forms",[40,41,42,43],"Sections and fields drawn on the form canvas","Entries land in the shared Submissions list","Governed by the shared submissions permission, not one of its own","No menu entry and no numbering of its own",{"action":45,"fields":46,"rule":52},"Promote to Module",[47,49],{"label":48,"value":37},"Module name",{"label":50,"value":51},"Internal key","supplier_qual","Reserved names, keys already in use and reusable form blocks are refused.",{"tag":54,"kind":55,"name":37,"place":56,"facts":57},"After","A record type","Main menu › Supplier qualification",[58,59,60,61,62],"Its own menu entry and its own register","Record numbers from its own counter, in the template’s prefix","Its own line in the roles and permissions matrix","Routed sections run as steps on the workflow engine, in the task list","Every write to its records lands in the audit trail","What promotion writes","One transaction: it all lands, or none of it does",[66,78,85,92],{"target":67,"table":68,"lines":69},"The template","form_templates",[70,73,76],{"text":71,"note":72},"internal_name = 'supplier_qual'","Permanent. The database refuses any later change to it.",{"text":74,"note":75},"is_module = true","One-way. Turning a module back into a plain form is refused.",{"text":77},"display name = 'Supplier qualification'",{"target":79,"table":80,"lines":81},"The permission catalog","authz.modules",[82],{"text":83,"note":84},"module 'supplier_qual' · section 'Custom Modules'","Owned by your company. Another company’s module can share the key without ever meeting yours.",{"target":86,"table":87,"lines":88},"Its actions","authz.module_actions",[89],{"text":90,"note":91},"create · read · update · delete · manage_access","manage_access is the right to share a record outside the company.",{"target":93,"table":94,"lines":95},"The first grants","authz.role_module_permissions",[96],{"text":97,"note":98},"every action · Company-wide · to each role that can create form templates","Every other role starts with no access to the new module.","What each record of it lives under",[101,104,107,110],{"status":102,"via":103},"draft","Created from the module’s register, with no number yet. A rejection at an approval step returns it here.",{"status":105,"via":106},"open","Started: the number is minted and each routed section becomes a step in its assignee’s task list.",{"status":108,"via":109},"closed","Closed by the owner once every workflow task is done.",{"status":111,"via":112,"signed":113,"branch":113},"cancelled","Cancelled from Open, with a written reason and an electronic signature.",true,[115,118,121,123],{"text":116,"enforcedBy":117},"Records are created only in Draft, and status moves only along the lifecycle. The app cannot write a status directly.","db",{"text":119,"enforcedBy":120},"Close is refused while any task on the record’s workflow is still open.","server",{"text":122,"enforcedBy":120},"Cancel needs a written reason and your electronic signature, recorded against the record.",{"text":124,"enforcedBy":120},"Start, close, cancel and sharing each check that your role may update records of this module.","What it doesn’t do yet",[127,128,129,130],"Closing a record is not signed. Only cancelling is.","Access is company-wide. The matrix offers no own, department or site tier for a module you build.","Nothing links into a module record automatically. Links to NCs, CAPAs and other records are made by hand.","Promotion is one-way. A module can be archived, but not turned back into a form or deleted.",{"type":132,"id":132,"eyebrow":133,"title":134,"blurb":135,"rules":136},"ledger","The rules, and who enforces them","What the builder won’t let happen","The form you draw is yours to change. What it already captured, and what it became, are not.",[137,140,143,146,149,152],{"rule":138,"detail":139,"enforcedBy":117},"A module is permanent","Its key is the menu route, the permission line and the workflow’s name, so a trigger refuses any change to it, and refuses turning the module back into a plain form.",{"rule":141,"detail":142,"enforcedBy":117},"One key per company","A partial unique index holds each module key unique inside your company. The server checks the pattern and the reserved names before it gets that far.",{"rule":144,"detail":145,"enforcedBy":117},"A record keeps its module","A record belongs to the module it was created under for its whole life. Moving it to another is refused.",{"rule":147,"detail":148,"enforcedBy":117},"A form in use cannot be deleted","Only a draft template that was never activated or promoted can be deleted. Anything else is refused, so you archive it instead.",{"rule":150,"detail":151,"enforcedBy":120},"The form freezes when a record starts","Starting a record stores the form as it stood at that moment, and each workflow step copies its own section. Editing the template later changes new records, not captured ones.",{"rule":153,"detail":154,"enforcedBy":120},"A register without gaps","Numbers are minted at start, not at draft, so a deleted draft never uses one up. Two people starting records at once queue on the counter instead of colliding.",{"type":156,"id":156,"eyebrow":157,"title":158,"items":159},"faq","Before you build","The questions a quality manager asks second",[160,163,166,169,172,175],{"q":161,"a":162},"What can I call a module, and what exactly does promoting one write?","The key starts with a letter and runs 2 to 40 characters of lowercase letters, digits and underscores. Built-in names such as records, capa and nonconformance are reserved, the key must be unique inside your company, and a reusable form block or a template that is already a module is refused. The template update, the module, its five actions and the first grants are written in one transaction, so a failure leaves nothing behind.",{"q":164,"a":165},"Who can use a module I build?","At promotion, every role that can create form templates gets every action on the new module, company-wide. Every other role starts with none until an administrator grants it in the roles matrix. For a module you build, the matrix offers company-wide access only, with no own, department or site tier, so plan the roles that hold it accordingly.",{"q":167,"a":168},"Can a record of my module carry an electronic signature?","Cancelling one does: it needs a written reason and your electronic signature, recorded against the record itself. Closing one does not. A routed section can also be set to require a signature on its workflow step, and that signature is recorded against the step, not the record. If the close itself must be signed, put that process on a record type whose close is signed.",{"q":170,"a":171},"Can I find and print module records?","Yes. Module records are indexed for the global search alongside nonconformances and CAPAs, a result opens the record in its own module, and search can be narrowed to one module. Each record also has a print view that lays out its fields and every routed section with its answers, against the form as it stood when the record started.",{"q":173,"a":174},"If I change the form later, what happens to records already captured?","Nothing. A record stores the form as it stood when it started, and each workflow step copies its own section, so editing or archiving the template changes new records only. A template’s version number can never go backwards, so two different forms can never answer to the same version.",{"q":176,"a":177},"Can I delete a form template?","Only a draft that was never activated or promoted. Once a template is live, or is a module, the database refuses the delete. Archive it instead: records, workflow steps and the module itself still reference it.",{"type":179,"id":180,"eyebrow":181,"title":182,"body":183,"action":184},"ctaPanel","cta","Build it, govern it the same way","Bring the process you still run in a spreadsheet.","We’ll model one of yours on the call.",{"label":18,"href":19},[186,190,193],[187,188],"path",{"d":189},"M12 9v4",[187,191],{"d":192},"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",[187,194],{"d":195},"M12 16h.01",[197,200],[187,198],{"d":199},"M7 10h14l-4 -4",[187,201],{"d":202},"M17 14h-14l4 4",[204,207,210,213],[187,205],{"d":206},"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",[187,208],{"d":209},"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",[187,211],{"d":212},"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",[187,214],{"d":215},"M4 20h14",[217,220,223],[187,218],{"d":219},"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",[187,221],{"d":222},"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",[187,224],{"d":225},"M9 14l2 2l4 -4",[227,230,233,236,239],[187,228],{"d":229},"M14 3v4a1 1 0 0 0 1 1h4",[187,231],{"d":232},"M17 21h-10a2 2 0 0 1 -2 -2v-14a2 2 0 0 1 2 -2h7l5 5v11a2 2 0 0 1 -2 2",[187,234],{"d":235},"M9 9l1 0",[187,237],{"d":238},"M9 13l6 0",[187,240],{"d":241},"M9 17l6 0",[243,246],[187,244],{"d":245},"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",[187,247],{"d":248},"M5 21v-7",[250,253,256,259,262,265],[187,251],{"d":252},"M12 3a3 3 0 0 0 -3 3v12a3 3 0 0 0 3 3",[187,254],{"d":255},"M6 3a3 3 0 0 1 3 3v12a3 3 0 0 1 -3 3",[187,257],{"d":258},"M13 7h7a1 1 0 0 1 1 1v8a1 1 0 0 1 -1 1h-7",[187,260],{"d":261},"M5 7h-1a1 1 0 0 0 -1 1v8a1 1 0 0 0 1 1h1",[187,263],{"d":264},"M17 12h.01",[187,266],{"d":267},"M13 12h.01",[269,272,275,278],[187,270],{"d":271},"M3 12a9 9 0 1 0 18 0a9 9 0 1 0 -18 0",[187,273],{"d":274},"M11 12a1 1 0 1 0 2 0a1 1 0 1 0 -2 0",[187,276],{"d":277},"M13.41 10.59l2.59 -2.59",[187,279],{"d":280},"M7 12a5 5 0 0 1 5 -5",[282,285,288],[187,283],{"d":284},"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",[187,286],{"d":287},"M12 8v3",[187,289],{"d":290},"M12 14v.01",[292,295,298,301,304,307,310],[187,293],{"d":294},"M5 21h14",[187,296],{"d":297},"M6 18h2",[187,299],{"d":300},"M7 18v3",[187,302],{"d":303},"M9 11l3 3l6 -6l-3 -3l-6 6",[187,305],{"d":306},"M10.5 12.5l-1.5 1.5",[187,308],{"d":309},"M17 3l3 3",[187,311],{"d":312},"M12 21a6 6 0 0 0 3.715 -10.712",[314,317,320],[187,315],{"d":316},"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",[187,318],{"d":319},"M13 8l2 0",[187,321],{"d":322},"M13 12l2 0",[324,327],[187,325],{"d":326},"M20 11a8.1 8.1 0 0 0 -15.5 -2m-.5 -4v4h4",[187,328],{"d":329},"M4 13a8.1 8.1 0 0 0 15.5 2m.5 4v-4h-4",[331,334,337],[187,332],{"d":333},"M3 19a2 2 0 1 0 4 0a2 2 0 0 0 -4 0",[187,335],{"d":336},"M19 7a2 2 0 1 0 0 -4a2 2 0 0 0 0 4",[187,338],{"d":339},"M11 19h5.5a3.5 3.5 0 0 0 0 -7h-8a3.5 3.5 0 0 1 0 -7h4.5",[341,344],[187,342],{"d":343},"M22 9l-10 -4l-10 4l10 4l10 -4v6",[187,345],{"d":346},"M6 10.6v5.4a6 3 0 0 0 12 0v-5.4",[348],[187,349],{"d":350},"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",[352,355,358],[187,353],{"d":354},"M5 17a2 2 0 1 0 4 0a2 2 0 1 0 -4 0",[187,356],{"d":357},"M15 17a2 2 0 1 0 4 0a2 2 0 1 0 -4 0",[187,359],{"d":360},"M5 17h-2v-11a1 1 0 0 1 1 -1h9v12m-4 0h6m4 0h2v-6h-8m0 -5h5l3 5",[362,365,368],[187,363],{"d":364},"M6 21v-2a4 4 0 0 1 4 -4h2",[187,366],{"d":367},"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",[187,369],{"d":370},"M8 7a4 4 0 1 0 8 0a4 4 0 0 0 -8 0",241564436]