Skip to content
§9.8.2

Triangles and Matrix Tables

A triangular grid—how are the empty positions filled?

✅ NormativeSettled. The requirement holds as written.📄 Page ruleCan be applied from the page alone.Read §9.8.2 in the RFC ↗

The requirement

Every row MUST carry the full column count. The jagged half MUST be padded with individual empty cells — one <td></td> per missing position. A colspan or rowspan over the empty region MUST NOT be used, and a 0 or any other value MUST NOT be invented.

When it applies

Loss development exhibits and similar matrices are jagged on purpose. The missing half is meaningfully empty — that development period has not happened yet — not data that failed to be read.

Sketch of the printed page — layout, not output
Accident yr | 12mo | 24mo | 36mo |
| 2021      | 450  | 512  | 530  |
| 2022      | 470  | 528  |      |  ← structurally empty,
| 2023      | 465  |      |      |    not "failed to read"

Reading the examples. Each one pairs a source page with the output the rule expects. ✅ Sample: the rule applies. ❌ Counter-sample: it looks like it applies and does not, or a rendering got it wrong. A non-conforming output, in red, is shown only for contrast. … marks content left out of an excerpt.

Requirements

  • The shape MUST be kept. Every row has the full column count; the cells past the end of the row are present and empty. Rows MUST NOT be truncated.
  • One empty cell per missing position. Four unhappened periods are four <td></td>, not one colspan="4". The span would say "this region is one thing", and it is not — it is four distinct coordinates that each have not happened yet.
  • The empty half MUST NOT be padded with values. Filling it with 0, n/a or a repeat of the last figure destroys the only thing the triangle asserts.
  • A printed value MUST NOT be read as structural emptiness either. Some pages print 0 across the future half. A zero is a claim and a blank is an absence; the output MUST render whichever the page prints.
  • A cell that is empty because it cannot be read is a different situation — see Cell Text Fidelity (§9.6.3).
01

✅ SampleThe rule applies

Stacked loss-development exhibits where the empty lower-right is meaningfully emptyppy

those development periods have not happened. Every row of the first triangle carries all eleven cells. The column headers are underlined, not bold.

Source page
Triangles and Matrix Tables — Stacked loss-development exhibits where the empty lower-right is meaningfully empty. Source page.
Expected output · table 1 of 3
All Companies Reporting to the Loss Data Bureau 1
Accident Year Ended 15 27 39 51 63 75 87 99 111 123
12/31/2003 418,550,936 418,042,452 417,267,765 417,492,929 417,216,932 417,189,136 417,146,522 417,095,498 417,140,320 417,120,054
12/31/2004 431,833,889 427,373,100 425,430,426 425,032,454 424,899,046 424,930,538 424,893,684 424,824,851 424,784,418 424,738,538
12/31/2005 471,370,885 466,106,849 464,434,610 463,396,915 463,268,706 463,175,541 463,165,720 463,139,866 463,075,855 463,014,244
12/31/2006 463,200,919 457,725,282 455,822,189 454,841,890 455,017,266 455,000,340 454,915,676 454,822,382 454,797,996
12/31/2007 515,029,169 510,374,742 508,154,461 507,592,525 507,251,378 507,252,665 507,124,706 507,069,577
12/31/2008 547,084,231 543,696,826 542,151,638 541,255,839 540,913,464 540,904,143 540,713,622
12/31/2009 459,114,867 455,232,703 454,478,144 454,047,620 454,108,281 453,794,733
12/31/2010 511,853,602 507,399,547 506,256,705 506,014,933 506,071,619
12/31/2011 571,554,254 566,987,304 565,194,620 564,927,450
12/31/2012 603,862,305 602,282,512 600,316,599
12/31/2013 591,546,839 588,047,899
12/31/2014 656,279,959
Triangles and Matrix Tables · Source page

Stacked loss-development exhibits where the empty lower-right is meaningfully empty

Triangles and Matrix Tables — Stacked loss-development exhibits where the empty lower-right is meaningfully empty. Source page.
02

❌ Counter-sampleLooks like it applies and does not — or a rendering got it wrong

The same shape, filled differentlywaiox

the un-earned future half is printed with explicit 0s rather than left blank. A zero is a claim; a blank is an absence — here every 0 is kept.

Source page
Triangles and Matrix Tables — The same shape, filled differently. Source page.
Expected output · table 1 of 2, excerpt
Medical
Incurred Month
Paid Month 202401 202402 202403 202404 202405 202406 202407 202408 202409 202410 202411 202412
202401 41,539 0 0 0 0 0 0 0 0 0 0 0
202402 191,691 29,902 0 0 0 0 0 0 0 0 0 0
202403 90,233 324,478 55,730 0 0 0 0 0 0 0 0 0
202404 11,157 20,717 326,646 70,804 0 0 0 0 0 0 0 0
202405 5,533 8,224 429,936 308,025 125,102 0 0 0 0 0 0 0
202406 283 -45,171 36,806 13,870 241,742 52,107 0 0 0 0 0 0
…
Triangles and Matrix Tables · Source page

The same shape, filled differently

Triangles and Matrix Tables — The same shape, filled differently. Source page.

Why a span is wrong here, when it is free elsewhere

Blank and Spacer Rows (§9.5.1) leaves the encoding of an unruled empty region free: leading empty cells and one blank spanning block render identically, and neither is preferred.

A triangle is the carve-out. Every empty cell sits at a real coordinate — an accident year crossed with a development period — and "12 months has not elapsed for the 2023 year" is a separate fact from the same statement about 24 months. Collapsed into one span, those coordinates stop being addressable: a consumer can no longer ask what the 2023 row holds at 24 months, because the cell it would look in no longer exists.

Elsewhere the empty region is one undifferentiated blank. Here it is a set of individually meaningful absences that happen to be adjacent.

This is the same principle that settles blank space beside a header in Barely-Existing Columns and Headers (§9.3.1): a span is a claim that the page merged something. The page did not merge these.

Why the blank matters more here than elsewhere

In most tables, blank versus an explicit empty marker is cosmetic. In a loss triangle the blank carries actuarial meaning: it asserts this development period does not exist yet, which is a fact about the world, not a gap in the transcription. That is the same argument that makes the em-dash a value in Marks and Symbols in Cells (§9.6.6) and the coloured fill a value in Color as the Value (§9.6.4) — a non-value that is a value.

More

Rule id tables-triangles-and-matrix-tables · tables encoding empty-cells