
Client Portal Document Versions: Keep Reviews and Approvals Attached to the Right File
Manage client document revisions with stable identities, version-specific decisions, clear current-file labels, and controlled access.
Custom Portals
Design portal record cloning as a new draft with explicit copy rules, reset approvals, current permissions, fresh validation, and a traceable relationship to its source.

LET’S BUILD SOMETHING USEFUL
Talk to Ataraxy Developers about your website, app, or custom software.
Copying a previous request can save a portal user several minutes of repetitive entry. It can also carry an old approver, expired attachment, outdated price, or completed status into a new workflow. A clone button is therefore a small data-migration feature, even when the interface presents it as a convenient shortcut.
The safest useful starting point is a reviewed new draft. The source record provides selected information, but the new record has its own identity, current validation, and fresh workflow decisions. Define that contract before implementation so the product does not accidentally treat copied history as a new authorization or promise.
Identify why people duplicate records. A facilities coordinator may submit a similar maintenance request each month, while a procurement user may reuse a supplier and delivery address. These workflows need different fields copied. Interview a few representative users or inspect existing manual workarounds before deciding that every field should travel together.
Choose a clear action label such as “Create new draft from this request.” It tells the person that the source will remain intact and that another review step follows. If the action only copies a subset of details, explain that subset in the resulting draft or a short preview. Do not make users discover important omissions after submission.
Define the destination context. Copying within the same project differs from copying into another organization or department. If multiple destinations are allowed, select and authorize the destination before assembling its editable draft. Current context should determine the applicable fields and policies, rather than inheriting them blindly from the source.
Classify fields as copy, reset, recompute, or require review. A description may be copied; submission date and approval state should usually reset; calculated totals may need recomputation; a delivery address may be copied but highlighted for confirmation. Keep the policy close to the data model so new fields do not silently become copyable by default.
OWASP’s mass-assignment guidance recommends explicitly allowing intended fields or using dedicated data-transfer objects instead of binding arbitrary input to sensitive properties. The same principle is useful for a clone endpoint: construct the new draft from an approved field set rather than accepting a full source-shaped object from the browser.
Review relationships as carefully as simple values. A copied supplier identifier may point to an inactive supplier. A copied assignee may no longer belong to the destination team. Decide whether each relationship is revalidated, omitted, or shown as needing replacement. A valid identifier from an old record is not proof of current suitability.
Give the clone a new record identity and a draft state. Approval decisions, signatures, submission receipts, completed tasks, and prior notifications belong to the original request unless the product has a separately reviewed reason to preserve a particular historical reference. Copying them as if they were new events would misrepresent what happened.
For example, a purchase request copied from last quarter should not inherit “Approved” merely because its line items match. The new budget period, prices, responsible people, and policies may differ. Recalculate the approval route when the new request reaches the appropriate review stage. Show the user that the copied content still needs current approval.
Keep a source relationship for traceability, such as “Created from request R-1048,” with permission checks on any link back. That relationship explains provenance without merging the histories. Events on the new record should describe actions actually taken on the new record, including who created the draft and when.
An attachment can be copied as a new file, linked as a shared document, or omitted with a prompt to upload a current version. Each approach has different consequences for access, storage, updates, and deletion. Name the behavior in the product design instead of treating an attachment list as just another array of identifiers.
Suppose an old request contains a supplier certificate that has expired. Reusing the binary file may be technically possible while making the new request incomplete. Validate the document’s current role and status. A draft should clearly identify a replacement requirement rather than silently presenting every copied file as ready for approval.
If the source attachment is not accessible to the current user or destination context, do not expose it through cloning. Review preview thumbnails, download routes, and background copy workers as part of the same permission boundary. The new draft should not become an indirect route around the source document’s restrictions.
Run the new draft through the current form schema and server validation. An older record may lack a field that has since become required, or contain a value no longer accepted. Preserve useful information where appropriate, but show exactly what needs attention. Do not silently replace an obsolete value with a guess that changes the request’s meaning.
Decide how to handle a source that changes during cloning. A useful approach is to record the source version used and build the draft from a consistent snapshot. If the application instead copies current values at submission, explain that behavior and review the potential surprises. The person should know which content they are reviewing.
AI can suggest refreshed wording for a copied description or flag stale dates, but it should not silently alter commitments, amounts, or recipients. Present suggestions separately from copied facts and require review before they become part of the request. Keep the original source reference available to explain where the draft began.
Repeated clicks or a network timeout should not create a pile of indistinguishable drafts. Give the create-from-source operation an appropriate request identity and reconcile uncertain results before retrying. Return the new draft’s stable identifier when creation succeeds, so the interface can reopen the same result instead of starting another copy.
Distinguish “draft created” from “request submitted.” The receipt should say what happened and what remains to be done. If the user abandons the draft, apply the portal’s established draft-retention behavior rather than notifying approvers or starting downstream work. A convenience action should not accidentally become a business submission.
Test a source with removed members, expired documents, old schema fields, changed permissions, and a concurrent edit. Include two rapid requests to clone the same source. Verify the new draft’s fields, identity, status, attachments, and history. These cases test the copy policy itself, which is the core behavior behind the button.
Portal cloning is useful when it reuses selected information without inheriting stale decisions. Define the copy policy, create a separate draft, reset workflow outcomes, and revalidate relationships and attachments. With clear provenance and predictable retries, users can save entry time while still reviewing a request that fits the current rules.
LET’S BUILD SOMETHING USEFUL
Talk to Ataraxy Developers about your website, app, or custom software.