Annual Validation PDF Splitter

Process the combined Fortress AVF PDF entirely in your browser. Outputs a zip with /AVF, /Limitations, /Cards, /CodeOfConduct, and a tracking spreadsheet ready for the Power Automate emailer.

Nothing is uploaded — no cadet information leaves this device.

  1. 1

    Annual Validation Form

    Fortress → Reports and Forms → Annual Validation Form
    Filter By: Everyone
    One PDF with every cadet in it, not one per cadet.

  2. 2

    Cadet Medical Information Summary

    Fortress → Reports and Forms → Cadet Medical Information Summary
    Select All • Print Only Cadets Having Limitations: Yes
    One PDF with every cadet in it.

  3. 3

    Cadet Information Card

    Fortress → Reports and Forms → Cadet Information Card
    Select All → Preview → Export as PDF
    One PDF with every cadet in it.

    Supplies every cadet's CIN and their Cadet365 address, neither of which is on the AVF. Without the CIN an AVF can only be matched to a limitations sheet by name, which fails whenever a cadet's preferred name differs from their official one.

Optional. Names each cadet's Code of Conduct and sets the language to fall back to. Also fills in the emailer below.

Sets the expected number format. A card valid in another province is not flagged.

Health cards expiring on or before 31 August of that year are flagged.

Each report is needed in at least one language. Give both and every cadet gets the version they read.

Status —
Select PDFs…

Send the forms out automatically

The spreadsheet in your download is ready for Power Automate: it already contains a table named ToValidate, so there is no CSV to convert. Tell us your unit and we will build the flow with your details already in it — it emails each cadet their own forms from your unit's group inbox, then records who has been sent one.

Where the files live

  1. Unzip your download and upload the whole folder to your staff team in Teams or SharePoint — not your own OneDrive.
  2. In SharePoint or Teams, select that folder and choose Copy link.
  3. Paste it below. We split it into the two things the flow needs.

The folder is the one holding the AVF, Limitations, Cards and CodeOfConduct folders. Edit it if the link pointed somewhere else.

Building for the unit you picked above. Its group inbox and the organization names in your signature come from that record.

Optional. BCC'd on every email so you keep a record. Your signature shows the unit's group inbox, since that is where replies need to go.

Pick your unit and fill in your rank and name.

Built to IMS 6001-1-4 from your unit's record. It goes at the end of the email text below — if the phone number on file is not the right one, delete that line there.

What the email says

Filled in from your unit — your signature, your region's medical contact and your parade night are already in it. Edit anything you like; each cadet is sent the version in the language they read.

English

Subject:

A sample cadet stands in for a real one. Shaded blocks go only to the cadets they apply to.

Français

Subject:

A sample cadet stands in for a real one. Shaded blocks go only to the cadets they apply to.

{{ cadet_name }} and {{ flags }} fill themselves in per cadet. A section wrapped in {{#if card}} … {{/if}} is sent only to cadets it applies to.

Pick your unit to start.

Keep the download zipped. Power Automate imports the .zip itself, and extracting it first is the most common reason the import fails. Download a blank one if you would rather fill everything in yourself.

First-time setup — about 20 minutes, once per unit

Two zips, two jobs. annual-validation-forms.zip — the one from the button above — is unzipped and uploaded to SharePoint. …-AnnualValidationEmailer.zip — from Build my flow — is never unzipped; Power Automate imports it as it is.
Keep this page open in its own tab. Power Automate opens in another and you will be going between them.

  1. 1. Upload the forms

    Unzip annual-validation-forms.zip and upload the whole folder to your staff team in Teams or SharePoint — not your own OneDrive. Leave the folders inside it as they are. Then Copy link on that folder and paste it into the form above.

    /Shared Documents/General/Annual Validations

  2. 2. Import the flow

    Build my flow gives you the second zip. Change anything later and build again — the old zip keeps the old wording.

    Power Automate → My flows → Import → Import Package (Legacy), and upload it.

    Screenshot: My flows → Import → Import Package (Legacy).

    You should now see three connections to set:

    • Excel Online (Business)
    • Office 365 Outlook
    • SharePoint

    For each: Select during import → Create new → a new tab opens → create it → come back → Refresh list → pick it.

    Create new for all three, even if you have connections already. Reusing one can import fine and then fail with Unauthorized when it runs.

    Screenshot: Select during import, then Create new, for each of the three.

    Import is at the top of the page.

  3. 3. Point both Excel steps at your spreadsheet

    Open the flow. If you can see the steps, you are already editing it — there is no Edit button to find. Click Expand all action groups in the left toolbar: the second Excel step is nested several levels deep.

    • List rows present in a table — near the top.
    • Record that it was sent — near the bottom, inside Apply to each → Send now or save a draft → true branch.

    In each one, clear what is already in the boxes, then choose:

    Locationyour team site
    Document LibraryDocuments
    Filethe folder you uploaded → annual-validations.xlsx
    TableToValidate
    Screenshot: List rows present in a table, filled in.
    Screenshot: Record that it was sent, and where it hides.

    In Record that it was sent, picking the file clears the Sent At box. Put utcNow() back in it, as an expression. Leave the other boxes empty.

    Miss it and emails go out, Sent At stays empty, and the next run emails everyone again.

    Screenshot: utcNow() in the Sent At box.
  4. 4. Save, then turn it on

    Save is at the top right. Then go back to the flow's own page and click Turn on.

    A flow that has never been turned on cannot run, and the Run button does not say so.

    Screenshot: Save, top right.
    Screenshot: Turn on, on the flow’s own page.
  5. 5. Test with drafts first

    Run is at the top right of the flow's page. The options only appear once you click it.

    Screenshot: Run, top right.

    Choose Create drafts to review first and leave the test address blank. Nothing is sent: you get one draft per cadet in your own Outlook Drafts folder.

    Open three of them:

    • an ordinary cadet
    • one with medical limitations
    • one with something in the Flags column

    Delete the drafts when you are happy. Then Run again and choose Send the emails now.

Your settings and wording are already in the flow. To change the wording, edit it above and build again, or edit the Build the English email / Build the French email steps directly.

If it misbehaves

  • Unauthorized, a token error, or SharePoint failing mid-run — a connection is bad. Do not try to repair it: delete the flow, import the zip again, and Create new for all three.
  • dynamic operation request client failure — a connection is not set yet.
  • Upload does nothing — Power Automate needs third-party cookies enabled to import packages.
  • Wrong parade times, odd health card entries, dead Cadet365 addresses — that is what Fortress holds, not something you set up wrong. Fix it there and export again.
Every time you run it
  1. Process the three Fortress exports above and download the zip.
  2. Replace the folders and the spreadsheet in your SharePoint folder with the new ones.
  3. Run the flow as drafts, check a few, then run it again to send.
  4. Fill in Returned At, Fortress At and Filed At as forms come back.

Worth knowing

  • Drafts land in your own Drafts folder, addressed from the unit inbox, so you can add a note before sending.
  • Sent At is stamped only on a real send, and anyone already stamped is skipped — so re-running catches stragglers. Clear the cell to send again. If a real send leaves the column empty, the Sent At box in Record that it was sent has been cleared: put utcNow() back and the next run will stamp again.
  • The flow works through one cadet at a time. Slower, but it is what stops one cadet's details reaching another.
  • Anything you add to a cadet's Flags cell is sent to their family with the rest. Separate your own notes with ; and each becomes its own bullet.
  • Language says which version of the forms each cadet was sent. It comes from their information card, then their form, then your unit.