PDFPipe

Signing, terms and clauses / Insurance details block

An insurance block with insurer, policy number, limit and expiry

Insurer, policy number, cover type, indemnity limit and expiry date, printed where a client or a principal contractor needs to verify cover.

Why this block is harder than it looks

This block is read by somebody checking compliance, and they are checking four things: is it the right kind of cover, is the limit high enough, is it still in date, and can they verify it with the insurer. So the block is a checklist rather than a description, and laying it out as prose makes each of those four a search. The expiry date is the one that goes stale, and a block that prints it in the same weight as the policy number produces documents circulating months past expiry with nothing about them looking wrong.

The decisions that make it work

Reasons rather than a description of the code. Each of these is a choice that has a wrong answer, and the wrong answer is usually the default.

  • Give the expiry date its own emphasis. It is the field that makes the whole block valid or void and it is usually set smallest.
  • State the indemnity limit with its basis, per claim or in the aggregate, because the two are different cover and the number alone is not checkable.
  • Set the policy number in the monospace face and unwrapped, since it is quoted to the insurer to verify.
  • One row per policy where there are several, with the cover type first, so a reader looking for one type finds it by scanning the left edge.
  • Do not abbreviate the cover type. A compliance reader is matching it against a requirement written in full.
  • Keep the block together with break-inside: avoid and place it where it is expected, which is usually the last page before the signatures.

The fragment

Markup and the CSS it needs, and nothing else. It expects a document that already has a page rule and a base stylesheet, so paste it into one rather than opening it on its own.

html
<table class="insurance">
  <thead>
    <tr><th>Cover</th><th class="lim">Limit of indemnity</th>
        <th>Insurer</th><th class="p">Policy</th><th class="x">Expires</th></tr>
  </thead>
  <tbody>
    <tr>
      <td>Public liability</td>
      <td class="lim">10,000,000 any one claim</td>
      <td>Marsden Underwriting</td>
      <td class="p">MU-PL-884471</td>
      <td class="x">30 September 2026</td>
    </tr>
  </tbody>
</table>

<style>
  .insurance {
    break-inside: avoid;
    width: 100%;
    border-collapse: collapse;
    font-size: 8.5pt;
    table-layout: fixed;
  }
  .insurance th, .insurance td {
    padding: 4pt 5pt 4pt 0;
    text-align: left;
    vertical-align: top;
  }
  .insurance thead th { border-bottom: 0.5pt solid currentColor; }
  .insurance .lim { width: 24%; font-variant-numeric: tabular-nums; }
  .insurance .p {
    width: 18%;
    font-family: "IBM Plex Mono", ui-monospace, monospace;
    white-space: nowrap;
  }
  .insurance .x {
    width: 20%;
    font-weight: 700;                 /* the field that voids the rest */
    white-space: nowrap;
  }
</style>

What breaks when it is built the obvious way

Printing the limit as a bare number. Ten million per claim and ten million in the aggregate are different cover, a compliance check against a requirement written one way cannot be satisfied by a document written the other, and the number alone does not say which.

How to prove it survived pagination

Hand the page to somebody with a cover requirement written out and ask them to confirm it is met. Every question they have to ask is a field that is missing or not prominent enough. Then check the expiry date is the second thing they read after the cover type.

Where it sits in a finished document

This page is one block. The document it belongs to has a page rule, a base stylesheet, a header and everything else around it, and repeating all of that here would make thirty pages that say the same thing. The hot work permit template is a complete file with this block already in it, so take that and change the fragment rather than assembling one from parts. The property doing most of the work here is covered on its own page, with the support caveats that belong there rather than here.

Frequently asked

Will this fragment work on its own?

Not as a whole document. It has no page rule, no margins and no base type, because those belong to the document rather than to the block, and duplicating them in every fragment would mean thirty copies to keep in step. Paste it into a template that already has them.

Why does it look right in a browser and wrong in the PDF?

Because a browser window is one continuous surface and a document is a stack of fixed rectangles. Nothing in a scrolling view exercises a page boundary, so every break rule in the fragment is inert until the content is paginated. Render the real thing with enough content to cross two or three boundaries, then look.

Do I need a special option on the render request for this?

No. Everything on this page is CSS and markup, which is your side of the boundary. What the render has to give you is a real page size with real margins, and after that the layout is decided by the stylesheet.

Other parts of a document

The blocks that sit next to this one, and one from the next group along so you are not sealed inside a single kind of problem.

Paste the fragment into the playground inside a page rule and see what it does at a real page size. That is the only way any of this gets confirmed.