Data Model: PharmacyRecord¶
PharmacyRecord representa una farmacia en el dataset canónico normalizado.
Se usa en:
GET /v1/farmacias/snapshot/{territory_code}GET /v1/farmacias/export/{territory_code}/json- payloads de
changes(operation=upsert)
Ejemplo¶
{
"external_id": "28000001",
"name": "Farmacia ...",
"address_line": "CALLE ALCALA, 98",
"postal_code": "28009",
"city": "Madrid",
"province": "Madrid",
"territory_code": "ES-MD",
"latitude": 40.421234,
"longitude": -3.675432,
"coordinate_source": "official",
"owner_name": "Titular ...",
"cnn_code": "123456",
"source_slug": "comunidad_madrid_oficinas_farmacia",
"official_source_name": "Comunidad de Madrid - Oficinas de farmacia",
"official_source_url": "https://datos.comunidad.madrid/...",
"official_last_modified_at": "2026-02-14T00:00:00Z",
"observed_at": "2026-02-15T03:10:00Z",
"is_active": true
}
Campos¶
Identidad¶
external_id(string): identificador oficial dentro del territorio.territory_code(stringES-XX): territorio (ver Territories).
La clave lógica del record es:
(territory_code, external_id)
Datos de la farmacia¶
name(string): nombre/denominación.owner_name(string, optional): titular (cuando la fuente lo provee).cnn_code(string, optional): código nacional (cuando existe).
Dirección¶
address_line(string): dirección normalizada en una sola línea.postal_code(string): código postal (si falta, puede venir como00000).city(string): municipio/población.province(string): provincia.
Coordenadas¶
latitude/longitude(float, optional): WGS84.coordinate_source(enum, optional):official: viene con coordenadas de la fuente oficial (o conversión oficial, p.ej. UTM->WGS84).geocoded: recuperadas por geocoding (CartoCiudad/Google/Nominatim).manual: override manual desde el panel admin.
Proveniencia y trazabilidad¶
official_source_name(string): nombre corto de la fuente oficial.official_source_url(string URL): URL oficial.official_last_modified_at(datetime, optional): fecha de “última modificación” de la fuente si se conoce.observed_at(datetime): instante UTC en el que se observó/ingirió esta versión.source_slug(string, optional): id interno del conector/fuente.
Estado operativo¶
is_active(bool): si la fuente lo marca como desactivada/inactiva.
Note
Algunas CCAA no aportan “baja” explícita. En esos casos, el cierre “duro” se detecta cuando la farmacia desaparece del dataset (ver business events).