{
    "schemes": [],
    "swagger": "2.0",
    "info": {
        "description": "API de datos geoespaciales sobre el sistema de transporte público de la Ciudad de México y Área Metropolitana.\nOfrece dos tipos de respuesta: descriptiva (JSON) con datos operativos de líneas y estaciones,\ny geográfica (GeoJSON) con geometrías listas para renderizar en mapas interactivos.\nCubre los sistemas: METRO, Metrobús (MB), Cablebús (CBB), RTP, Trolebús (TROLE),\nTren Ligero (TL), Mexicable, Mexibús, Interurbano, Cable Car (CC) y CETRAM.\nBase path: /movilidad — Documentación: /swagger/",
        "title": "Apimetro — API de Movilidad CDMX",
        "contact": {
            "name": "galigaribaldi (Galileo Cabrera Garibaldi)",
            "email": "galigaribaldi0@gmail.com"
        },
        "license": {
            "name": "Business Source License 1.1",
            "url": "https://github.com/galigaribaldi/Apimetro/blob/main/LICENSE"
        },
        "version": "1.0"
    },
    "host": "",
    "basePath": "/movilidad",
    "paths": {
        "/analitico/afluencia-estacion": {
            "get": {
                "description": "Retorna registros de afluencia mensual por estación desde `plutarco.afluencia_estacion`.\nGranularidad: 1 fila = 1 estación × 1 mes × 1 año.\nSolo sistema Metro (STC) — los demás sistemas no publican datos por estación.\nDatos fuente: STC Metro / datos.cdmx.gob.mx (CC BY 4.0).\nTotal actual: 38,219 registros (195 estaciones, 12 líneas, 2010-2026).",
                "consumes": [
                    "application/json"
                ],
                "produces": [
                    "application/json"
                ],
                "tags": [
                    "Analítico"
                ],
                "summary": "Afluencia mensual por estación del Metro CDMX",
                "parameters": [
                    {
                        "type": "integer",
                        "description": "ID de la línea Metro (ref: public.lineas.id)",
                        "name": "linea_id",
                        "in": "query"
                    },
                    {
                        "type": "string",
                        "description": "Número comercial de la línea. Ej: 1, A, L12",
                        "name": "num_comercial",
                        "in": "query"
                    },
                    {
                        "type": "integer",
                        "description": "ID de la estación (ref: public.estacions.id)",
                        "name": "estacion_id",
                        "in": "query"
                    },
                    {
                        "type": "string",
                        "description": "Nombre de la estación (búsqueda parcial, ILIKE). Ej: Pantitlán",
                        "name": "nombre_estacion",
                        "in": "query"
                    },
                    {
                        "type": "integer",
                        "description": "Filtrar por año. Ej: 2024",
                        "name": "anio",
                        "in": "query"
                    },
                    {
                        "type": "integer",
                        "description": "Filtrar por mes (1-12). Ej: 3 = Marzo",
                        "name": "mes_num",
                        "in": "query"
                    }
                ],
                "responses": {
                    "200": {
                        "description": "Registros de afluencia encontrados",
                        "schema": {
                            "$ref": "#/definitions/models.AfluenciaEstacionResponse"
                        }
                    },
                    "404": {
                        "description": "No se encontraron registros",
                        "schema": {
                            "type": "object",
                            "additionalProperties": true
                        }
                    },
                    "500": {
                        "description": "Error interno",
                        "schema": {
                            "type": "object",
                            "additionalProperties": true
                        }
                    },
                    "503": {
                        "description": "Extensión Plutarco no activada — ejecutar make plutarco-setup",
                        "schema": {
                            "type": "object",
                            "additionalProperties": true
                        }
                    }
                }
            }
        },
        "/analitico/afluencia-linea": {
            "get": {
                "description": "Retorna registros de afluencia mensual por línea desde `plutarco.afluencia_linea`.\nGranularidad: 1 fila = 1 línea × 1 mes × 1 año.\nSistemas disponibles: METRO, MB (Metrobús), CBB (Cablebús), TL (Tren Ligero), TROLE (Trolebús).\nDatos fuente: SEMOVI / organismos operadores.\nTotal actual: 1,197 registros (5 sistemas).",
                "consumes": [
                    "application/json"
                ],
                "produces": [
                    "application/json"
                ],
                "tags": [
                    "Analítico"
                ],
                "summary": "Afluencia mensual por línea de transporte",
                "parameters": [
                    {
                        "type": "string",
                        "description": "Filtrar por sistema: METRO, MB, CBB, TL, TROLE",
                        "name": "sistema",
                        "in": "query"
                    },
                    {
                        "type": "integer",
                        "description": "ID exacto de la línea (ref: public.lineas.id)",
                        "name": "linea_id",
                        "in": "query"
                    },
                    {
                        "type": "integer",
                        "description": "Filtrar por año. Ej: 2024",
                        "name": "anio",
                        "in": "query"
                    },
                    {
                        "type": "integer",
                        "description": "Filtrar por mes (1-12). Ej: 3 = Marzo",
                        "name": "mes_num",
                        "in": "query"
                    }
                ],
                "responses": {
                    "200": {
                        "description": "Registros de afluencia encontrados",
                        "schema": {
                            "$ref": "#/definitions/models.AfluenciaLineaResponse"
                        }
                    },
                    "404": {
                        "description": "No se encontraron registros",
                        "schema": {
                            "type": "object",
                            "additionalProperties": true
                        }
                    },
                    "500": {
                        "description": "Error interno",
                        "schema": {
                            "type": "object",
                            "additionalProperties": true
                        }
                    },
                    "503": {
                        "description": "Extensión Plutarco no activada — ejecutar make plutarco-setup",
                        "schema": {
                            "type": "object",
                            "additionalProperties": true
                        }
                    }
                }
            }
        },
        "/analitico/agebs": {
            "get": {
                "description": "Retorna AGEBs (Áreas Geo-Estadísticas Básicas) urbanas en formato GeoJSON (FeatureCollection).\nCada Feature contiene una geometría tipo `MultiPolygon` y atributos censales del INEGI Censo 2020:\npoblación total, viviendas habitadas, PEA, área en km² y densidad poblacional.\nScope geográfico: 6 estados de la macrometrópoli (CDMX, EdoMex, Morelos, Puebla, Querétaro, Tlaxcala).\n**Paginación obligatoria** — default: limit=500, offset=0. Máximo recomendado: 1000 por request.",
                "consumes": [
                    "application/json"
                ],
                "produces": [
                    "application/json"
                ],
                "tags": [
                    "Analítico"
                ],
                "summary": "GeoJSON de AGEBs urbanas",
                "parameters": [
                    {
                        "type": "string",
                        "description": "Clave de entidad federativa (2 dígitos). Ej: 09=CDMX, 15=EdoMex, 17=Morelos, 21=Puebla, 22=Querétaro, 29=Tlaxcala",
                        "name": "entidad",
                        "in": "query"
                    },
                    {
                        "type": "string",
                        "description": "Nombre del municipio o alcaldía (búsqueda parcial). Ej: 'Cuauhtémoc', 'Naucalpan'",
                        "name": "municipio_alcaldia",
                        "in": "query"
                    },
                    {
                        "type": "integer",
                        "description": "Número máximo de AGEBs a retornar (default: 500)",
                        "name": "limit",
                        "in": "query"
                    },
                    {
                        "type": "integer",
                        "description": "Número de AGEBs a saltar para paginación (default: 0)",
                        "name": "offset",
                        "in": "query"
                    }
                ],
                "responses": {
                    "200": {
                        "description": "FeatureCollection con AGEBs encontradas",
                        "schema": {
                            "$ref": "#/definitions/models.FeatureCollection"
                        }
                    },
                    "404": {
                        "description": "No se encontraron AGEBs con los filtros proporcionados",
                        "schema": {
                            "type": "object",
                            "additionalProperties": true
                        }
                    },
                    "500": {
                        "description": "Error interno del servidor al ejecutar la consulta espacial",
                        "schema": {
                            "type": "object",
                            "additionalProperties": true
                        }
                    },
                    "503": {
                        "description": "Extensión Plutarco no activada — ejecutar make plutarco-setup",
                        "schema": {
                            "type": "object",
                            "additionalProperties": true
                        }
                    }
                }
            }
        },
        "/mapas/geojsonEstacion": {
            "get": {
                "description": "Retorna estaciones de transporte público en formato GeoJSON (FeatureCollection).\nCada Feature contiene una geometría tipo `Point` (longitud/latitud) y un objeto `properties`\ncon atributos como nombre, sistema, alcaldía, número comercial, año y datos de CETRAM.\nSi no se especifica `sistema`, se devuelven estaciones de todos los sistemas.\nLos textos con caracteres especiales (ñ, tildes) se normalizan automáticamente.",
                "consumes": [
                    "application/json"
                ],
                "produces": [
                    "application/json"
                ],
                "tags": [
                    "GeoJSON"
                ],
                "summary": "GeoJSON de Estaciones",
                "parameters": [
                    {
                        "type": "string",
                        "description": "Sistema de transporte. Ej: METRO, MB, CBB, RTP, TROLE, TL, MEXIBUS, MEXICABLE, INTERURBANO, CC. Vacío = todos.",
                        "name": "sistema",
                        "in": "query"
                    },
                    {
                        "type": "string",
                        "description": "Número o clave comercial de la línea (ej: '1', 'A', 'MB1')",
                        "name": "num_comercial",
                        "in": "query"
                    },
                    {
                        "type": "string",
                        "description": "Alcaldía (CDMX) o municipio del Área Metropolitana donde se ubica la estación (ej: 'Cuauhtémoc')",
                        "name": "alcaldia_municipio",
                        "in": "query"
                    },
                    {
                        "type": "string",
                        "description": "Nombre del ramal o variante de ruta al que pertenece la estación (ej: 'Ramal Politécnico')",
                        "name": "nombre_ramal",
                        "in": "query"
                    },
                    {
                        "type": "string",
                        "description": "Jerarquía del sistema. Ej: 'Línea principal', 'Ramal'",
                        "name": "jerarquia_transporte",
                        "in": "query"
                    },
                    {
                        "type": "string",
                        "description": "Tipo de infraestructura vial. Valores: Superficie, Elevado, Subterráneo",
                        "name": "derecho_de_via",
                        "in": "query"
                    },
                    {
                        "type": "string",
                        "description": "Filtra estaciones que son o colindan con un CETRAM (Centro de Transferencia Modal). Valores: true, false",
                        "name": "es_cetram",
                        "in": "query"
                    },
                    {
                        "type": "string",
                        "description": "Nombre del CETRAM (ej: 'Indios Verdes', 'Tacubaya'). Aplica solo si es_cetram=true",
                        "name": "nombre_cetram",
                        "in": "query"
                    },
                    {
                        "type": "string",
                        "description": "Nombre de un CETRAM para buscar estaciones en un radio de 250 metros a su alrededor",
                        "name": "cetram_real",
                        "in": "query"
                    }
                ],
                "responses": {
                    "200": {
                        "description": "FeatureCollection con estaciones encontradas",
                        "schema": {
                            "$ref": "#/definitions/models.FeatureCollection"
                        }
                    },
                    "404": {
                        "description": "No se encontraron estaciones con los filtros proporcionados",
                        "schema": {
                            "type": "object",
                            "additionalProperties": true
                        }
                    },
                    "500": {
                        "description": "Error interno del servidor al ejecutar la consulta espacial",
                        "schema": {
                            "type": "object",
                            "additionalProperties": true
                        }
                    }
                }
            }
        },
        "/mapas/geojsonLinea": {
            "get": {
                "description": "Retorna trazos de líneas de transporte en formato GeoJSON (FeatureCollection).\nCada Feature contiene la geometría del trazo (`LineString` o `MultiLineString`) y un objeto\n`properties` con métricas operativas: velocidad promedio (km/h), frecuencia (min),\ncapacidad del vehículo, distancia en metros, derecho de vía y jerarquía de transporte.\nLos trazos se obtienen de la tabla Ramales, enriquecidos con datos de HistoricoOperacion.\nSi no se especifica `sistema`, se devuelven trazos de todos los sistemas.",
                "consumes": [
                    "application/json"
                ],
                "produces": [
                    "application/json"
                ],
                "tags": [
                    "GeoJSON"
                ],
                "summary": "GeoJSON de Líneas de Transporte",
                "parameters": [
                    {
                        "type": "string",
                        "description": "Sistema de transporte. Ej: METRO, MB, CBB, RTP, TROLE, TL, MEXIBUS, MEXICABLE, INTERURBANO, CC. Vacío = todos.",
                        "name": "sistema",
                        "in": "query"
                    },
                    {
                        "type": "string",
                        "description": "Número o clave comercial de la línea (ej: '1', 'A', 'MB1')",
                        "name": "num_comercial",
                        "in": "query"
                    },
                    {
                        "type": "string",
                        "description": "Nombre del ramal o variante de ruta (ej: 'IDA', 'REGRESO', 'Ramal Politécnico')",
                        "name": "nombre_ramal",
                        "in": "query"
                    },
                    {
                        "type": "string",
                        "description": "Jerarquía del sistema. Ej: 'Línea principal', 'Ramal'",
                        "name": "jerarquia_transporte",
                        "in": "query"
                    },
                    {
                        "type": "string",
                        "description": "Tipo de infraestructura. Valores: Superficie, Elevado, Subterráneo",
                        "name": "derecho_de_via",
                        "in": "query"
                    },
                    {
                        "type": "string",
                        "description": "Filtra trazos que pasan por un CETRAM. Valores: true, false",
                        "name": "es_cetram",
                        "in": "query"
                    },
                    {
                        "type": "string",
                        "description": "Dirección del trazo. Valores: 1 (ida / hacia terminal), 0 (regreso / hacia origen)",
                        "name": "sentido",
                        "in": "query"
                    },
                    {
                        "type": "string",
                        "description": "Filtra por líneas actualmente operativas. Valores: true (en operación), false (discontinuadas)",
                        "name": "existe",
                        "in": "query"
                    }
                ],
                "responses": {
                    "200": {
                        "description": "FeatureCollection con trazos de líneas y métricas operativas",
                        "schema": {
                            "$ref": "#/definitions/models.FeatureCollection"
                        }
                    },
                    "404": {
                        "description": "No se encontraron trazos con los filtros proporcionados",
                        "schema": {
                            "type": "object",
                            "additionalProperties": true
                        }
                    },
                    "500": {
                        "description": "Error interno del servidor al ejecutar la consulta espacial",
                        "schema": {
                            "type": "object",
                            "additionalProperties": true
                        }
                    }
                }
            }
        },
        "/mapas/geojsonPoligono": {
            "get": {
                "description": "Retorna límites administrativos en formato GeoJSON (FeatureCollection).\nCubre alcaldías de la CDMX, municipios del Área Metropolitana y entidades federativas.\nLas geometrías son de tipo `Polygon` o `MultiPolygon`, útiles para delimitar zonas en mapas.\nSi no se aplican filtros, devuelve todos los polígonos disponibles en la base de datos.",
                "consumes": [
                    "application/json"
                ],
                "produces": [
                    "application/json"
                ],
                "tags": [
                    "GeoJSON"
                ],
                "summary": "GeoJSON de Polígonos Administrativos",
                "parameters": [
                    {
                        "type": "string",
                        "description": "Entidad federativa. Ej: 'CDMX', 'Estado de México', 'Hidalgo', 'Morelos'",
                        "name": "entidad",
                        "in": "query"
                    },
                    {
                        "type": "string",
                        "description": "Nivel administrativo. Valores: alcaldia (circunscripciones de CDMX), municipio (Área Metropolitana), entidad (nivel estatal)",
                        "name": "nivel",
                        "in": "query"
                    },
                    {
                        "type": "string",
                        "description": "Nombre exacto del polígono (ej: 'Cuauhtémoc', 'Naucalpan de Juárez', 'Ecatepec de Morelos')",
                        "name": "nombre",
                        "in": "query"
                    }
                ],
                "responses": {
                    "200": {
                        "description": "FeatureCollection con polígonos administrativos",
                        "schema": {
                            "$ref": "#/definitions/models.FeatureCollection"
                        }
                    },
                    "500": {
                        "description": "Error interno del servidor al ejecutar la consulta espacial",
                        "schema": {
                            "type": "object",
                            "additionalProperties": true
                        }
                    }
                }
            }
        },
        "/{sistema}/descripcion-estacion": {
            "get": {
                "description": "Retorna registros descriptivos e históricos de estaciones de transporte.\nComplementa los datos de la tabla principal de Estaciones con información histórica o alternativa.\nIncluye clave oficial (cve_est), tipo, alcaldía y año de apertura.\nSi el sistema es TODOS, devuelve descripciones de todos los sistemas.",
                "consumes": [
                    "application/json"
                ],
                "produces": [
                    "application/json"
                ],
                "tags": [
                    "DescripcionEstacion"
                ],
                "summary": "Consultar Descripciones de Estación",
                "parameters": [
                    {
                        "type": "string",
                        "description": "Sistema de transporte. Valores: METRO, MB, CBB, RTP, TROLE, TL, MEXIBUS, MEXICABLE, INTERURBANO, CC, TODOS",
                        "name": "sistema",
                        "in": "path",
                        "required": true
                    },
                    {
                        "type": "integer",
                        "description": "ID interno del registro de descripción",
                        "name": "id",
                        "in": "query"
                    },
                    {
                        "type": "string",
                        "description": "Nombre de la estación (ej: 'Tacubaya'). Búsqueda parcial.",
                        "name": "nombre",
                        "in": "query"
                    },
                    {
                        "type": "string",
                        "description": "Alcaldía o municipio donde se ubica (ej: 'Miguel Hidalgo', 'Ecatepec de Morelos')",
                        "name": "alcaldia_municipio",
                        "in": "query"
                    },
                    {
                        "type": "string",
                        "description": "Número o clave comercial de la línea a la que pertenece (ej: '1')",
                        "name": "num_comercial",
                        "in": "query"
                    }
                ],
                "responses": {
                    "200": {
                        "description": "Lista de descripciones de estación",
                        "schema": {
                            "type": "array",
                            "items": {
                                "$ref": "#/definitions/models.DescripcionEstacion"
                            }
                        }
                    },
                    "400": {
                        "description": "Parámetros inválidos",
                        "schema": {
                            "type": "object",
                            "additionalProperties": true
                        }
                    },
                    "404": {
                        "description": "No se encontraron registros",
                        "schema": {
                            "type": "object",
                            "additionalProperties": true
                        }
                    },
                    "500": {
                        "description": "Error interno del servidor",
                        "schema": {
                            "type": "object",
                            "additionalProperties": true
                        }
                    }
                }
            },
            "post": {
                "description": "Registra una nueva descripción histórica o informativa para una estación.\nDebe asociarse a una estación existente mediante el campo `estacion_id`.",
                "consumes": [
                    "application/json"
                ],
                "produces": [
                    "application/json"
                ],
                "tags": [
                    "DescripcionEstacion"
                ],
                "summary": "Crear Descripción de Estación",
                "parameters": [
                    {
                        "type": "string",
                        "description": "Sistema de transporte",
                        "name": "sistema",
                        "in": "path",
                        "required": true
                    },
                    {
                        "description": "Objeto DescripcionEstacion con los datos a registrar",
                        "name": "descripcion",
                        "in": "body",
                        "required": true,
                        "schema": {
                            "$ref": "#/definitions/models.DescripcionEstacion"
                        }
                    }
                ],
                "responses": {
                    "201": {
                        "description": "Descripción de estación creada con éxito",
                        "schema": {
                            "type": "object",
                            "additionalProperties": true
                        }
                    },
                    "400": {
                        "description": "JSON inválido o campos requeridos faltantes",
                        "schema": {
                            "type": "object",
                            "additionalProperties": true
                        }
                    }
                }
            }
        },
        "/{sistema}/descripcion-estacion/{id}": {
            "put": {
                "description": "Reemplaza completamente el registro de descripción de estación con el ID indicado.",
                "consumes": [
                    "application/json"
                ],
                "produces": [
                    "application/json"
                ],
                "tags": [
                    "DescripcionEstacion"
                ],
                "summary": "Actualizar Descripción de Estación",
                "parameters": [
                    {
                        "type": "string",
                        "description": "Sistema de transporte",
                        "name": "sistema",
                        "in": "path",
                        "required": true
                    },
                    {
                        "type": "integer",
                        "description": "ID del registro a actualizar",
                        "name": "id",
                        "in": "path",
                        "required": true
                    },
                    {
                        "description": "Objeto DescripcionEstacion con los datos actualizados",
                        "name": "descripcion",
                        "in": "body",
                        "required": true,
                        "schema": {
                            "$ref": "#/definitions/models.DescripcionEstacion"
                        }
                    }
                ],
                "responses": {
                    "200": {
                        "description": "Descripción de estación actualizada con éxito",
                        "schema": {
                            "type": "object",
                            "additionalProperties": true
                        }
                    },
                    "400": {
                        "description": "ID inválido o JSON mal formado",
                        "schema": {
                            "type": "object",
                            "additionalProperties": true
                        }
                    }
                }
            },
            "delete": {
                "description": "Elimina un registro de descripción de estación por su ID. Esta operación es irreversible.",
                "consumes": [
                    "application/json"
                ],
                "produces": [
                    "application/json"
                ],
                "tags": [
                    "DescripcionEstacion"
                ],
                "summary": "Eliminar Descripción de Estación",
                "parameters": [
                    {
                        "type": "string",
                        "description": "Sistema de transporte",
                        "name": "sistema",
                        "in": "path",
                        "required": true
                    },
                    {
                        "type": "integer",
                        "description": "ID del registro de descripción a eliminar",
                        "name": "id",
                        "in": "path",
                        "required": true
                    }
                ],
                "responses": {
                    "200": {
                        "description": "Descripción de estación eliminada con éxito",
                        "schema": {
                            "type": "object",
                            "additionalProperties": true
                        }
                    },
                    "400": {
                        "description": "ID inválido",
                        "schema": {
                            "type": "object",
                            "additionalProperties": true
                        }
                    }
                }
            }
        },
        "/{sistema}/descripcion-linea": {
            "get": {
                "description": "Retorna registros descriptivos e históricos de líneas de transporte.\nIncluye información sobre terminales originales, tipo de línea, dirección, ampliaciones y descripción textual.\nÚtil para construir fichas informativas o mostrar la historia de una línea.\nSi el sistema es TODOS, devuelve descripciones de todos los sistemas.",
                "consumes": [
                    "application/json"
                ],
                "produces": [
                    "application/json"
                ],
                "tags": [
                    "DescripcionLinea"
                ],
                "summary": "Consultar Descripciones de Línea",
                "parameters": [
                    {
                        "type": "string",
                        "description": "Sistema de transporte. Valores: METRO, MB, CBB, RTP, TROLE, TL, MEXIBUS, MEXICABLE, INTERURBANO, CC, TODOS",
                        "name": "sistema",
                        "in": "path",
                        "required": true
                    },
                    {
                        "type": "integer",
                        "description": "ID interno del registro de descripción",
                        "name": "id",
                        "in": "query"
                    },
                    {
                        "type": "string",
                        "description": "Nombre de la terminal original de la línea (ej: 'Observatorio', 'Pantitlán')",
                        "name": "terminal_original",
                        "in": "query"
                    },
                    {
                        "type": "string",
                        "description": "ID de la línea base a la que corresponde esta descripción (ej: '1')",
                        "name": "linea_base",
                        "in": "query"
                    },
                    {
                        "type": "string",
                        "description": "Número o clave comercial de la línea (ej: '1', 'A', 'B')",
                        "name": "num_comercial",
                        "in": "query"
                    }
                ],
                "responses": {
                    "200": {
                        "description": "Lista de descripciones de línea",
                        "schema": {
                            "type": "array",
                            "items": {
                                "$ref": "#/definitions/models.DescripcionLinea"
                            }
                        }
                    },
                    "400": {
                        "description": "Parámetros inválidos",
                        "schema": {
                            "type": "object",
                            "additionalProperties": true
                        }
                    },
                    "404": {
                        "description": "No se encontraron registros",
                        "schema": {
                            "type": "object",
                            "additionalProperties": true
                        }
                    },
                    "500": {
                        "description": "Error interno del servidor",
                        "schema": {
                            "type": "object",
                            "additionalProperties": true
                        }
                    }
                }
            },
            "post": {
                "description": "Registra una nueva descripción histórica o informativa para una línea de transporte.\nDebe asociarse a una línea existente mediante el campo `linea_base`.",
                "consumes": [
                    "application/json"
                ],
                "produces": [
                    "application/json"
                ],
                "tags": [
                    "DescripcionLinea"
                ],
                "summary": "Crear Descripción de Línea",
                "parameters": [
                    {
                        "type": "string",
                        "description": "Sistema de transporte",
                        "name": "sistema",
                        "in": "path",
                        "required": true
                    },
                    {
                        "description": "Objeto DescripcionLinea con los datos a registrar",
                        "name": "descripcion",
                        "in": "body",
                        "required": true,
                        "schema": {
                            "$ref": "#/definitions/models.DescripcionLinea"
                        }
                    }
                ],
                "responses": {
                    "201": {
                        "description": "Descripción de línea creada con éxito",
                        "schema": {
                            "type": "object",
                            "additionalProperties": true
                        }
                    },
                    "400": {
                        "description": "JSON inválido o campos requeridos faltantes",
                        "schema": {
                            "type": "object",
                            "additionalProperties": true
                        }
                    }
                }
            }
        },
        "/{sistema}/descripcion-linea/{id}": {
            "put": {
                "description": "Reemplaza completamente el registro de descripción de línea con el ID indicado.\nA diferencia de PATCH, PUT requiere enviar el objeto completo.",
                "consumes": [
                    "application/json"
                ],
                "produces": [
                    "application/json"
                ],
                "tags": [
                    "DescripcionLinea"
                ],
                "summary": "Actualizar Descripción de Línea",
                "parameters": [
                    {
                        "type": "string",
                        "description": "Sistema de transporte",
                        "name": "sistema",
                        "in": "path",
                        "required": true
                    },
                    {
                        "type": "integer",
                        "description": "ID del registro a actualizar",
                        "name": "id",
                        "in": "path",
                        "required": true
                    },
                    {
                        "description": "Objeto DescripcionLinea con los datos actualizados",
                        "name": "descripcion",
                        "in": "body",
                        "required": true,
                        "schema": {
                            "$ref": "#/definitions/models.DescripcionLinea"
                        }
                    }
                ],
                "responses": {
                    "200": {
                        "description": "Descripción actualizada con éxito",
                        "schema": {
                            "type": "object",
                            "additionalProperties": true
                        }
                    },
                    "400": {
                        "description": "ID inválido o JSON mal formado",
                        "schema": {
                            "type": "object",
                            "additionalProperties": true
                        }
                    }
                }
            },
            "delete": {
                "description": "Elimina un registro de descripción de línea por su ID. Esta operación es irreversible.",
                "consumes": [
                    "application/json"
                ],
                "produces": [
                    "application/json"
                ],
                "tags": [
                    "DescripcionLinea"
                ],
                "summary": "Eliminar Descripción de Línea",
                "parameters": [
                    {
                        "type": "string",
                        "description": "Sistema de transporte",
                        "name": "sistema",
                        "in": "path",
                        "required": true
                    },
                    {
                        "type": "integer",
                        "description": "ID del registro de descripción a eliminar",
                        "name": "id",
                        "in": "path",
                        "required": true
                    }
                ],
                "responses": {
                    "200": {
                        "description": "Descripción eliminada con éxito",
                        "schema": {
                            "type": "object",
                            "additionalProperties": true
                        }
                    },
                    "400": {
                        "description": "ID inválido",
                        "schema": {
                            "type": "object",
                            "additionalProperties": true
                        }
                    }
                }
            }
        },
        "/{sistema}/estacion": {
            "get": {
                "description": "Retorna datos descriptivos (JSON) de estaciones del sistema indicado en la ruta.\nSi el sistema es TODOS, devuelve estaciones de todos los sistemas disponibles.\nLos CETRAM (Centros de Transferencia Modal) son nodos multimodales donde convergen varios sistemas.\nLa búsqueda por nombre usa coincidencia parcial (ILIKE) y normaliza caracteres especiales (ñ, tildes).",
                "consumes": [
                    "application/json"
                ],
                "produces": [
                    "application/json"
                ],
                "tags": [
                    "Estacion"
                ],
                "summary": "Consultar Estaciones de Transporte",
                "parameters": [
                    {
                        "type": "string",
                        "description": "Sistema de transporte. Valores: METRO, MB, CBB, RTP, TROLE, TL, MEXIBUS, MEXICABLE, INTERURBANO, CC, TODOS",
                        "name": "sistema",
                        "in": "path",
                        "required": true
                    },
                    {
                        "type": "integer",
                        "description": "ID interno de la estación en la base de datos",
                        "name": "id",
                        "in": "query"
                    },
                    {
                        "type": "string",
                        "description": "Nombre de la estación (ej: 'Tacubaya'). Búsqueda parcial e insensible a mayúsculas.",
                        "name": "nombre",
                        "in": "query"
                    },
                    {
                        "type": "integer",
                        "description": "ID interno de la línea a la que pertenece la estación",
                        "name": "linea_id",
                        "in": "query"
                    },
                    {
                        "type": "string",
                        "description": "Alcaldía (CDMX) o municipio del Área Metropolitana (ej: 'Miguel Hidalgo', 'Naucalpan de Juárez')",
                        "name": "alcaldia_municipio",
                        "in": "query"
                    },
                    {
                        "type": "string",
                        "description": "Número o clave comercial de la línea (ej: '1', 'MB1')",
                        "name": "num_comercial",
                        "in": "query"
                    },
                    {
                        "type": "string",
                        "description": "Color identificador de la línea en español (ej: 'Rosa', 'Azul', 'Naranja')",
                        "name": "color_esp",
                        "in": "query"
                    },
                    {
                        "type": "string",
                        "description": "Color identificador de la línea en inglés (ej: 'Pink', 'Blue', 'Orange')",
                        "name": "color_en",
                        "in": "query"
                    },
                    {
                        "type": "integer",
                        "description": "Año de inauguración de la estación (ej: 1969)",
                        "name": "anio",
                        "in": "query"
                    },
                    {
                        "type": "boolean",
                        "description": "true para filtrar únicamente estaciones que son CETRAM",
                        "name": "es_cetram",
                        "in": "query"
                    }
                ],
                "responses": {
                    "200": {
                        "description": "Lista de estaciones que coinciden con los filtros",
                        "schema": {
                            "type": "array",
                            "items": {
                                "$ref": "#/definitions/models.Estacion"
                            }
                        }
                    },
                    "400": {
                        "description": "Parámetros inválidos",
                        "schema": {
                            "type": "object",
                            "additionalProperties": true
                        }
                    },
                    "404": {
                        "description": "No se encontraron estaciones",
                        "schema": {
                            "type": "object",
                            "additionalProperties": true
                        }
                    },
                    "500": {
                        "description": "Error interno del servidor",
                        "schema": {
                            "type": "object",
                            "additionalProperties": true
                        }
                    }
                }
            },
            "post": {
                "description": "Registra una nueva estación en el sistema especificado.\nRequiere al menos `nombre`, `sistema` y `linea_id` para asociarla a una línea existente.",
                "consumes": [
                    "application/json"
                ],
                "produces": [
                    "application/json"
                ],
                "tags": [
                    "Estacion"
                ],
                "summary": "Crear Estación de Transporte",
                "parameters": [
                    {
                        "type": "string",
                        "description": "Sistema de transporte",
                        "name": "sistema",
                        "in": "path",
                        "required": true
                    },
                    {
                        "description": "Objeto Estacion con los datos a registrar",
                        "name": "estacion",
                        "in": "body",
                        "required": true,
                        "schema": {
                            "$ref": "#/definitions/models.Estacion"
                        }
                    }
                ],
                "responses": {
                    "201": {
                        "description": "Estación creada exitosamente",
                        "schema": {
                            "type": "object",
                            "additionalProperties": true
                        }
                    },
                    "400": {
                        "description": "JSON inválido o campos requeridos faltantes",
                        "schema": {
                            "type": "object",
                            "additionalProperties": true
                        }
                    }
                }
            },
            "delete": {
                "description": "Elimina una estación por su ID interno. Esta operación es irreversible.",
                "consumes": [
                    "application/json"
                ],
                "produces": [
                    "application/json"
                ],
                "tags": [
                    "Estacion"
                ],
                "summary": "Eliminar Estación de Transporte",
                "parameters": [
                    {
                        "type": "string",
                        "description": "Sistema de transporte",
                        "name": "sistema",
                        "in": "path",
                        "required": true
                    },
                    {
                        "type": "integer",
                        "description": "ID interno de la estación a eliminar (ej: ?id=10)",
                        "name": "id",
                        "in": "query",
                        "required": true
                    }
                ],
                "responses": {
                    "200": {
                        "description": "Estación eliminada con éxito",
                        "schema": {
                            "type": "object",
                            "additionalProperties": true
                        }
                    },
                    "400": {
                        "description": "ID inválido o faltante",
                        "schema": {
                            "type": "object",
                            "additionalProperties": true
                        }
                    }
                }
            },
            "patch": {
                "description": "Actualiza los datos de una estación por su ID interno.\nSe reemplazan todos los campos enviados en el body (comportamiento de PATCH con objeto completo).",
                "consumes": [
                    "application/json"
                ],
                "produces": [
                    "application/json"
                ],
                "tags": [
                    "Estacion"
                ],
                "summary": "Actualizar Estación de Transporte",
                "parameters": [
                    {
                        "type": "string",
                        "description": "Sistema de transporte",
                        "name": "sistema",
                        "in": "path",
                        "required": true
                    },
                    {
                        "type": "integer",
                        "description": "ID interno de la estación a actualizar (ej: ?id=10)",
                        "name": "id",
                        "in": "query",
                        "required": true
                    },
                    {
                        "description": "Objeto Estacion con los datos actualizados",
                        "name": "estacion",
                        "in": "body",
                        "required": true,
                        "schema": {
                            "$ref": "#/definitions/models.Estacion"
                        }
                    }
                ],
                "responses": {
                    "200": {
                        "description": "Estación actualizada correctamente",
                        "schema": {
                            "type": "object",
                            "additionalProperties": true
                        }
                    },
                    "400": {
                        "description": "ID inválido o JSON mal formado",
                        "schema": {
                            "type": "object",
                            "additionalProperties": true
                        }
                    }
                }
            }
        },
        "/{sistema}/linea": {
            "get": {
                "description": "Retorna datos descriptivos (JSON) de líneas de transporte del sistema indicado en la ruta.\nSi el sistema es TODOS, devuelve líneas de todos los sistemas disponibles.\nLos filtros de texto usan búsqueda parcial insensible a mayúsculas (ILIKE) y soportan caracteres especiales.\nLos resultados incluyen relaciones anidadas: ramales y descripciones de línea.",
                "consumes": [
                    "application/json"
                ],
                "produces": [
                    "application/json"
                ],
                "tags": [
                    "Linea"
                ],
                "summary": "Consultar Líneas de Transporte",
                "parameters": [
                    {
                        "type": "string",
                        "description": "Sistema de transporte. Valores: METRO, MB, CBB, RTP, TROLE, TL, MEXIBUS, MEXICABLE, INTERURBANO, CC, TODOS",
                        "name": "sistema",
                        "in": "path",
                        "required": true
                    },
                    {
                        "type": "integer",
                        "description": "ID interno de la línea en la base de datos",
                        "name": "id",
                        "in": "query"
                    },
                    {
                        "type": "string",
                        "description": "Nombre descriptivo de la línea (ej: 'Línea 1', 'Línea A'). Búsqueda parcial.",
                        "name": "nombre",
                        "in": "query"
                    },
                    {
                        "type": "string",
                        "description": "Número o clave comercial visible al usuario (ej: '1', 'A', 'MB1')",
                        "name": "num_comercial",
                        "in": "query"
                    },
                    {
                        "type": "string",
                        "description": "Nombre del ramal o variante de ruta (ej: 'Ramal Politécnico')",
                        "name": "nombre_ramal",
                        "in": "query"
                    },
                    {
                        "type": "string",
                        "description": "Clasificación operativa. Valores: existente, eliminada, futura",
                        "name": "clasificacion",
                        "in": "query"
                    },
                    {
                        "type": "string",
                        "description": "Longitud total de la línea en kilómetros (ej: '18.8')",
                        "name": "tam_km",
                        "in": "query"
                    },
                    {
                        "type": "boolean",
                        "description": "true = líneas en operación activa, false = líneas discontinuadas",
                        "name": "existe",
                        "in": "query"
                    },
                    {
                        "type": "string",
                        "description": "Filtra líneas con estaciones tipo CETRAM. Valores: true, false",
                        "name": "es_cetram",
                        "in": "query"
                    },
                    {
                        "type": "string",
                        "description": "Dirección del trazo. Valores: 1 (ida), 0 (regreso)",
                        "name": "sentido",
                        "in": "query"
                    }
                ],
                "responses": {
                    "200": {
                        "description": "Lista de líneas que coinciden con los filtros",
                        "schema": {
                            "type": "array",
                            "items": {
                                "$ref": "#/definitions/models.Linea"
                            }
                        }
                    },
                    "400": {
                        "description": "Parámetros inválidos en la solicitud",
                        "schema": {
                            "type": "object",
                            "additionalProperties": true
                        }
                    },
                    "404": {
                        "description": "No se encontraron líneas con los filtros dados",
                        "schema": {
                            "type": "object",
                            "additionalProperties": true
                        }
                    },
                    "500": {
                        "description": "Error interno del servidor",
                        "schema": {
                            "type": "object",
                            "additionalProperties": true
                        }
                    }
                }
            },
            "post": {
                "description": "Crea un nuevo registro de línea de transporte en el sistema.\nSi no se especifica `sistema` en el body, se asigna 'METRO' por defecto.\nLa geometría (`geom`) debe enviarse en formato WKT (Well-Known Text) si se incluye.",
                "consumes": [
                    "application/json"
                ],
                "produces": [
                    "application/json"
                ],
                "tags": [
                    "Linea"
                ],
                "summary": "Crear Línea de Transporte",
                "parameters": [
                    {
                        "type": "string",
                        "description": "Sistema de transporte",
                        "name": "sistema",
                        "in": "path",
                        "required": true
                    },
                    {
                        "description": "Objeto Linea con los datos a registrar. Campos requeridos: nombre, sistema.",
                        "name": "linea",
                        "in": "body",
                        "required": true,
                        "schema": {
                            "$ref": "#/definitions/models.Linea"
                        }
                    }
                ],
                "responses": {
                    "201": {
                        "description": "Línea creada exitosamente",
                        "schema": {
                            "$ref": "#/definitions/models.Linea"
                        }
                    },
                    "400": {
                        "description": "JSON inválido o campos requeridos faltantes",
                        "schema": {
                            "type": "object",
                            "additionalProperties": true
                        }
                    },
                    "500": {
                        "description": "Error interno al guardar en la base de datos",
                        "schema": {
                            "type": "object",
                            "additionalProperties": true
                        }
                    }
                }
            },
            "delete": {
                "description": "Elimina una línea por su ID interno. La operación es en cascada: también elimina\nlos Ramales y las DescripcionLinea asociados a esa línea.\nEsta operación es irreversible.",
                "consumes": [
                    "application/json"
                ],
                "produces": [
                    "application/json"
                ],
                "tags": [
                    "Linea"
                ],
                "summary": "Eliminar Línea de Transporte",
                "parameters": [
                    {
                        "type": "string",
                        "description": "Sistema de transporte",
                        "name": "sistema",
                        "in": "path",
                        "required": true
                    },
                    {
                        "type": "integer",
                        "description": "ID interno de la línea a eliminar (ej: ?id=5)",
                        "name": "id",
                        "in": "query",
                        "required": true
                    }
                ],
                "responses": {
                    "200": {
                        "description": "Línea y dependencias eliminadas correctamente",
                        "schema": {
                            "type": "object",
                            "additionalProperties": true
                        }
                    },
                    "400": {
                        "description": "ID inválido o faltante",
                        "schema": {
                            "type": "object",
                            "additionalProperties": true
                        }
                    },
                    "500": {
                        "description": "Error interno al eliminar de la base de datos",
                        "schema": {
                            "type": "object",
                            "additionalProperties": true
                        }
                    }
                }
            },
            "patch": {
                "description": "Actualiza parcialmente los datos de una línea por su ID interno.\nSolo se actualizan los campos enviados en el body (PATCH semántico).\nEl campo `linea_id` es ignorado aunque se envíe en el body (protección de integridad).",
                "consumes": [
                    "application/json"
                ],
                "produces": [
                    "application/json"
                ],
                "tags": [
                    "Linea"
                ],
                "summary": "Actualizar Línea de Transporte",
                "parameters": [
                    {
                        "type": "string",
                        "description": "Sistema de transporte",
                        "name": "sistema",
                        "in": "path",
                        "required": true
                    },
                    {
                        "type": "integer",
                        "description": "ID interno de la línea a actualizar (ej: ?id=5)",
                        "name": "id",
                        "in": "query",
                        "required": true
                    },
                    {
                        "description": "Campos a actualizar. Ej: {\\",
                        "name": "linea",
                        "in": "body",
                        "required": true,
                        "schema": {
                            "type": "object",
                            "additionalProperties": true
                        }
                    }
                ],
                "responses": {
                    "200": {
                        "description": "Línea actualizada correctamente",
                        "schema": {
                            "type": "object",
                            "additionalProperties": true
                        }
                    },
                    "400": {
                        "description": "ID inválido o JSON mal formado",
                        "schema": {
                            "type": "object",
                            "additionalProperties": true
                        }
                    },
                    "500": {
                        "description": "Error interno al actualizar en la base de datos",
                        "schema": {
                            "type": "object",
                            "additionalProperties": true
                        }
                    }
                }
            }
        }
    },
    "definitions": {
        "models.AfluenciaEstacion": {
            "type": "object",
            "properties": {
                "afluencia": {
                    "type": "integer",
                    "example": 1850000
                },
                "anio": {
                    "type": "integer",
                    "example": 2024
                },
                "estacion_id": {
                    "type": "integer",
                    "example": 12001
                },
                "fuente": {
                    "type": "string",
                    "example": "STC-Metro-DatosAbiertos"
                },
                "linea_id": {
                    "type": "integer",
                    "example": 191
                },
                "mes": {
                    "type": "string",
                    "example": "Marzo"
                },
                "mes_num": {
                    "type": "integer",
                    "example": 3
                },
                "nombre_estacion": {
                    "type": "string",
                    "example": "Pantitlán"
                },
                "nombre_linea": {
                    "type": "string",
                    "example": "Metro Línea 1"
                },
                "num_comercial": {
                    "type": "string",
                    "example": "L1"
                }
            }
        },
        "models.AfluenciaEstacionResponse": {
            "type": "object",
            "properties": {
                "data": {
                    "type": "array",
                    "items": {
                        "$ref": "#/definitions/models.AfluenciaEstacion"
                    }
                },
                "total": {
                    "type": "integer",
                    "example": 500
                }
            }
        },
        "models.AfluenciaLinea": {
            "type": "object",
            "properties": {
                "afluencia": {
                    "type": "integer",
                    "example": 24300000
                },
                "anio": {
                    "type": "integer",
                    "example": 2025
                },
                "fuente": {
                    "type": "string",
                    "example": "DGST"
                },
                "linea_id": {
                    "type": "integer",
                    "example": 191
                },
                "mes": {
                    "type": "string",
                    "example": "Marzo"
                },
                "mes_num": {
                    "type": "integer",
                    "example": 3
                },
                "nombre_linea": {
                    "type": "string",
                    "example": "Metro Línea 1"
                },
                "num_comercial": {
                    "type": "string",
                    "example": "1"
                },
                "sistema": {
                    "type": "string",
                    "example": "METRO"
                }
            }
        },
        "models.AfluenciaLineaResponse": {
            "type": "object",
            "properties": {
                "data": {
                    "type": "array",
                    "items": {
                        "$ref": "#/definitions/models.AfluenciaLinea"
                    }
                },
                "total": {
                    "type": "integer",
                    "example": 150
                }
            }
        },
        "models.DescripcionEstacion": {
            "type": "object",
            "properties": {
                "alcaldia_municipio": {
                    "type": "string",
                    "example": "Miguel Hidalgo"
                },
                "anio": {
                    "type": "string",
                    "example": "1970"
                },
                "cve_est": {
                    "type": "string",
                    "example": "TAC"
                },
                "descripcion_estacion_id": {
                    "type": "integer",
                    "example": 1
                },
                "estacion_id": {
                    "type": "integer",
                    "example": 1
                },
                "estado_ciudad": {
                    "type": "string",
                    "example": "Ciudad de México"
                },
                "longitud": {
                    "type": "number",
                    "example": -99.188
                },
                "nombre": {
                    "type": "string",
                    "example": "Tacubaya"
                },
                "tipo": {
                    "type": "string",
                    "example": "Terminal"
                }
            }
        },
        "models.DescripcionLinea": {
            "type": "object",
            "properties": {
                "anio_fin_ampliacion": {
                    "type": "integer",
                    "example": 1986
                },
                "anio_inicio_ampliacion": {
                    "type": "integer",
                    "example": 1984
                },
                "descripcion": {
                    "type": "string",
                    "example": "Línea que conecta Observatorio con Pantitlán cruzando el centro histórico"
                },
                "descripcion_linea_id": {
                    "type": "integer",
                    "example": 1
                },
                "direccion": {
                    "type": "string",
                    "example": "Oriente-Poniente"
                },
                "inicio_original": {
                    "type": "string",
                    "example": "1969"
                },
                "linea_base": {
                    "type": "integer",
                    "example": 1
                },
                "terminal_original": {
                    "type": "string",
                    "example": "Observatorio"
                },
                "tipo_linea": {
                    "type": "string",
                    "example": "Metropolitana"
                }
            }
        },
        "models.Estacion": {
            "type": "object",
            "properties": {
                "alcaldia_municipio": {
                    "type": "string",
                    "example": "Miguel Hidalgo"
                },
                "anio": {
                    "type": "string",
                    "example": "1980"
                },
                "cve_est": {
                    "type": "string",
                    "example": "TAC"
                },
                "es_cetram": {
                    "type": "boolean",
                    "example": false
                },
                "estacion_id": {
                    "type": "integer",
                    "example": 1
                },
                "estacion_id_oficial": {
                    "type": "integer",
                    "example": 1001
                },
                "estado_ciudad": {
                    "type": "string",
                    "example": "Ciudad de México"
                },
                "existe": {
                    "type": "boolean",
                    "example": true
                },
                "latitud": {
                    "type": "number",
                    "example": 19.403
                },
                "linea_id": {
                    "type": "integer",
                    "example": 1
                },
                "longitud": {
                    "type": "number",
                    "example": -99.188
                },
                "nombre": {
                    "type": "string",
                    "example": "Tacubaya"
                },
                "nombre_cetram": {
                    "type": "string",
                    "example": "Tacubaya CETRAM"
                },
                "num_estacion": {
                    "type": "integer",
                    "example": 1
                },
                "sistema": {
                    "type": "string",
                    "example": "METRO"
                },
                "stop_gtfs": {
                    "type": "string",
                    "example": "STC_001"
                },
                "tipo": {
                    "type": "string",
                    "example": "Terminal"
                }
            }
        },
        "models.Feature": {
            "type": "object",
            "properties": {
                "geometry": {
                    "description": "Geometría de tipo Point",
                    "allOf": [
                        {
                            "$ref": "#/definitions/models.Geometry"
                        }
                    ]
                },
                "properties": {
                    "description": "Atributos dinámicos",
                    "type": "object",
                    "additionalProperties": true
                },
                "type": {
                    "description": "\"Feature\"",
                    "type": "string",
                    "example": "Feature"
                }
            }
        },
        "models.FeatureCollection": {
            "type": "object",
            "properties": {
                "features": {
                    "description": "Lista de features (líneas o estaciones)",
                    "type": "array",
                    "items": {
                        "$ref": "#/definitions/models.Feature"
                    }
                },
                "type": {
                    "description": "\"FeatureCollection\"",
                    "type": "string",
                    "example": "FeatureCollection"
                }
            }
        },
        "models.Geometry": {
            "type": "object",
            "properties": {
                "coordinates": {
                    "description": "interface{} permite múltiples niveles de arreglos"
                },
                "type": {
                    "description": "\"Point\"",
                    "type": "string",
                    "example": "Point"
                }
            }
        },
        "models.Linea": {
            "type": "object",
            "properties": {
                "anio_inauguracion": {
                    "type": "integer",
                    "example": 1969
                },
                "capacidad_vehiculo": {
                    "type": "integer",
                    "example": 1000
                },
                "clasificacion": {
                    "type": "string",
                    "example": "existente"
                },
                "color_en": {
                    "type": "string",
                    "example": "Pink"
                },
                "color_esp": {
                    "type": "string",
                    "example": "Rosa"
                },
                "derecho_de_via": {
                    "type": "string",
                    "example": "Superficie"
                },
                "descripcion_linea": {
                    "type": "array",
                    "items": {
                        "$ref": "#/definitions/models.DescripcionLinea"
                    }
                },
                "existe": {
                    "type": "boolean",
                    "example": true
                },
                "geom": {
                    "type": "string",
                    "example": "MULTILINESTRING(...)"
                },
                "jerarquia_transporte": {
                    "type": "string",
                    "example": "Línea principal"
                },
                "linea_base_ramal": {
                    "type": "integer",
                    "example": 1
                },
                "linea_id": {
                    "type": "integer",
                    "example": 1
                },
                "nombre": {
                    "type": "string",
                    "example": "Línea 1"
                },
                "num_comercial": {
                    "type": "string",
                    "example": "1"
                },
                "ramal_id": {
                    "type": "integer",
                    "example": 1
                },
                "ramales": {
                    "type": "array",
                    "items": {
                        "$ref": "#/definitions/models.Ramal"
                    }
                },
                "route_gtfs": {
                    "type": "string",
                    "example": "L1"
                },
                "sistema": {
                    "type": "string",
                    "example": "METRO"
                },
                "tam_km": {
                    "type": "number",
                    "example": 18.8
                }
            }
        },
        "models.Ramal": {
            "type": "object",
            "properties": {
                "anio_creacion": {
                    "type": "integer",
                    "example": 1969
                },
                "estado": {
                    "type": "string",
                    "example": "activo"
                },
                "geom": {
                    "type": "string",
                    "example": "MULTILINESTRING((-99.188 19.403, -99.190 19.405))"
                },
                "linea_id": {
                    "type": "integer",
                    "example": 1
                },
                "nombre_ramal": {
                    "type": "string",
                    "example": "IDA"
                },
                "ramal_id": {
                    "type": "integer",
                    "example": 1
                },
                "ramal_num": {
                    "type": "integer",
                    "example": 1
                },
                "shape_gtfs": {
                    "type": "string",
                    "example": "STC_L1_IDA"
                },
                "tam_km": {
                    "type": "number",
                    "example": 18.8
                }
            }
        }
    },
    "securityDefinitions": {
        "BasicAuth": {
            "type": "basic"
        }
    },
    "externalDocs": {
        "description": "Github",
        "url": "https://github.com/galigaribaldi/Apimetro"
    }
}