SheetXL - v1.0.2
    Preparing search index...

    Interface Anomaly

    One error check firing at a cell: the check, and the facts that make it fire.

    Evidence, never a verdict: what the cell breaks and where, so the reader can judge it. A pattern break is sometimes the right cell in a wrong run. There is no confidence.

    The evidence a cell's finding carries is the same for every cell of a filled run that breaks the same way, so a row of breaks is one region of the anomalies feature. Positions are therefore relative to the cell, in R1C1 (R[-1]C is the cell above).

    check evidence
    formula axis ('row' / 'column') the run lies along; expected, the R1C1 formula both neighbors share; thickness, the cells across the break (Excel flags only 1); flanks, how far the run goes on each side; corroborated
    formulaRange reference, the range the formula reads; omitted, the typed number just past its end
    numberStoredAsText none — the cell's own text is the fact
    emptyCellReference reference, the reference that reads an empty cell
    unlockedFormula none
    hardcodeInRun axis, expected ('formula'), thickness, flanks, corroborated
    styleBreak layer ('font', 'fill', 'numberFormat', 'alignment'); axis; expected, the format both sides share; actual, this cell's; thickness, flanks, corroborated
    styleRole part ('fontColor'); role ('link', 'reference', 'computed', 'input'); expected, the color most cells of that role on the sheet have; actual, this cell's; majority, how many cells of the role have expected; of, how many cells the role has on the sheet
    repeatedReference reference, the reference counted again; overlaps, the one it falls inside when the two are not the same
    degenerateCall function; reference, the one cell aggregated, or literals, the typed numbers
    sumIncludesSubtotal reference, the range summed; subtotal or ratio, the cell inside it that is one
    misalignedReference term, the reference outside the block; block, the rows (or columns) of the cell's own block that the formula sums; landsAt, the block the term lands in, when it lands in one; targetRole, what the term reads: 'lineItem' (a line of another block), 'closingRow' (another block's last line, a subtotal), 'outsideBlocks' (no block) or 'absolute' (a fixed reference, a rate or an assumption)
    approximateMatch function; matchType, '1', '-1', 'TRUE' or 'omitted'
    lookupShape array, the range the result is read from; vector, the range the key is found in
    externalReference kind ('workbook', 'deleted', 'udf'); reference, or function for a 'udf'
    errorConstant error, the error the formula is; dataTable, the anchor of a data table that spills less than the block it heads, and extent, the rectangle the two cover
    linkLabelMismatch label / labelAt, the cell's row label; target / targetAt, the label of the row it links to
    keyLabelMismatch function; key; rowLabel / rowLabelAt and columnLabel / columnLabelAt, where found
    signVsSiblings reference; sign ('negative' / 'positive'); siblings, how many links into that row read the other sign; siblingAt, one of them
    literalMatchesInput literal, the number as the formula types it; inputAt, the nearest typed number of that value no formula reads; label / labelAt, that input's label, when it has one; matches, the places the value is typed unread
    twinBlockDivergence part ('literal' / 'sign'); for a literal, literal and expected, this formula's number and its twins'; for a sign, term of terms, the term that differs, references, how many the shape holds, and sign, how this formula adds it; twins, how many formulas carry the other side; twinAt, one of them
    scaleOutlier format ('percent'); times, the power of ten the value is off by; typical, the median of the sheet's typed numbers in that format; of, how many there are
    unreferencedInput label / labelAt, the line's label; cells, the typed numbers on the line nothing reads; value, the number as shown, for a line of one cell
    rowGap label / labelAt, the row's label; missing of of, the empty cells among those filled in both neighbor rows; kind ('cells', some of the row is filled; 'row', none of it); above / aboveAt and below / belowAt, the neighbor rows' labels, where text; labelFont: 'own' when neither neighbor's label shares the label's font
    constantFrequency kind ('number', 'string', 'boolean'); value, a number without its sign; uses, the places in the workbook that type it; of, the workbook's constant uses

    Runs. formula, hardcodeInRun and styleBreak are one rule over different layers of the sheet: a region thin against the run it sits in. The cells on both sides agree with each other and not with it, and the run goes on at least two cells each side and at least as far as the region is thick (flanks), so a block as large as its surroundings is a section, not a break. A single cell between two that agree is kept too, with flanks: 1. A format compares as authored on the cell: none ('normal'), one equal to the Normal style's ('authored-normal'), or the authored properties as JSON.

    corroborated lists the other layers that change at both of the region's edges too: formula shape ('formulaShape'), formula or typed value ('hasFormula'), the value's kind ('kind'), and the format layers. A lone change, corroborated by nothing, is the stronger candidate; a row that differs on many layers (a total under its line items) is usually structure.

    Blocks. misalignedReference reads a formula against the block it closes or opens: the lines (rows, or columns for a row-wise total) holding content in the formula's own columns, between blank lines that span them. It fires on a sum that adds the block's own cells and also, with the same sign, a cell off the block's lines: =SUM(K51:K53)+J46 in K54. A term on the block's lines in another column (a prior period) and a term taken away are not reported, nor is a sum of other blocks' totals that reads nothing of its own block. A running total that adds the previous block's total is reported as closingRow, ranked low.

    Roles. A cell's role (ICell.Role, the role feature) is its job, from what it reads and who reads it. styleRole pairs a format part with the role, for links, references, computed cells and inputs beside a label: the color most cells of a role have on the sheet is the role's, and a link, reference or computed cell in another color fires when that color is one the workbook writes some role in, on any sheet (a link left black where links are green and calculations black), never when it is decorative (white, red, a section's text color). A label never fires, and an input fires only beside a label: a typed number inside a data block reads like the data around it. Colors are the authored font color as #RRGGBB; a cell with none authored has the Normal style's. majority and of are evidence, not a gate: a convention held by 3 of 5 cells is reported as such.

    Rank says which finding to read first. It is not a confidence, and it is relative to the workbook: a finding repeated across a model is the author's style, and the one that occurs once is the exception to read first. So a finding's rank can change when another sheet changes. Regions of the anomalies feature list highest rank first, and so do a cell's findings, in check order within an equal rank.

    Literals and twins. literalMatchesInput reads the numbers typed into a formula against the typed numbers no formula reads: a reference replaced by its value is what left the input unread. Small counts, calendar periods and powers of ten never fire. twinBlockDivergence reads formulas of the same shape once references, literals and signs are set aside: twins that divide by 12 and by 365, or one that adds a term the others take away. Literals compare only when both are a calendar period, a power of ten or a small count. Every side of a divergence is listed, since two wrong rows can outvote the right one.

    A sign divergence ranks low: signs differ between line items by design, so it is read when asked for by check.

    constantFrequency reports every constant a formula types, the common ones too, with how many places in the workbook type it (uses) and of how many constant uses (of). The rarer the constant, the higher it ranks. A finding's uses and of change when another sheet changes.

    What is left out. unreferencedInput reads the typed numbers beside a label that no formula on any sheet reads: an assumption the model never uses, which in a model being built is the item still to build. A labeled line fires only when none of its numbers is read, so a historical row whose last period feeds a forecast is data in use; a line of numbers at one step (years) is a header. The rank is divided by the line's cells: a lone cell is an assumption, a long row is data. rowGap reads a labeled row against the rows above and below it (within one spacer row): the cells filled in both neighbors and empty here are the line left out, or its missing periods. A row that is partly filled ranks in full, an empty row at half, and a row whose label is in a font neither neighbor shares (a heading) at a third. Both findings change when another sheet starts or stops reading the cell.

    A label's position is absolute (R12C3), since it stays put whichever cell of a region reads it; its text is the one read at the region's first cell.

    interface Anomaly {
        check: ICell.ErrorCheck;
        evidence: Readonly<Record<string, string | number | readonly string[]>>;
        rank: number;
    }
    Index

    The check that fires.

    evidence: Readonly<Record<string, string | number | readonly string[]>>

    The facts it fires on.

    rank: number

    Which finding to read first, highest first; see the remarks.