{
  "@context": "https://schema.org",
  "@type": "Dataset",
  "name": "Esquema de Presupuestos de Obra — ObraTudela",
  "description": "Estructura y documentación de datos para generación de presupuestos de construcción usando la base de datos BCEXTREM 2026",
  "url": "https://www.obratudela.com/presupuesto_v2.html",
  "version": "1.0",
  "datePublished": "2026-07-19",
  "license": "CC-BY-4.0",
  "provider": {
    "@type": "Organization",
    "name": "Excavaciones y Servicios Arturo S.L.",
    "url": "https://www.obratudela.com",
    "email": "excavacionesart@gmail.com",
    "telephone": "+34-607-444-903"
  },
  "inLanguage": "es",
  "spatialCoverage": "Spain",
  "temporalCoverage": "2026",
  "keywords": ["presupuestos", "construcción", "precios", "obra civil", "BCEXTREM"],

  "schemaDefinition": {
    "presupuesto": {
      "type": "object",
      "description": "Un presupuesto de obra completo",
      "properties": {
        "id": {"type": "string", "description": "Identificador único (UUID)"},
        "titulo": {"type": "string", "description": "Título o nombre del presupuesto"},
        "descripcion": {"type": "string", "description": "Descripción del proyecto"},
        "cliente": {
          "type": "object",
          "properties": {
            "nombre": {"type": "string"},
            "email": {"type": "string", "format": "email"},
            "telefono": {"type": "string"},
            "direccion": {"type": "string"}
          }
        },
        "lineas": {
          "type": "array",
          "description": "Array de líneas de presupuesto",
          "items": {
            "type": "object",
            "properties": {
              "codigo": {"type": "string", "description": "Código de partida (ej: E01EPS010)"},
              "descripcion": {"type": "string", "description": "Descripción de la partida"},
              "unidad": {"type": "string", "description": "Unidad de medida (m2, m3, ud, h, kg, etc.)"},
              "cantidad": {"type": "number", "description": "Cantidad a presupuestar"},
              "precioUnitario": {"type": "number", "description": "Precio unitario en € sin IVA"},
              "subtotal": {"type": "number", "description": "cantidad × precioUnitario"},
              "categoria": {"type": "string", "description": "Categoría de la partida"}
            },
            "required": ["codigo", "cantidad", "precioUnitario"]
          }
        },
        "totales": {
          "type": "object",
          "properties": {
            "sinIVA": {"type": "number", "description": "Total sin IVA"},
            "ivaPorc": {"type": "number", "description": "Porcentaje de IVA (21% por defecto en España)"},
            "ivaImporte": {"type": "number", "description": "Importe de IVA"},
            "conIVA": {"type": "number", "description": "Total con IVA"}
          }
        },
        "notas": {"type": "string", "description": "Notas adicionales del presupuesto"},
        "fechaCreacion": {"type": "string", "format": "date-time"},
        "validezPresupuesto": {"type": "integer", "description": "Días de validez del presupuesto (ej: 30)"},
        "formaPago": {"type": "string", "enum": ["contado", "30 días", "60 días"], "description": "Forma de pago"}
      },
      "required": ["titulo", "lineas", "totales"]
    }
  },

  "categoriasPredefinidas": [
    "DEMOLICION",
    "MOVIMIENTO DE TIERRAS",
    "SANEAMIENTO",
    "CIMENTACION",
    "ESTRUCTURAS",
    "ALBAÑILERIA",
    "CUBIERTAS",
    "AISLAMIENTOS",
    "REVESTIMIENTOS",
    "SOLADOS Y ALICATADOS",
    "CARPINTERIA",
    "VIDRIERIA",
    "PINTURA",
    "INSTALACIONES",
    "URBANIZACION",
    "VARIOS"
  ],

  "unidadesMedidaPredefinidas": [
    "m2", "m3", "ml", "ud", "h", "kg", "t", "l", "%", "par", "pal"
  ],

  "apiEndpoints": [
    {
      "path": "/api/presupuestos",
      "method": "POST",
      "description": "Crear nuevo presupuesto",
      "requestBody": {"$ref": "#/schemaDefinition/presupuesto"},
      "responseBody": {"type": "object", "properties": {"id": "string", "url": "string"}}
    },
    {
      "path": "/api/presupuestos/{id}",
      "method": "GET",
      "description": "Obtener presupuesto por ID"
    },
    {
      "path": "/api/presupuestos/{id}",
      "method": "PUT",
      "description": "Actualizar presupuesto"
    },
    {
      "path": "/api/presupuestos/{id}/export",
      "method": "GET",
      "parameters": {"format": "excel|pdf|json"},
      "description": "Exportar presupuesto en diferentes formatos"
    }
  ],

  "ejemplo": {
    "titulo": "Presupuesto Reforma Casa - C/ Ejemplo 123",
    "cliente": {
      "nombre": "Juan García López",
      "email": "juan@example.com",
      "telefono": "+34-612-345-678",
      "direccion": "C/ Ejemplo 123, 47001 Valladolid"
    },
    "lineas": [
      {
        "codigo": "E01EPS010",
        "descripcion": "Excavación a máquina en terrenos intermedios",
        "unidad": "m3",
        "cantidad": 50,
        "precioUnitario": 8.45,
        "categoria": "MOVIMIENTO DE TIERRAS"
      },
      {
        "codigo": "E02ZAP020",
        "descripcion": "Zapata aislada de hormigón armado",
        "unidad": "ud",
        "cantidad": 4,
        "precioUnitario": 125.50,
        "categoria": "CIMENTACION"
      }
    ],
    "totales": {
      "sinIVA": 927.50,
      "ivaPorc": 21,
      "ivaImporte": 194.78,
      "conIVA": 1122.28
    },
    "formaPago": "30 días",
    "validezPresupuesto": 30,
    "notas": "Presupuesto válido por 30 días. Consultar disponibilidad de maquinaria antes de comenzar obra."
  },

  "distribution": [
    {
      "@type": "DataDownload",
      "encodingFormat": "JSON",
      "contentUrl": "https://www.obratudela.com/precios.json",
      "description": "Base de datos completa de 54.777 partidas de precios BCEXTREM 2026"
    },
    {
      "@type": "DataDownload",
      "encodingFormat": "JSON",
      "contentUrl": "https://www.obratudela.com/catalogo.json",
      "description": "Catálogo de 71 equipos de alquiler con precios"
    }
  ],

  "accessLevel": "public",
  "bureauCode": ["010:11"],
  "programCode": ["010:94"],
  "modificationsPublished": false,
  "issued": "2026-07-19"
}
