{"description":"Runs on a Process item created at kickoff (process_type = it_general_control, process_owner = the integration owner, frequency = the sync cadence) that represents the bridge as an operated, auditable IT process — the workflow instance attaches to and enriches that Process item, never a duplicate. Bridges an external enterprise GRC platform (e.g., RSA Archer, ServiceNow GRC, Workday, AuditBoard) with AssureSwarm: define field and ID mappings, run the initial migration or provisioning (which creates Risk / Control / Issue / Audit / Policy items and Control-hosted testing workflows for imported control-test records), operate a monitored bidirectional scheduled sync, resolve conflicts, and confirm system-of-record agreement. This workflow originates the integration project — it consumes no upstream handoff. In scope: mapping design, initial load, ongoing sync operation and health monitoring, conflict resolution, and system-of-record sign-off. Out of scope: standing up the external GRC platform itself, and the downstream assurance analysis. The named deliverable is a version-stamped final bridge package (evidence index, executive summary, authoritative per-field system-of-record coverage table, open-items list), handed to the Combined Assurance Mapping workflow, which consumes it rather than re-deriving the record inventory.","edges":[{"id":"e-define-field-and-id-mapping-resolve-conflicts","source":"define-field-and-id-mapping","target":"resolve-conflicts"},{"id":"e-resolve-conflicts-classify-disposition","source":"resolve-conflicts","target":"classify-disposition"},{"id":"e-classify-disposition-create-action-plan","label":"Action","source":"classify-disposition","target":"create-action-plan","whenValue":"action_required"},{"id":"e-classify-disposition-handoff-to-related-workflow","label":"Clear","source":"classify-disposition","target":"handoff-to-related-workflow","whenValue":"clear"},{"id":"e-create-action-plan-handoff-to-related-workflow","source":"create-action-plan","target":"handoff-to-related-workflow"}],"isPublic":true,"metadata":{"capabilities":[],"controlVerbs":{},"controls":["UC-AUDIT-25","UC-ACCESS-20"],"department":"it","domains":["grc"],"library":{"aliases":[],"canonicalUrl":"https://workflow-library.com/all/?w=grc-platform-integration-bridge","contentDigest":"sha256:9d6ffd17fc78a11ed47618dee3281cc83e9d627ec2d01d83b80fbe712a6b007b","prerequisites":{"status":"undeclared"},"provenance":[],"releaseId":"sha256:9d6ffd17fc78a11ed47618dee3281cc83e9d627ec2d01d83b80fbe712a6b007b","schemaVersion":1,"sourceTemplateId":"workflow-library:grc-platform-integration-bridge"},"lineOfDefense":"monitor","mappingStatus":"mapped","risks":[],"slug":"grc-platform-integration-bridge","source":"coworkcanvas-gallery","standards":[],"teams":["it","risk-management"]},"name":"Enterprise GRC Platform Integration Bridge","nodes":[{"data":{"description":"Define the source-to-target field and identity mapping between the external GRC platform and AssureSwarm","instructions":"**Objective** — Produce a reviewed, unambiguous field-and-identity mapping between the external GRC platform (Archer/ServiceNow/Workday/AuditBoard) and the AssureSwarm item model, so every later migration, provisioning, and sync operation writes the right value to the right field under a stable cross-system key.\n\n**Inputs**\n- The two systems being bridged and their record scope: which object types move — risks (Risk items), controls (Control items), issues (Issue items), assessments (Audit items), policies (Policy items), control tests (Control-hosted SOX testing workflows) — and the direction each flows. The external GRC platform is already stood up outside AssureSwarm; AssureSwarm holds only evidence of it.\n- The source schema export, uploaded as a PBC/external file (XLSX/CSV) on this step: each object's fields, data types, picklist/enumeration values, required flags, and the field that holds its native record ID.\n- The AssureSwarm target: the tenant's studio item-type definitions and their fields (Audit, Risk, Control, Issue, Process, SOX, Policy) — the target schema the mapping writes to. This workflow's governing controls are UC-AUDIT-25 and UC-ACCESS-20 (the two Control items in the library) — audit-trail and access scoping constrain which fields may cross.\n- Any existing correlation keys — e.g. `Control.control_id` or `Control.control_id` on the current Control/SOX populations — that can anchor identity without minting new IDs.\n\n**Procedure**\n1. For each object type in scope, list every source field and mark it map / transform / drop. Record the target AssureSwarm field for each mapped field; a field with no honest target is dropped with a one-line reason, never silently forced.\n2. Reconcile data types and enumerations explicitly: map each source picklist value to a target value (e.g., Archer severity `4-Critical` to AssureSwarm `Critical`). Any source value with no target is an enumeration gap — list it; do not let the sync coerce it to a default.\n3. Establish the identity key. Prefer a natural correlation key present in both systems; where none exists, define a deterministic composite (object type + native source ID) and record how the reverse lookup resolves it. This key is what every later step joins on — get it stable now.\n4. Fix directionality and authority per field: for each mapped field name which system is the system of record (source-authoritative, target-authoritative, or last-writer). Fields with no clear owner are the ones that generate conflicts later — flag them for the conflict-resolution policy.\n5. Note transform rules with worked examples: date/timezone normalization, string trimming, unit conversions, and any concatenation/split. Include one concrete before/after per non-trivial transform so a reviewer can reperform it.\n6. Capture access-scoping constraints (UC-ACCESS-20): which fields carry personal or restricted data and must be masked, restricted, or excluded from the mapping entirely.\n\n**Record in AssureSwarm** — Attach the mapping spec (field table, enumeration crosswalk, identity-key definition, transform rules, per-field authority) as an XLSX or PDF document on this step; the object types in scope and the mapping version are stated inside that document. Stamp the mapping version on the anchor Process item's `description` — there is no native mapping-version field, so the document is its system of record. Create the Item relationship linking the anchor Process item to the two governing Control items (UC-AUDIT-25, UC-ACCESS-20).\n\n**Exit criteria** — Every in-scope source field is mapped, transformed, or dropped-with-reason; every enumeration value has a target or a listed gap; the identity key is defined and deterministic; per-field system-of-record authority is assigned; the spec is attached and version-stamped.","label":"Define field and ID mapping","performedBy":{"agent":"grc-artist"}},"id":"define-field-and-id-mapping"},{"data":{"description":"Accountable data/control/access owners with integration owner: Adjudicate ambiguous values and newly assigned field authorities from a reconciled first load and observed sync, escalating design or access grants to their accountable owners.","instructions":"**Objective** — Run the reviewed initial load and monitored sync, retain reconciliation and round-trip evidence, and adjudicate genuine field conflicts with the accountable authority.\n\n**Inputs**\n- The reviewed mapping spec, enumeration crosswalk, and identity-key definition from the reviewed field-and-ID mapping contract (this step cannot start without it — it is the contract the load obeys).\n- Source record extracts for each in-scope object type, with native IDs.\n- The load mode per object: migrate (records already exist in source and move to AssureSwarm) or provision (records are created fresh in the target system, e.g., Workday provisioning).\n- Environment target: run against a staging/sandbox target first if one exists.\n- The persisted ID crosswalk and reconciliation baseline from the initial migration/provisioning stage (the sync updates only records that exist in the crosswalk).\n- The mapping spec's per-field system-of-record authority (which side wins per field).\n- The organization's sync cadence requirement (real-time/webhook, hourly, nightly) and the maintenance window.\n- The diverged-record queue and reject log produced by the sync health monitoring (records present on both sides with an authoritative field mismatch, plus records the sync refused to write).\n- The per-field system-of-record authority from the mapping spec.\n- The ID crosswalk, to confirm each conflicting pair is a true match and not a mis-join.\n\n**Procedure**\n*Autonomous preparation incorporates Run initial migration or provisioning; Establish scheduled sync; Accountable data/control/access owners with integration owner reviews the combined evidence.*\n1. Freeze a source baseline: snapshot the source record set (counts per object type, and a checksum or min/max of the identity key) so the reconciliation has a fixed target to tie to. Note the snapshot timestamp.\n2. Dry-run the load into staging: apply the mapping and transforms without committing to production, and capture per-record validation errors (missing required target fields, unmapped enumeration values, identity-key collisions).\n3. Triage dry-run errors before any production write. Enumeration gaps and required-field misses route back to the mapping spec — do not hand-patch records around a mapping defect.\n4. Execute the load: migrate or provision each object type in dependency order (referenced records — e.g., controls — before the records that link to them — e.g., issues). Record each record's source key to target ID.\n5. Reconcile: for each object type, tie target count to the baseline count, and sample-verify field values (including at least the identity key, one enumeration field, and one transformed field) against source. Any variance is an exception with a documented cause.\n6. Build the ID crosswalk table (source key to created target ID) and persist it — this is what the scheduled sync and conflict resolution join on for every future run.\n7. Configure the sync job per object type: the schedule (cron or event trigger), the direction per field taken from the mapping authority, and the identity join on the crosswalk key. Enable delta/incremental mode (changed-since watermark) rather than full re-push where the connector supports it.\n8. Set write-safety rules: batch size, rate limits against each platform's API quota, and idempotency (a re-run of the same delta must not double-write). Define the retry/back-off policy for transient API failures.\n9. Run a first controlled sync cycle on a small delta and verify round-trip: change a field in the source-authoritative system, confirm it lands in the target; change a target-authoritative field, confirm it lands in source. Confirm a field owned by the other side is NOT overwritten.\n10. Stand up health monitoring (folded in from sync-health monitoring): define the signals — last-successful-run timestamp, records processed, error/reject count, records diverged (present both sides but field-mismatched), and end-to-end latency. Set alert thresholds (e.g., any run failure, reject rate above 2%, latency beyond the cadence window).\n11. Establish the drift check: a periodic reconciliation that counts records where source and target disagree on an authoritative field — this population is the input the conflict-resolution step consumes. Schedule it and route its output to a monitored queue.\n12. Document the runbook: how to pause the sync, how to re-baseline after an outage, and who is paged on each alert.\n13. Bucket the queue by cause: (a) authority-decidable — the mapping already names a winning side, the sync only needs a nudge; (b) reject — a validation/enumeration error blocked the write; (c) true conflict — both sides changed an authoritative-ambiguous field since the last sync.\n14. Auto-apply bucket (a): confirm the authoritative side's value and let it overwrite; spot-check a sample to confirm the rule did the right thing.\n15. Fix bucket (b) at the cause: an enumeration gap or required-field miss is a mapping defect — record it and feed the correction back to the mapping spec; do not hand-edit the record around a broken rule.\n16. Adjudicate bucket (c): for each true conflict, capture both values, the last-change timestamp and actor on each side, and the business call on which is correct. Where the field is one the mapping flagged as having no clear owner, this decision also sets the go-forward authority — record that so the sync stops re-flagging it.\n17. Escalate what you cannot decide: route conflicts touching a control's design or an access grant (UC-ACCESS-20) to the accountable owner rather than guessing; log the escalation with a due date.\n18. Re-run the sync delta over the resolved set and confirm the diverged count for those records drops to zero.\n\n**Record in AssureSwarm**\nCreate one AssureSwarm item per in-scope Risk, Control, Issue, Audit assessment, or Policy source record in its matching type. Import each control-test source record as a workflow hosted directly on its mapped Control, preserve its native source ID in workflow custom fields, and use template metadata.kind = sox-testing only for actual SOX/ICFR tests. Retain shared control references in `Control.control_id`. Attach the reconciliation report (per-object counts, variances, sampled ties) as an XLSX document on this step, the source-to-target ID crosswalk as a CSV document, and the dry-run error log as a CSV/TXT document. Migration status and record counts live in the reconciliation report (no native field for them); the operated bridge is the anchor Process item, not a status flag.\nAttach the sync configuration (schedule, per-field direction, safety rules), the monitoring definition (signals, thresholds), the pause/re-baseline runbook, and the first-cycle round-trip verification evidence as documents on this step. Record the operating cadence on the anchor Process item's `frequency` field and the operational owner on its `process_owner` field. The sync job runs outside AssureSwarm; there is no native sync-status field, so the monitoring definition and its evidence documents are its record here.\nAttach the adjudication log (each conflict's bucket, both values, resolution, rationale, deciding owner, and any newly fixed authorities) as an XLSX document on this step, plus the updated diverged-count evidence after the re-sync. Write each winning value back to the affected Risk / Control / Issue / Audit / Policy item, or to workflow custom fields/Test-step results for a Control-hosted control test, so both systems converge on the single defensible value.\n\n**Exit criteria**\nAdjudicate ambiguous values and newly assigned field authorities from a reconciled first load and observed sync, escalating design or access grants to their accountable owners.\nEvery in-scope object is loaded; target counts tie to the frozen source baseline or every variance is explained; the ID crosswalk is persisted; sampled field values match source; no unresolved required-field or enumeration errors remain.\nThe scheduled sync runs on a verified round-trip with authority honored in both directions; incremental mode and idempotency are confirmed; monitoring signals, thresholds, and the drift check are live and routing to a queue; the pause/re-baseline runbook is attached.\nEvery queued conflict is resolved, escalated with an owner and due date, or fed back as a mapping fix; newly decided field authorities are recorded; a re-sync confirms the resolved records no longer diverge.","label":"Resolve conflicts","performedBy":{"agent":"grc-artist","primitives":["coach-query-data","coach-item-update"]}},"id":"resolve-conflicts"},{"data":{"decisionField":"disposition_path","description":"Agent runs the full reconciliation and builds the per-field system-of-record coverage statement; the accountable integration owner signs it and classifies the bridge as ready to close or needing a tracked remediation plan","formData":{"fields":[{"key":"disposition_path","label":"Classify disposition","options":[{"label":"Ready to close","value":"clear"},{"label":"Action required","value":"action_required"}],"required":true,"type":"select"}],"resultType":"form","submittedAt":null,"values":{}},"instructions":"**Objective** — Reconcile the two systems on the shared record population and per-field system of record, then decide whether the bridge is clean enough to package and close or whether residual gaps require an owned remediation action plan first. The accountable integration owner decides.\n\n**Inputs**\n- The post-resolution sync state: current diverged count (should be at or near zero) and the last drift-check output.\n- The ID crosswalk and the per-field authority map.\n- The record scope agreed in the mapping step (which object types and fields the two systems are asserting agreement on).\n\n**Procedure**\n\n_Items 1–5 are agent-run (folded from the former \"Confirm system agreement\" step); the human moment is the disposition call below, made by the owner who signs the coverage statement._\n\n1. Run a full reconciliation, not a delta: count records per object type on each side, confirm the crosswalk covers all of them (no orphans on either side), and confirm the authoritative field values match across the population.\n2. Produce the coverage statement: for each in-scope field, name the system of record and confirm no field is dual-authoritative or ownerless. Any remaining ownerless field is a gap that must be closed or carried into the action plan.\n3. Quantify residual divergence: state the exact count and list of records still mismatched and why each is acceptable (e.g., an open escalation with an owner) — a non-zero number is allowed only when every item is explained.\n4. Verify the audit trail (UC-AUDIT-25): confirm the sync writes are logged with actor, timestamp, and before/after values so a reviewer can reperform any change. A silent write is a finding.\n5. Put the coverage statement and residual list in front of the accountable owner and capture their confirmation — who signed and when — as the basis for the call below.\n\n**Decision criteria**\n- Choose **clear** (`Ready to close`) when the full reconciliation ties with no unexplained orphans, every in-scope field has a single honored system of record, the audit trail is verified, and any residual divergence is fully explained with an owner already assigned — i.e., nothing new needs to be created to consider the bridge sound.\n- Choose **action_required** (`Action required`) when there is an open gap that needs tracked remediation: an ownerless or dual-authoritative field, a mapping/enumeration defect still to fix, an unresolved true conflict without an owner, an audit-trail gap, or a re-baseline the sync still needs. Anything that must be worked and re-verified — not just noted — routes here.\n\nWhen borderline, prefer action_required: a tracked plan is cheaper than a downstream assurance workflow inheriting a silent gap.\n\n**Record in AssureSwarm**\n- Attach the full-reconciliation report as an XLSX document and the per-field coverage / system-of-record sign-off statement (with the residual-divergence list and dispositions) as a PDF document on this step. There is no native agreement-confirmed field, so the signed coverage statement — carrying the signing owner and date — is the record of confirmation.\n- Submit the `disposition_path` SELECT (clear | action_required). Write the decision rationale and the evidence references (which reconciliation lines or conflicts drove it) in the rationale field, and name the deciding owner in the owner field.\n\n**Exit criteria** — Record populations reconcile with no unexplained orphans; every in-scope field has exactly one named system of record; residual divergences are enumerated and each accepted with a reason; the audit trail is verified; the coverage statement is signed; and the SELECT is submitted with a rationale and owner recorded so the unused branch can be pruned.\n\n> **⚡ Audit Artist accelerator:** `/coach-query-data` pulls the counts and field-level comparison that back the coverage statement and the disposition rationale.","kind":"decision","label":"Classify disposition","performedBy":{"agent":"grc-artist","primitives":["coach-query-data"]}},"id":"classify-disposition"},{"data":{"description":"Create an owned remediation action plan for the residual bridge gaps","instructions":"**Objective** — Convert each gap that drove the action_required disposition into a tracked remediation item with a root cause, an owner, a due date, and a verification test, so the bridge reaches a defensible state instead of shipping known defects downstream.\n\n**Inputs**\n- The classify-disposition rationale and the specific gaps it cited (ownerless fields, mapping/enumeration defects, unresolved conflicts, audit-trail gaps, pending re-baselines).\n- The residual-divergence list and escalation log from conflict resolution and agreement confirmation.\n\n**Procedure**\n1. For each gap, state the root cause in one line — distinguish a mapping defect (fix the spec) from a data conflict (adjudicate) from a monitoring/config gap (re-configure the sync).\n2. Assign a single accountable owner and a due date proportionate to risk; a gap touching access authority (UC-ACCESS-20) or the audit trail (UC-AUDIT-25) gets the tightest date.\n3. Define the interim mitigation where the gap can't be closed immediately (e.g., pause sync on the affected field, or mark the record set provisional) so the exposure is contained while the plan runs.\n4. Define the verification test per item: the exact re-check that will prove closure (a re-reconciliation count, a round-trip test, an audit-log confirmation) — the same check the reviewer will reperform.\n5. Set the reporting cadence and where status is tracked, and link each action item back to the record(s) or field(s) it fixes.\n\n**Record in AssureSwarm** — Create one Issue item per gap (`issue_type: deficiency`, `source: self_assessment`, `root_cause`, `remediation_plan` carrying the interim mitigation and verification test, `issue_owner`, `target_remediation_date`). Create the Item relationships linking each Issue to the anchor Process item and to the affected Control / Risk it remediates; record the source workflow and Test-step reference in the Issue evidence or description when the gap came from a Control-hosted SOX testing workflow. The Issue's own status tracks the plan — there is no separate plan-status field.\n\n**Exit criteria** — Every cited gap has an owned, dated action item with an interim mitigation (where needed) and a named verification test; all items are linked to the records they remediate.","label":"Create action plan","performedBy":{"agent":"grc-artist","primitives":["coach-item-create","coach-item-update"]}},"id":"create-action-plan"},{"data":{"description":"Combined Assurance Mapping receiving owner: Accept the versioned field-authority and record-scope package with its residual constraints, open actions and do-not-repeat boundary; archive and hand over ongoing operation under that acceptance.","instructions":"**Objective** — Compile the bridge evidence package and obtain downstream acceptance of the established inventory, per-field authority and residual constraints, then retain the closed operating handover.\n\n**Inputs**\n- The mapping spec and version, the migration reconciliation and ID crosswalk, the sync configuration and monitoring definition, the conflict-resolution log, and the full-reconciliation report and signed per-field coverage statement recorded on the classify-disposition step.\n- On the clear branch: the classify-disposition record directly. On the action-required branch: the remediation action plan and the current status of each item.\n- The version-stamped final package and its evidence index from the package assembly stage.\n- The authoritative per-field coverage table and the open-items/residuals list.\n- The receiving workflow: Combined Assurance Mapping (the declared downstream consumer of this bridge).\n- The live sync configuration and its monitoring definition, for the go-forward operating handover.\n\n**Procedure**\n*Autonomous preparation incorporates Prepare final package; Combined Assurance Mapping receiving owner reviews the combined evidence.*\n1. Compile the evidence index: one ordered manifest listing each artifact, its version/timestamp, and the object types it covers, so nothing is referenced that isn't attached.\n2. Write the executive summary: systems bridged, record scope and counts, sync cadence, current diverged count, and the disposition with its rationale.\n3. State the system-of-record coverage cleanly: the per-field authority table that downstream work should treat as authoritative — this is the piece Combined Assurance Mapping consumes.\n4. Fold in open items honestly: list any action-plan items still open with owner and due date, and any accepted residual divergences, so the reader sees the true state, not an airbrushed one.\n5. Note explicitly what downstream should NOT repeat (the record inventory and mapping are established here) and what it still must do (its own assurance analysis).\n6. Assemble into the final rendered package and version-stamp it.\n7. Create or locate the Combined Assurance Mapping workflow instance and attach the final package to it as its input handoff, keeping the version reference intact.\n8. Pass the assumptions and constraints forward: the record scope, the per-field system of record it should treat as authoritative, and any accepted residual divergence it must not mistake for a new finding.\n9. State the do-not-repeat boundary in the handoff note: the record inventory, field mapping, and sync agreement are owned here; the assurance mapping owns coverage analysis over them.\n10. List any still-open action items with owners and due dates so the downstream owner knows what is in flight and can decide whether to wait or proceed.\n11. Notify the downstream owner that the package is available and confirm receipt is acknowledged.\n12. Archive the final package and its evidence index as the immutable system-of-record for this integration, with version and date fixed; confirm no referenced artifact is missing (UC-AUDIT-25 requires the trail be reperformable).\n13. Update the linked AssureSwarm records: mark the bridge live/closed, stamp the mapping and package versions on the affected item types, and record the go-forward system of record per field.\n14. Confirm ongoing operation is owned, not orphaned: the scheduled sync, its health monitoring and alert routing, and the drift check continue with a named operational owner and cadence; every open action item keeps an owner, a due date, and a review checkpoint after project close.\n15. Communicate the closure to the accountable owner and stakeholders, pointing to the archived package — the acknowledged handoff signed on this step is the closure of the bridge project.\n\n**Record in AssureSwarm**\nAttach the rendered final bridge package (PDF/ZIP) and the evidence index (XLSX) as documents on this step; the package is version-stamped inside itself (no native package-version field). Link every referenced artifact through the evidence index, and state the open-item and residual-divergence counts within the package.\n- Attach the final package and the handoff note (assumptions, do-not-repeat boundary, open items) to the Combined Assurance Mapping workflow instance as its input handoff package, keeping the version reference intact, and record the downstream owner's acknowledgement inside that note. There is no native handoff-status field; the acknowledged handoff note is the record.\n- Close and archive this workflow instance as the immutable audit trail, with the closure date and owner, and confirm the archived package link.\n- Record the go-forward operation on the anchor Process item — `process_owner` (ongoing sync/monitoring owner) and `frequency` (cadence). The follow-up review date for open items lives as each open Issue's `target_remediation_date`.\n\n**Exit criteria**\nAccept the versioned field-authority and record-scope package with its residual constraints, open actions and do-not-repeat boundary; archive and hand over ongoing operation under that acceptance.\nThe package contains an evidence index with every referenced artifact attached, an executive summary, the authoritative per-field coverage table, an honest open-items/residuals list, and the downstream do-not-repeat note; it is version-stamped.\n\n\nThe final package is linked to the Combined Assurance Mapping workflow with its version intact; the handoff note states assumptions, the do-not-repeat boundary, and open items; the downstream owner has acknowledged receipt. The package is archived and reperformable with no missing artifacts; linked records reflect the closed, versioned state and go-forward system of record; ongoing sync, monitoring, and open items each have a named owner and next date; closure is communicated.\n\n> **⚡ Audit Artist accelerator:** `/coach-workflow-attach` links the package to the downstream workflow and `/coach-notify` alerts the downstream owner and captures acknowledgement; `/coach-workflow-export` and `/coach-export-package --raw` then capture the workflow and affected records into the archived, reperformable audit trail.","label":"Handoff to related workflow","performedBy":{"agent":"grc-artist","primitives":["coach-render-package","coach-workflow-attach","coach-notify","coach-workflow-export","coach-export-package"]}},"id":"handoff-to-related-workflow"}],"sourceTemplateId":"workflow-library:grc-platform-integration-bridge"}
