The situation
A customer wants to revoke. They find the form on a legal page, fill it in and type the order number from memory, or not at all.
Revocation has to be possible, and it should be traceable. Both get easier when the form sits where the order is already known.
A customer wants to revoke. They find the form on a legal page, fill it in and type the order number from memory, or not at all.
Shopware ships a revocation form as the third type of its form element. It sits on a page, its fields live in the template, and it knows nothing about the order in question.
No field is needed for the order number: in the customer account it sits above the form ("Use this form for questions about order 10042."), and order number, order date, amount and currency travel invisibly with the submission. The reason is optional.
Create top-level element
Through an order assignment the form appears in the customer account on every order. The submission then carries the order number as its context; nobody types it, nobody mistypes it.
Choice options are fixed text and the same for every order; they do not know the line items of an order. So the form only asks "the whole order" or "individual products"; only for "individual products" does a condition reveal the text field where the customer names them. A comma separates options, so none of them contains one.
The consent type is meant for exactly this and can be made mandatory. The text beside it is a label like any other, and so it is translatable.
This is a form, not legal advice. Which text belongs on a revocation form and what else is required is something to settle with somebody qualified; this page does not. The withdrawal function the law requires, with its "Revoke a contract" button, comes with Shopware itself: The withdrawal button in Shopware 6
Order assignment, in the customer account on the order list and the order detail. The form on the legal page stays alongside it, for everyone who is not signed in.
Context "order" with the number, plus scope, products, reason and date as columns of their own. That turns the history into a list you can sort by date and filter by order number.