Most contractors already have their ITPs written up in Word or Excel. Rather than retyping them line by line, you can use an AI assistant (ChatGPT, Claude, Copilot or Gemini) to convert them into CSV files formatted for CivilPro import – with check types, Hold Points and Witness Points derived from your existing notation.
This article gives you a ready-made prompt to copy into your AI tool, plus the steps to review the result and import it into CivilPro.
ⓘ Always check the output before importing.
AI conversions are a first pass, not a guarantee. Spot-check row counts, Hold Points and Witness Points against your source document before you import. If anything looks off, contact CivilPro support and we will help you sort it out.
Before you start
- Word (.docx) and Excel (.xlsx) files work best. If your ITP is an older .doc or .rtf file, open it and save it as .docx first.
- PDFs are less reliable – convert to Word first if you can, or expect to check the output line by line.
- If one document contains many ITPs, convert a few at a time. AI assistants become less accurate on very long documents.
Step 1 – Run the prompt
Copy the entire prompt below into your AI assistant, attach your ITP file(s), and send. The assistant will not produce CSVs straight away – it first shows you how it plans to convert your document (the ITPs it found, the column mapping, and how it read your Hold Point and Witness Point notation) and waits for your confirmation.
You are an expert construction QA data processor. Convert the attached Inspection and Test Plan (ITP) document(s) into CSV files formatted for import into CivilPro, a civil construction quality management platform. Follow every rule below exactly. The output feeds a live software import, and small formatting mistakes (a wrong Check Type value, a stray special character, a real line break inside a cell) cause silent import failures.
=== PROCESS: TWO PHASES ===
PHASE 1 – REVIEW (do this first, output no CSV yet):
1. List every ITP found in the attached file(s): title, reference number if present, and count of item rows. One source document may contain several ITPs as separate tables or sheets – treat each as a separate output CSV.
2. Show a proposed column mapping table: each source column, the CivilPro field it maps to, and any source columns that will not be mapped.
3. State how you interpret the inspection notation (the legend defining H/HP, W/WP, S, R, I, M, V or similar codes), and give the expected count of Hold Points, Witness Points, and Check Items per ITP.
4. If the ITP has a Frequency, Stage and/or Max Lot Size column, state how you will handle each: Frequency goes into its own Frequency column, Max Lot Size is appended to the end of the Description. Ask only if it is unclear which source column is which.
5. Ask about anything ambiguous. Then STOP and wait for my confirmation before producing any CSV.
PHASE 2 – OUTPUT (only after I confirm):
Produce one CSV per ITP, each in its own plain-text code block.
CODE BLOCK CONTENTS (critical – I copy the whole block and save it straight to disk):
- The FIRST line inside every code block must be the header row, beginning with Reference Text. Nothing may come before it: no filename, no ITP title, no comment line, no blank line.
- Put the suggested filename (e.g. "ITP-01 - Earthworks.csv") as ordinary text ABOVE the code block, never inside it.
- The LAST line inside every code block must be the final data row. No trailing notes, totals or blank lines.
- The code block contains the header row and the data rows and nothing else.
After the last CSV, add a short report: rows converted, rows skipped and why, and any rows where you defaulted a value that I should double-check.
=== OUTPUT FORMAT ===
Each CSV must have exactly these columns, in this order:
Reference Text, Description, Clause, Responsibility, Records, Inspection Method, Frequency, Check Type, Item Type, Inspection Reqd, Verify Reqd, Approve Reqd
- The first line of the file is the header row exactly as above, with nothing before it.
- Enclose every field in double quotes so commas inside cells do not break the structure. Double any quote characters inside a field ("" for ").
- Each line is one complete logical row. Never output a real line break inside a field – use the HTML rules below instead.
=== LOGICAL ROWS ===
A new logical row begins wherever the source has content in the item-number or activity column. Lines that continue a cell's text (often with a blank first column in the source) belong to the SAME logical row – consolidate them into it. Multi-line text within one cell is joined using the HTML line-break rules below, never left as separate CSV rows.
=== COLUMN MAPPING ===
- Activity / Inspection Item / Description of work -> Reference Text. Strip any leading item number ("1.1 Approved Work Methodology" becomes "Approved Work Methodology") – CivilPro numbers the rows itself.
- Acceptance Criteria / Quality Requirement / Criteria -> Description.
- Specification Reference / Spec Ref / Standard / Clause -> Clause.
- Inspection or Test Method / Procedure -> Inspection Method.
- Records / Verifying Document / Evidence -> Records.
- Responsibility -> Responsibility, ONLY if the source has such a column. If not, leave it blank on every row. Never invent or default a responsibility.
- Frequency / Stage -> the Frequency column. Plain text, no HTML tags. If the source cell runs over several lines, collapse it to a single line.
- Lot Size / Max Lot Size -> appended to the end of Description (see formatting rules). There is no separate field for it.
- Item number columns, sign-off/signature columns, and tick columns are not carried into the output.
=== CHECK TYPE (critical) ===
The Check Type field accepts EXACTLY these values: "Check Item", "Witness Point", "Hold Point", "Milestone". Any other value – including the word "Check" on its own – imports as blank. Never abbreviate.
Derive Check Type from the ITP's inspection notation columns (commonly Contractor and Client/Superintendent columns, or a single Type column):
- H, HP, or Hold (in the client/superintendent column, or as the row's type) -> Hold Point
- W, WP, or Witness (either party) -> Witness Point
- Everything else (S, R, I, M, V, review, surveillance, monitor, record, a bare tick, or no code at all) -> Check Item
- Where a row carries codes from both parties, the most restrictive wins: Hold beats Witness beats everything else.
- Codes may carry suffixes or role labels (HP1, H(C), "H PM") – read the leading letter.
- If the document has no inspection notation at all, every item row is a Check Item.
Set the three flag columns from the Check Type:
- Hold Point -> Inspection Reqd TRUE, Verify Reqd TRUE, Approve Reqd TRUE
- Witness Point -> TRUE, TRUE, TRUE
- Check Item -> TRUE, FALSE, FALSE
Write TRUE and FALSE in capitals.
=== SECTION HEADING ROWS ===
If an ITP contains section header rows (e.g. "PRELIMINARIES", "EXCAVATION WORKS") between groups of items:
- Reference Text = the section number if the source has one, otherwise blank
- Description = the section title wrapped in <b><u>...</u></b>
- Item Type = Heading; Check Type = blank; all three flag columns = FALSE
Do not mistake document-control footers ("This document is CONTROLLED", title blocks, revision tables) or notation legends for headings – skip those rows entirely.
=== TEXT FORMATTING RULES ===
Reference Text and Description render HTML; Clause, Records, Inspection Method and Frequency are plain text where HTML tags would show literally.
1. Reference Text: wrap every item row's text in <b>...</b>. For Hold Point and Witness Point rows, append the type after the text, underlined, inside the bold, separated by " - ":
<b>Foundation inspection - <u>Hold Point</u></b>
<b>Topsoil strip - <u>Witness Point</u></b>
Check Item rows are bold only, with nothing appended.
2. Description line breaks: replace every line break in the source cell with <br>. For numbered or lettered lists, put <br> before each item. For a colon-introduced list, use <br><br> before the first list item, then <br> between items. Bullet lists become: <ul style="margin: 4px 0; padding-left: 22px; list-style-type: disc;"><li style="margin-bottom: 2px;">item</li>...</ul>
3. Max Lot Size: append at the very end of Description as
<br><br><u>Max. Lot Size</u>: value
Exactly two <br> before it. Skip cells containing just a dash. Do NOT append Frequency here - it has its own column.
4. Clause: separate multiple references with comma-space ("Spec 213, Drawings"). Convert semicolons between references to comma-space. No HTML, no line breaks.
5. Records: same as Clause – comma-space separated, plain text.
6. Inspection Method: separate multiple methods with " / " ("Survey / Visual"). Convert semicolons to " / ". No HTML.
7. Frequency: plain text in its own column, one line, no HTML. If a frequency phrase is embedded mid-description in the source (e.g. "Setout Frequency: Each lot"), remove it from the Description body and put the value in the Frequency column instead.
=== CHARACTERS (critical) ===
Output plain ASCII only – no character above the standard keyboard set. Convert as you go:
- curly quotes -> straight quotes; en/em dashes -> hyphen; ellipsis -> three dots
- plus-minus sign -> +/- ; greater-equal -> >= ; less-equal -> <=
- degree symbol -> " deg" (25 degC becomes "25 deg C")
- superscript 2 and 3 -> plain 2 and 3 (m2, m3)
- section symbol -> "Section " ; tick marks and crosses -> remove
- Watch for degree signs typed as superscript zero in Word – "250C" in extracted text is usually "25 deg C". Fix these, do not copy the corruption.
=== ITEM TYPE ===
For each item row, scan its text and assign the first match, checking in this order:
1. Environmental – environ, disposal, surplus material, stormwater, sediment, erosion, eco
2. Safety – safety, HSE, PPE, hazard, risk, permit, SWMS, underground
3. Community – community, noise, dust, neighbour, vibration
4. Quality – everything else (the default)
Section headers get "Heading" as described above.
=== ROWS TO SKIP ===
- Rows where both the activity and the acceptance criteria are blank
- Notation legend rows and legend tables (e.g. "H = Hold Point...")
- Sign-off/signature record tables and blank sign-off rows
- Document-control rows, title blocks, and revision tables
Count what you skip and report it in Phase 2.
=== FINAL CHECKS BEFORE PRESENTING ===
- The first line inside every code block is the header row starting with Reference Text – no filename, title or comment above it
- Every row has exactly 12 fields
- Frequency contains no HTML tags and no line breaks
- Row count per CSV matches the source ITP's item count
- Every Check Type is exactly "Check Item", "Witness Point", "Hold Point", or "Milestone"
- Hold Point and Witness Point counts match the source notation
- No character above ASCII anywhere in the output
- No real line breaks inside any field
- Every field is double-quoted
Begin with Phase 1 now.Step 2 – Review and confirm
Check the assistant’s summary against your document before confirming:
- Did it find every ITP, with the right number of rows in each?
- Is the column mapping sensible?
- Do the Hold Point and Witness Point counts match your notation?
Correct anything that is wrong, then tell it to proceed. It will output one CSV per ITP.
Step 3 – Save the CSV files
Copy each CSV block into a plain text editor and save it with a .csv file name.
Check the first line before you save. It must begin with Reference Text, Description, Clause… – that is the header row CivilPro matches your columns against. If the assistant has put a file name or a title on the first line, delete that line so the header row is first.
- Windows: Notepad > File > Save As > set “Save as type” to All Files > name the file, e.g. ITP-01 Earthworks.csv
- Mac: TextEdit > Format > Make Plain Text > paste > save with the .csv name
ⓘ Do not re-save the file in Excel before importing.
Opening and saving the CSV in Excel can strip the quoting and change special characters. If you want to inspect the file, open it in a text editor, or in Excel without saving.
Step 4 – Import into CivilPro
Follow Import ITP from CSV files to bring each CSV into CivilPro. The columns in your file are named to match CivilPro’s import fields, so mapping the headings during import is straightforward.
After your first import, open a few inspection items and confirm the Hold Points and Witness Points landed where you expect, the bold text renders correctly, and there are no odd characters. Once the first ITP imports cleanly, the rest of the batch will follow the same pattern.