dwcready
What we mean when we refuse a column
When we cannot interpret something in your file, we say so and stop — we never
guess, because a wrong interpretation is impossible to tell from a right one once it is
published. Every refusal carries one of the codes below.
Most files produce a handful of these, not hundreds: each one is a decision about a
whole column rather than about a row. A refusal is not a rejection of your data — it is the part
of the report that tells you what still needs a human.
63 codes in 21 groups. This page is generated from the same registry the checker
emits from, so it cannot drift from what you were actually told.
Opening the file
file.bad_container- the .gz/.zip wrapper itself would not open
file.empty- readable, and there is nothing in it
file.unreadable- no table could be produced from these bytes at all
Character encoding
encoding.not_utf8- the bytes are not UTF-8 and the fallback is a guess
Zip archives
zip.ambiguous_members- several tables and no declaration of which is meant
zip.no_tabular_member- a zip with nothing we read inside it
zip.too_large_uncompressed- the archive expands past the parser's bound — a COMPRESSED byte cap does not bound this
Excel workbooks
xlsx.multi_sheet_first_taken- several sheets with DIFFERENT headers; counts describe the first only
xlsx.no_worksheet- an .xlsx with no worksheet (probably .xlsb or a macro workbook)
xlsx.parallel_sheets- one table split across tabs — the subject is the SHEET NAME
xlsx.shared_strings_unreadable- text cells will be empty
xlsx.styles_unreadable- dates cannot be told from numbers
JSON structure
json.nested_not_flattened- arrays/objects below the flatten depth were not exposed
PDFs
pdf.ambiguous_tables- several DIFFERENT tables in one PDF — which one is the data is the depositor's to say, not ours to guess
pdf.encrypted- encrypted — we hold no key and will not attempt one
pdf.invisible_text- render-mode-3 text (the OCR-layer tell)
pdf.not_a_pdf- the signature is not a PDF
pdf.partial_page_coverage- the table was read from some of the PDF's pages, not all of them — a short read that must never look like a whole one
pdf.prose_not_table- running prose, not a table
pdf.rotated_text- rotated/sheared text, not projected flat
pdf.scanned- a page image, not text — OCR is a DECLARED rung we have not built
pdf.signals_contradict- ruled lines and whitespace disagree about the columns
pdf.too_few_lines- fewer lines than a header plus a record
pdf.unmappable_glyphs- runs whose font encoding we could not map, dropped rather than emitted
Darwin Core Archives you upload
dwca.core_is_not_occurrence- the declared core is an EVENT (or other) table — the species are in an extension
dwca.core_read_extensions_dropped- a Darwin Core Archive: we read its declared core and set the extensions aside
Finding the header row
header.duplicate- the same header appears more than once
header.not_full_width- no row is wide enough to be the header
header.preamble_rows- title/blank rows above the real header
Individual rows
row.field_unparsed- a single row's value did not parse for its term — a ROW event, not a column one
row.not_landable- the row lacks the minimum (coordinate + date) to be placeable
row.ragged- rows disagree with the header on column count
Matching your columns to Darwin Core
term.ambiguous_header- several columns token-match and none matches exactly
Values that contradict their header
value.atomised_date_conflict- year/month/day contradicts eventDate — GBIF flags the record twice and trusts neither
value.column_empty- the column exists but holds no values at all — ABSENT, which is not the same as invalid and must never be reported as one
value.fused_terms- one cell holding several Darwin Core terms at once — REFUSED, never parsed, because separating them means inventing which number belongs to which description
value.insufficient- too few values to decide — NOT evidence of absence
value.not_count- a count column that is not non-negative numeric
value.not_date- a date column nothing in which parsed
value.not_in_vocabulary- values outside the term's controlled vocabulary
value.not_integer- an integer-typed DwC term carrying a non-integer — GBIF drops the field rather than rounding it
value.numeric_not_prose- a prose term whose values are entirely numeric
value.out_of_range- the column's values contradict the term its header names
value.refused_other- a value check refused it and the reason is in the message
value.uncorroborated_count- a token-only `count` match whose header carries an unexplained modifier; the values cannot corroborate either reading
value.wrong_cardinality- an identifier whose repetition contradicts the term
value.zero_coordinate- a 0,0 coordinate pair — a missing-value sentinel emitted as a position
Species names
taxon.authorship_veto- a taxon column carrying nomenclatural authorship lost to a cleaner one
taxon.rank_refinement_applied- two taxon columns; the finer one was chosen
Grid references
gridref.malformed- not a British National Grid reference at all — 100 km letters outside the grid, the letter I (which the grid does not use), or an odd number of digits (a ref splits evenly into easting and northing)
gridref.recognised_not_decoded- a coordinate system we DO decode whose values did not decode — almost always a projected CRS in metres, not degrees
gridref.unsupported_form- a well-formed British grid reference in a form we deliberately do not decode — a DINTY tetrad (SK98A), a quadrant (SK98NW), or more than 10 digits. REFUSED rather than widened to the enclosing square, which would discard the precision the recorder wrote
Packed coordinates
packed.unparseable- a packed coordinate column nothing in which parsed as a pair
Controlled vocabularies
vocabulary.source_unavailable- a SOURCED vocabulary artifact we depend on was not available, so the mouth ran without it — this is OUR degradation, not a defect in your file, and nothing you can fix
Answers you gave us
choice.unknown_header- the depositor answered a disambiguation with a column the file lacks
Publication metadata
eml.metadata_incomplete- the archive cannot be PUBLISHED until facts only the depositor has (creator, description, licence) are supplied
Building the archive
archive.metadata_not_an_object- depositor metadata arrived as something other than a JSON object
archive.metadata_unparseable- the depositor metadata was not valid JSON — REFUSED rather than ignored, so our parse failure cannot read as their gap
archive.no_data_from_file- the file was read and NOTHING in it reached the archive — every emitted value would be one we minted or defaulted ourselves
archive.too_many_rows- above §B.3's automated ceiling — this size is QUOTED, and slicing it silently would hand back a partial archive that looks complete
Payment
payment.required- the archive for this submission has not been paid for (§B.3)
Upload limits
upload.refused- refused before parsing, by the abuse budget
Uncoded — a defect on our side
UNCODED- ⚠ emitted without a code — a site that has not been migrated; this is a DEFECT