Follow the path from source to published file
This is a source review of BAKUO’s local scripts/build-dataset.mjs on November 4, 2026. It establishes what the inspected code does; it does not establish that the public service currently deploys this exact source and dataset.
The builder reads geocoded records, checks required fields, business and address conditions, and coordinate bounds, then writes localized JSON. Rejected rows do not reach the next stage. Looking only at the final JSON therefore hides which businesses disappeared and why. Keep the source and output available together.
An exclusion rule changes the meaning of the dataset
The builder’s isRoadShop() excludes online businesses and names or addresses that appear to describe hotels, travel agencies, and other categories. This is an editorial rule intended to select ordinary visitable shops. It is not an official check of current trading or closure status.
String rules are convenient, but can exclude legitimate shops. Review samples of rejected rows and explain which kinds of business the directory intends to cover. The number of records in the official register should not be described as the number of shops displayed by the service.
Check for missing values before converting coordinates
JavaScript converts both Number('') and Number(null) to zero. Successful numeric conversion is not proof that a coordinate was supplied. The following standalone teaching example uses synthetic rows; it is not a copy of BAKUO’s builder. Run it in Node.js or a browser console.
function inspect(row) {
if (row === null || typeof row !== 'object' || Array.isArray(row)) return 'INVALID_ROW';
if (typeof row.name !== 'string' || !row.name.trim()) return 'MISSING_NAME';
if (typeof row.address !== 'string' || !row.address.trim()) return 'MISSING_ADDRESS';
for (const key of ['lat', 'lng']) {
const value = row[key];
if (value === null || value === undefined ||
(typeof value !== 'number' && typeof value !== 'string') ||
(typeof value === 'string' && !value.trim()) ||
!Number.isFinite(Number(value))) return 'INVALID_COORDINATE';
}
const lat = Number(row.lat), lng = Number(row.lng);
return lat >= -90 && lat <= 90 && lng >= -180 && lng <= 180
? 'CHECK_ADDRESS_MATCH' : 'OUT_OF_RANGE';
}
console.log(inspect(null));
console.log(inspect([]));
console.log(inspect({name: 'Example shop', address: 'Example address', lat: '', lng: 127}));
console.log(inspect({name: 'Example shop', address: 'Example address', lat: 37, lng: 127}));
The outputs are INVALID_ROW, INVALID_ROW, INVALID_COORDINATE, and CHECK_ADDRESS_MATCH. Null and arrays are rejected before their fields are read. The final result does not certify an address. It only establishes that the supplied values are nonempty and fall within global latitude and longitude limits. Preserve the original row and convert only fields that need conversion so that errors remain traceable.
A point inside a bounding box can still be wrong
The inspected builder applies a rectangular range around its intended Korean coverage. This is a useful first check for swapped columns and distant points. It does not establish a national boundary or the location of a building.
A Seoul address paired with a Busan coordinate can pass the same bounds check. Compare the original address, geocoding response, and displayed location. Decimal places do not establish accuracy either: uncertainty in the source and address interpretation comes before rounding precision.
Review the outputs of each update
- Record the provider, publication date, and usage conditions, and retain the original file.
- Review accepted, rejected, and unresolved rows with reasons. Distinguish a changed rule from a changed source when exclusion counts move.
- Check duplicate registration identifiers and separate businesses sharing an address. Do not merge solely by address.
- Check required JSON fields, matching identifiers across languages, and representative locations on the map.
This is a publication review checklist, not a claim that the current builder implements every step. Unicode normalization can help compare text but does not repair a wrong address. Continue with the address and coordinate-system note.