# Known caveats

A sworn declaration is still a declaration. MGAP publishes a *limitantes conocidas* (known limitations) column beside every variable, and cow-tools keeps a quality report per year; both are here, in one place, so that nobody has to discover them at the bottom of a spreadsheet at two in the morning.

## Which count of animals

There are two, and they are both right.

- **PD+AD** (`animalsCount`): the holder's own animals inside the establishment plus other people's animals inside it. "The one traditionally used by DICOSE."
- **PD+PF** (`animalsCountPf`): the holder's own animals inside plus its own animals kept somewhere else. MGAP: "used to measure the stock of cattle associated with dairy production."

MGAP again: "the number of own animals outside does not match the number of others' animals inside, so the total stock can vary according to the criterion adopted." In 2025 the national beef herd is 11,583,321 by PD+AD and 11,734,888 by PD+PF. `cow_rank` and the derived metrics use PD+AD; `cow_herd` gives both and recommends PD+PF for dairy cattle. Name the measure with the number.

## Which species to believe

"The stocks of pigs, goats and horses are included as a reference, since no quality controls have been applied to them." Cattle and sheep are checked; the others are what was declared.

## Where an animal is

- **Department** is the department where the holder is *registered*, from the register of livestock holders. "In some cases there may be inconsistencies with the department of the enumeration area in which the establishment is classified."
- **Enumeration area** is computed from the land parcels (*padrones*) the holder declares, DIEA's map of enumeration areas and the rural cadastre. "Not every producer declares parcels, not every parcel is in the rural cadastre," and an establishment spanning several areas is put in the largest. Rows that could not be placed carry area 0.
- A department total and the sum of its enumeration areas need not agree. Do not add one to the other.

## Land

- Total area is "the sum of hectares by tenure, except when that is zero, when the sum of land uses is used," and "there may be differences in some cases between the total area and its breakdown by tenure and by land use."
- Livestock area excludes cropland, gardens, orchards, vineyards and 70% of planted forest.
- Some establishments declare animals and no land (the size stratum 0, which also lets dairy farmers without land be seen). Densities per hectare are therefore null where the area is zero, never infinite.

## Dairy

"Some cases of inconsistency have been identified between the breakdown of dairy cattle by category in form A3 and the total of cattle in the establishment in form A1." The category table and the species table can disagree slightly for dairy cattle; `cow_herd` reads the category table, `cow_rank`'s counts read the species table.

## Codes

- Activity comes from the third and fourth digits of the holder's DICOSE number, as assigned at registration; "some isolated inconsistencies between the activity and the declared line of business have been detected."
- Category codes are only unique within a species. Category 2 is breeding cows for beef cattle and milking cows for dairy cattle. cow-tools puts the species in the category's IRI so the two never meet.
- The 2025 package does not publish every code list the 2024 one does. Where 2025 observations use a code whose list only 2024 publishes (MGAP production types), cow-tools borrows the 2024 list, says so in 2025's quality report, and records the borrow as provenance. It never borrows silently.
- The files are Latin-1 with semicolons and decimal commas. cow-tools decodes them; a tool that reads them as UTF-8 will find "A�OS" where there should be "AÑOS".

## Years

Two years are loaded: 2024 and 2025. The tools refuse any other. The 2025 package is "Datos Actualizados" (updated data), last modified on 17 June 2026; MGAP has revised these packages before and may again, and the source graph records the sha256 of every file used, so a later revision can be told apart.

## What the quality report says

`cow_quality_report` with a `year` returns that year's checks, read from the RDF: whether the year passed (both did, with no blocking violations), the warnings, and the violations. The individual-record gate is part of it: an extract carrying a DICOSE number, an owner or an animal identifier is refused before anything is written, and the RDF is re-scanned for such predicates afterwards.

## What the tools will not do

They will not guess a department from a misspelling, average two measures, extrapolate a year, or answer from a cache that might differ from the RDF (a cached report is served only when its parameters match exactly; otherwise the answer says it fell back to SPARQL). When they cannot answer, they say why.

---

*This guide is by Sophia Labs, under CC BY 4.0. The data it describes is MGAP's (and, for the catalogue, each publisher's), under the Licencia de Datos Abiertos – Uruguay.*

The cow-tools guide, The guide: https://cow-tools.sophia-labs.com/guide/caveats/ (this page for people) · the whole guide: https://cow-tools.sophia-labs.com/guide/index.md · in Sophia: the graph `cow-tools-guide`, document `caveats` (MCP `read_document` at https://cow-tools.sophia-labs.com/mcp). CC BY 4.0, credit "cow-tools, Sophia Labs".
