Stored Transformation
Stored transformation detail
Inspect version history, edit inputs, and save a new version without overwriting prior records.
{ "name": .name.value, "hasAdditionalInformation": .extraInfo? | if . then {remarks: .value} else empty end, "hasAdditionalType": .category.value, "hasLocation": .location.value }
{
"hasAdditionalInformation": {
"remarks": "Encinar"
},
"hasAdditionalType": "TrailRoute",
"hasLocation": {
"coordinates": [
-3.8565638,
40.4845294
],
"type": "Point"
},
"name": "Majalacabra"
}
Trace Details
{
"attempts": [
{
"attempt_number": 1,
"compile_ok": true,
"error_message": null,
"execution_ok": true,
"jq_expression": ".name.value",
"schema_valid": true,
"stage": "field",
"target_field": "name",
"used_hints": true
},
{
"attempt_number": 1,
"compile_ok": true,
"error_message": null,
"execution_ok": true,
"jq_expression": ".extraInfo? | if . then {remarks: .value} else empty end",
"schema_valid": true,
"stage": "field",
"target_field": "hasAdditionalInformation",
"used_hints": true
},
{
"attempt_number": 1,
"compile_ok": true,
"error_message": null,
"execution_ok": true,
"jq_expression": ".category.value",
"schema_valid": true,
"stage": "field",
"target_field": "hasAdditionalType",
"used_hints": true
},
{
"attempt_number": 1,
"compile_ok": true,
"error_message": null,
"execution_ok": true,
"jq_expression": ".location.value",
"schema_valid": true,
"stage": "field",
"target_field": "hasLocation",
"used_hints": true
},
{
"attempt_number": 1,
"compile_ok": true,
"error_message": null,
"execution_ok": true,
"jq_expression": "{ \"name\": .name.value, \"hasAdditionalInformation\": .extraInfo? | if . then {remarks: .value} else empty end, \"hasAdditionalType\": .category.value, \"hasLocation\": .location.value }",
"schema_valid": true,
"stage": "global",
"target_field": null,
"used_hints": true
}
],
"events": [
{
"payload": {
"field_name": "name",
"hint_hash": "cc618f502b3d304bd72b2dde47b31f79e2ff51e0e7b8cd97f91e89bebb20d8e5",
"match_result": {
"candidate_source_path": "name.value",
"confidence": 0.99,
"identified": true,
"reasoning": "Source field name.value semantically matches target name."
},
"prompt_payload": {
"field_name": "name",
"field_schema": {
"type": "string"
},
"hints": "Transform NGSI PointOfInterest into Trail schema strictly following the target schema.\r\n\r\nMappings:\r\n- name.value -\u003e name\r\n- shortDescription.value -\u003e hasDescription.shortDescription\r\n- description.value -\u003e hasDescription.longDescription\r\n- extraInfo.value -\u003e hasAdditionalInformation.remarks\r\n- category.value -\u003e hasAdditionalType\r\n- location.value -\u003e hasLocation\r\n\r\nRules:\r\n- hasDescription must contain only plain string fields: shortDescription and longDescription\r\n- Do NOT create nested objects inside hasDescription\r\n- Do NOT use \"object\", \"value\", or \"lang\" in the output\r\n- Follow the schema strictly, no extra properties allowed\r\n- Only include hasDescription if any description field exists\r\n- Only include hasAdditionalInformation if extraInfo exists\r\n- Always extract values using .value\r\n``",
"input_summary": {
"path_count": 42,
"paths": [
"alternateName",
"alternateName.metadata",
"alternateName.type",
"alternateName.value",
"category",
"category.metadata",
"category.type",
"category.value",
"dataProvider",
"dataProvider.metadata",
"dataProvider.type",
"dataProvider.value",
"description",
"description.metadata",
"description.type",
"description.value",
"extraInfo",
"extraInfo.metadata",
"extraInfo.type",
"extraInfo.value",
"id",
"location",
"location.metadata",
"location.type",
"location.value",
"location.value.coordinates",
"location.value.coordinates[0]",
"location.value.coordinates[1]",
"location.value.type",
"name",
"name.metadata",
"name.type",
"name.value",
"shortDescription",
"shortDescription.metadata",
"shortDescription.type",
"shortDescription.value",
"source",
"source.metadata",
"source.type",
"source.value",
"type"
],
"root_type": "dict"
},
"output_schema": {
"additionalProperties": true,
"properties": {
"hasAdditionalInformation": {
"additionalProperties": false,
"properties": {
"remarks": {
"type": "string"
}
},
"type": "object"
},
"hasAdditionalType": {
"type": "string"
},
"hasDescription": {
"additionalProperties": false,
"properties": {
"longDescription": {
"type": "string"
},
"shortDescription": {
"type": "string"
}
},
"type": "object"
},
"hasLocation": {
"additionalProperties": false,
"properties": {
"coordinates": {
"items": {
"type": "number"
},
"type": "array"
},
"type": {
"enum": [
"Point"
],
"type": "string"
}
},
"required": [
"type",
"coordinates"
],
"type": "object"
},
"name": {
"type": "string"
}
},
"required": [
"name",
"hasLocation"
],
"type": "object"
},
"required": true,
"task": "match"
},
"response": "{\"identified\":true,\"candidate_source_path\":\"name.value\",\"reasoning\":\"Source field name.value semantically matches target name.\",\"confidence\":0.99}",
"system_prompt": "You perform semantic field matching between a target schema field and source JSON paths. Return exactly one flat JSON object and nothing else. Do not wrap the result in markdown. Do not nest the result under keys like match, result, mapping, output, or data. Use exactly these keys: \"identified\", \"candidate_source_path\", \"reasoning\", \"confidence\". \"identified\" must be a JSON boolean. \"candidate_source_path\" must be a string path or null. \"reasoning\" must be a short string. \"confidence\" must be a JSON number between 0.0 and 1.0. If no reliable match exists, return identified=false, candidate_source_path=null, a brief reasoning string, and confidence=0.0. Example valid output: {\"identified\":true,\"candidate_source_path\":\"datetime\",\"reasoning\":\"The source field semantically matches the target date.\",\"confidence\":0.92}",
"used_hints": true
},
"stage": "semantic_match",
"timestamp": "2026-05-19T17:03:51.130634+00:00"
},
{
"payload": {
"field_name": "hasDescription",
"hint_hash": "cc618f502b3d304bd72b2dde47b31f79e2ff51e0e7b8cd97f91e89bebb20d8e5",
"match_result": {
"candidate_source_path": null,
"confidence": 0.0,
"identified": false,
"reasoning": "No single source path matches the composite hasDescription object."
},
"prompt_payload": {
"field_name": "hasDescription",
"field_schema": {
"additionalProperties": false,
"properties": {
"longDescription": {
"type": "string"
},
"shortDescription": {
"type": "string"
}
},
"type": "object"
},
"hints": "Transform NGSI PointOfInterest into Trail schema strictly following the target schema.\r\n\r\nMappings:\r\n- name.value -\u003e name\r\n- shortDescription.value -\u003e hasDescription.shortDescription\r\n- description.value -\u003e hasDescription.longDescription\r\n- extraInfo.value -\u003e hasAdditionalInformation.remarks\r\n- category.value -\u003e hasAdditionalType\r\n- location.value -\u003e hasLocation\r\n\r\nRules:\r\n- hasDescription must contain only plain string fields: shortDescription and longDescription\r\n- Do NOT create nested objects inside hasDescription\r\n- Do NOT use \"object\", \"value\", or \"lang\" in the output\r\n- Follow the schema strictly, no extra properties allowed\r\n- Only include hasDescription if any description field exists\r\n- Only include hasAdditionalInformation if extraInfo exists\r\n- Always extract values using .value\r\n``",
"input_summary": {
"path_count": 42,
"paths": [
"alternateName",
"alternateName.metadata",
"alternateName.type",
"alternateName.value",
"category",
"category.metadata",
"category.type",
"category.value",
"dataProvider",
"dataProvider.metadata",
"dataProvider.type",
"dataProvider.value",
"description",
"description.metadata",
"description.type",
"description.value",
"extraInfo",
"extraInfo.metadata",
"extraInfo.type",
"extraInfo.value",
"id",
"location",
"location.metadata",
"location.type",
"location.value",
"location.value.coordinates",
"location.value.coordinates[0]",
"location.value.coordinates[1]",
"location.value.type",
"name",
"name.metadata",
"name.type",
"name.value",
"shortDescription",
"shortDescription.metadata",
"shortDescription.type",
"shortDescription.value",
"source",
"source.metadata",
"source.type",
"source.value",
"type"
],
"root_type": "dict"
},
"output_schema": {
"additionalProperties": true,
"properties": {
"hasAdditionalInformation": {
"additionalProperties": false,
"properties": {
"remarks": {
"type": "string"
}
},
"type": "object"
},
"hasAdditionalType": {
"type": "string"
},
"hasDescription": {
"additionalProperties": false,
"properties": {
"longDescription": {
"type": "string"
},
"shortDescription": {
"type": "string"
}
},
"type": "object"
},
"hasLocation": {
"additionalProperties": false,
"properties": {
"coordinates": {
"items": {
"type": "number"
},
"type": "array"
},
"type": {
"enum": [
"Point"
],
"type": "string"
}
},
"required": [
"type",
"coordinates"
],
"type": "object"
},
"name": {
"type": "string"
}
},
"required": [
"name",
"hasLocation"
],
"type": "object"
},
"required": false,
"task": "match"
},
"response": "{\"identified\":false,\"candidate_source_path\":null,\"reasoning\":\"No single source path matches the composite hasDescription object.\",\"confidence\":0.0}",
"system_prompt": "You perform semantic field matching between a target schema field and source JSON paths. Return exactly one flat JSON object and nothing else. Do not wrap the result in markdown. Do not nest the result under keys like match, result, mapping, output, or data. Use exactly these keys: \"identified\", \"candidate_source_path\", \"reasoning\", \"confidence\". \"identified\" must be a JSON boolean. \"candidate_source_path\" must be a string path or null. \"reasoning\" must be a short string. \"confidence\" must be a JSON number between 0.0 and 1.0. If no reliable match exists, return identified=false, candidate_source_path=null, a brief reasoning string, and confidence=0.0. Example valid output: {\"identified\":true,\"candidate_source_path\":\"datetime\",\"reasoning\":\"The source field semantically matches the target date.\",\"confidence\":0.92}",
"used_hints": true
},
"stage": "semantic_match",
"timestamp": "2026-05-19T17:03:57.088531+00:00"
},
{
"payload": {
"field_name": "hasAdditionalInformation",
"hint_hash": "cc618f502b3d304bd72b2dde47b31f79e2ff51e0e7b8cd97f91e89bebb20d8e5",
"match_result": {
"candidate_source_path": "extraInfo",
"confidence": 0.95,
"identified": true,
"reasoning": "The mapping specifies extraInfo.value maps to hasAdditionalInformation.remarks."
},
"prompt_payload": {
"field_name": "hasAdditionalInformation",
"field_schema": {
"additionalProperties": false,
"properties": {
"remarks": {
"type": "string"
}
},
"type": "object"
},
"hints": "Transform NGSI PointOfInterest into Trail schema strictly following the target schema.\r\n\r\nMappings:\r\n- name.value -\u003e name\r\n- shortDescription.value -\u003e hasDescription.shortDescription\r\n- description.value -\u003e hasDescription.longDescription\r\n- extraInfo.value -\u003e hasAdditionalInformation.remarks\r\n- category.value -\u003e hasAdditionalType\r\n- location.value -\u003e hasLocation\r\n\r\nRules:\r\n- hasDescription must contain only plain string fields: shortDescription and longDescription\r\n- Do NOT create nested objects inside hasDescription\r\n- Do NOT use \"object\", \"value\", or \"lang\" in the output\r\n- Follow the schema strictly, no extra properties allowed\r\n- Only include hasDescription if any description field exists\r\n- Only include hasAdditionalInformation if extraInfo exists\r\n- Always extract values using .value\r\n``",
"input_summary": {
"path_count": 42,
"paths": [
"alternateName",
"alternateName.metadata",
"alternateName.type",
"alternateName.value",
"category",
"category.metadata",
"category.type",
"category.value",
"dataProvider",
"dataProvider.metadata",
"dataProvider.type",
"dataProvider.value",
"description",
"description.metadata",
"description.type",
"description.value",
"extraInfo",
"extraInfo.metadata",
"extraInfo.type",
"extraInfo.value",
"id",
"location",
"location.metadata",
"location.type",
"location.value",
"location.value.coordinates",
"location.value.coordinates[0]",
"location.value.coordinates[1]",
"location.value.type",
"name",
"name.metadata",
"name.type",
"name.value",
"shortDescription",
"shortDescription.metadata",
"shortDescription.type",
"shortDescription.value",
"source",
"source.metadata",
"source.type",
"source.value",
"type"
],
"root_type": "dict"
},
"output_schema": {
"additionalProperties": true,
"properties": {
"hasAdditionalInformation": {
"additionalProperties": false,
"properties": {
"remarks": {
"type": "string"
}
},
"type": "object"
},
"hasAdditionalType": {
"type": "string"
},
"hasDescription": {
"additionalProperties": false,
"properties": {
"longDescription": {
"type": "string"
},
"shortDescription": {
"type": "string"
}
},
"type": "object"
},
"hasLocation": {
"additionalProperties": false,
"properties": {
"coordinates": {
"items": {
"type": "number"
},
"type": "array"
},
"type": {
"enum": [
"Point"
],
"type": "string"
}
},
"required": [
"type",
"coordinates"
],
"type": "object"
},
"name": {
"type": "string"
}
},
"required": [
"name",
"hasLocation"
],
"type": "object"
},
"required": false,
"task": "match"
},
"response": "{\"identified\":true,\"candidate_source_path\":\"extraInfo\",\"reasoning\":\"The mapping specifies extraInfo.value maps to hasAdditionalInformation.remarks.\",\"confidence\":0.95}",
"system_prompt": "You perform semantic field matching between a target schema field and source JSON paths. Return exactly one flat JSON object and nothing else. Do not wrap the result in markdown. Do not nest the result under keys like match, result, mapping, output, or data. Use exactly these keys: \"identified\", \"candidate_source_path\", \"reasoning\", \"confidence\". \"identified\" must be a JSON boolean. \"candidate_source_path\" must be a string path or null. \"reasoning\" must be a short string. \"confidence\" must be a JSON number between 0.0 and 1.0. If no reliable match exists, return identified=false, candidate_source_path=null, a brief reasoning string, and confidence=0.0. Example valid output: {\"identified\":true,\"candidate_source_path\":\"datetime\",\"reasoning\":\"The source field semantically matches the target date.\",\"confidence\":0.92}",
"used_hints": true
},
"stage": "semantic_match",
"timestamp": "2026-05-19T17:04:00.105828+00:00"
},
{
"payload": {
"field_name": "hasAdditionalType",
"hint_hash": "cc618f502b3d304bd72b2dde47b31f79e2ff51e0e7b8cd97f91e89bebb20d8e5",
"match_result": {
"candidate_source_path": "category.value",
"confidence": 0.95,
"identified": true,
"reasoning": "category.value semantically matches hasAdditionalType"
},
"prompt_payload": {
"field_name": "hasAdditionalType",
"field_schema": {
"type": "string"
},
"hints": "Transform NGSI PointOfInterest into Trail schema strictly following the target schema.\r\n\r\nMappings:\r\n- name.value -\u003e name\r\n- shortDescription.value -\u003e hasDescription.shortDescription\r\n- description.value -\u003e hasDescription.longDescription\r\n- extraInfo.value -\u003e hasAdditionalInformation.remarks\r\n- category.value -\u003e hasAdditionalType\r\n- location.value -\u003e hasLocation\r\n\r\nRules:\r\n- hasDescription must contain only plain string fields: shortDescription and longDescription\r\n- Do NOT create nested objects inside hasDescription\r\n- Do NOT use \"object\", \"value\", or \"lang\" in the output\r\n- Follow the schema strictly, no extra properties allowed\r\n- Only include hasDescription if any description field exists\r\n- Only include hasAdditionalInformation if extraInfo exists\r\n- Always extract values using .value\r\n``",
"input_summary": {
"path_count": 42,
"paths": [
"alternateName",
"alternateName.metadata",
"alternateName.type",
"alternateName.value",
"category",
"category.metadata",
"category.type",
"category.value",
"dataProvider",
"dataProvider.metadata",
"dataProvider.type",
"dataProvider.value",
"description",
"description.metadata",
"description.type",
"description.value",
"extraInfo",
"extraInfo.metadata",
"extraInfo.type",
"extraInfo.value",
"id",
"location",
"location.metadata",
"location.type",
"location.value",
"location.value.coordinates",
"location.value.coordinates[0]",
"location.value.coordinates[1]",
"location.value.type",
"name",
"name.metadata",
"name.type",
"name.value",
"shortDescription",
"shortDescription.metadata",
"shortDescription.type",
"shortDescription.value",
"source",
"source.metadata",
"source.type",
"source.value",
"type"
],
"root_type": "dict"
},
"output_schema": {
"additionalProperties": true,
"properties": {
"hasAdditionalInformation": {
"additionalProperties": false,
"properties": {
"remarks": {
"type": "string"
}
},
"type": "object"
},
"hasAdditionalType": {
"type": "string"
},
"hasDescription": {
"additionalProperties": false,
"properties": {
"longDescription": {
"type": "string"
},
"shortDescription": {
"type": "string"
}
},
"type": "object"
},
"hasLocation": {
"additionalProperties": false,
"properties": {
"coordinates": {
"items": {
"type": "number"
},
"type": "array"
},
"type": {
"enum": [
"Point"
],
"type": "string"
}
},
"required": [
"type",
"coordinates"
],
"type": "object"
},
"name": {
"type": "string"
}
},
"required": [
"name",
"hasLocation"
],
"type": "object"
},
"required": false,
"task": "match"
},
"response": "{\"identified\":true,\"candidate_source_path\":\"category.value\",\"reasoning\":\"category.value semantically matches hasAdditionalType\",\"confidence\":0.95}",
"system_prompt": "You perform semantic field matching between a target schema field and source JSON paths. Return exactly one flat JSON object and nothing else. Do not wrap the result in markdown. Do not nest the result under keys like match, result, mapping, output, or data. Use exactly these keys: \"identified\", \"candidate_source_path\", \"reasoning\", \"confidence\". \"identified\" must be a JSON boolean. \"candidate_source_path\" must be a string path or null. \"reasoning\" must be a short string. \"confidence\" must be a JSON number between 0.0 and 1.0. If no reliable match exists, return identified=false, candidate_source_path=null, a brief reasoning string, and confidence=0.0. Example valid output: {\"identified\":true,\"candidate_source_path\":\"datetime\",\"reasoning\":\"The source field semantically matches the target date.\",\"confidence\":0.92}",
"used_hints": true
},
"stage": "semantic_match",
"timestamp": "2026-05-19T17:04:02.713246+00:00"
},
{
"payload": {
"field_name": "hasLocation",
"hint_hash": "cc618f502b3d304bd72b2dde47b31f79e2ff51e0e7b8cd97f91e89bebb20d8e5",
"match_result": {
"candidate_source_path": "location.value",
"confidence": 0.95,
"identified": true,
"reasoning": "location.value matches hasLocation"
},
"prompt_payload": {
"field_name": "hasLocation",
"field_schema": {
"additionalProperties": false,
"properties": {
"coordinates": {
"items": {
"type": "number"
},
"type": "array"
},
"type": {
"enum": [
"Point"
],
"type": "string"
}
},
"required": [
"type",
"coordinates"
],
"type": "object"
},
"hints": "Transform NGSI PointOfInterest into Trail schema strictly following the target schema.\r\n\r\nMappings:\r\n- name.value -\u003e name\r\n- shortDescription.value -\u003e hasDescription.shortDescription\r\n- description.value -\u003e hasDescription.longDescription\r\n- extraInfo.value -\u003e hasAdditionalInformation.remarks\r\n- category.value -\u003e hasAdditionalType\r\n- location.value -\u003e hasLocation\r\n\r\nRules:\r\n- hasDescription must contain only plain string fields: shortDescription and longDescription\r\n- Do NOT create nested objects inside hasDescription\r\n- Do NOT use \"object\", \"value\", or \"lang\" in the output\r\n- Follow the schema strictly, no extra properties allowed\r\n- Only include hasDescription if any description field exists\r\n- Only include hasAdditionalInformation if extraInfo exists\r\n- Always extract values using .value\r\n``",
"input_summary": {
"path_count": 42,
"paths": [
"alternateName",
"alternateName.metadata",
"alternateName.type",
"alternateName.value",
"category",
"category.metadata",
"category.type",
"category.value",
"dataProvider",
"dataProvider.metadata",
"dataProvider.type",
"dataProvider.value",
"description",
"description.metadata",
"description.type",
"description.value",
"extraInfo",
"extraInfo.metadata",
"extraInfo.type",
"extraInfo.value",
"id",
"location",
"location.metadata",
"location.type",
"location.value",
"location.value.coordinates",
"location.value.coordinates[0]",
"location.value.coordinates[1]",
"location.value.type",
"name",
"name.metadata",
"name.type",
"name.value",
"shortDescription",
"shortDescription.metadata",
"shortDescription.type",
"shortDescription.value",
"source",
"source.metadata",
"source.type",
"source.value",
"type"
],
"root_type": "dict"
},
"output_schema": {
"additionalProperties": true,
"properties": {
"hasAdditionalInformation": {
"additionalProperties": false,
"properties": {
"remarks": {
"type": "string"
}
},
"type": "object"
},
"hasAdditionalType": {
"type": "string"
},
"hasDescription": {
"additionalProperties": false,
"properties": {
"longDescription": {
"type": "string"
},
"shortDescription": {
"type": "string"
}
},
"type": "object"
},
"hasLocation": {
"additionalProperties": false,
"properties": {
"coordinates": {
"items": {
"type": "number"
},
"type": "array"
},
"type": {
"enum": [
"Point"
],
"type": "string"
}
},
"required": [
"type",
"coordinates"
],
"type": "object"
},
"name": {
"type": "string"
}
},
"required": [
"name",
"hasLocation"
],
"type": "object"
},
"required": true,
"task": "match"
},
"response": "{\"identified\":true,\"candidate_source_path\":\"location.value\",\"reasoning\":\"location.value matches hasLocation\",\"confidence\":0.95}",
"system_prompt": "You perform semantic field matching between a target schema field and source JSON paths. Return exactly one flat JSON object and nothing else. Do not wrap the result in markdown. Do not nest the result under keys like match, result, mapping, output, or data. Use exactly these keys: \"identified\", \"candidate_source_path\", \"reasoning\", \"confidence\". \"identified\" must be a JSON boolean. \"candidate_source_path\" must be a string path or null. \"reasoning\" must be a short string. \"confidence\" must be a JSON number between 0.0 and 1.0. If no reliable match exists, return identified=false, candidate_source_path=null, a brief reasoning string, and confidence=0.0. Example valid output: {\"identified\":true,\"candidate_source_path\":\"datetime\",\"reasoning\":\"The source field semantically matches the target date.\",\"confidence\":0.92}",
"used_hints": true
},
"stage": "semantic_match",
"timestamp": "2026-05-19T17:04:05.218352+00:00"
},
{
"payload": {
"field_name": "name",
"hint_hash": "cc618f502b3d304bd72b2dde47b31f79e2ff51e0e7b8cd97f91e89bebb20d8e5",
"jq_expression": ".name.value",
"prompt_payload": {
"candidate_source_path": "name.value",
"field_name": "name",
"field_schema": {
"type": "string"
},
"hints": "Transform NGSI PointOfInterest into Trail schema strictly following the target schema.\r\n\r\nMappings:\r\n- name.value -\u003e name\r\n- shortDescription.value -\u003e hasDescription.shortDescription\r\n- description.value -\u003e hasDescription.longDescription\r\n- extraInfo.value -\u003e hasAdditionalInformation.remarks\r\n- category.value -\u003e hasAdditionalType\r\n- location.value -\u003e hasLocation\r\n\r\nRules:\r\n- hasDescription must contain only plain string fields: shortDescription and longDescription\r\n- Do NOT create nested objects inside hasDescription\r\n- Do NOT use \"object\", \"value\", or \"lang\" in the output\r\n- Follow the schema strictly, no extra properties allowed\r\n- Only include hasDescription if any description field exists\r\n- Only include hasAdditionalInformation if extraInfo exists\r\n- Always extract values using .value\r\n``",
"source_fragment": "Majalacabra",
"source_json": {
"alternateName": {
"metadata": {},
"type": "string",
"value": "LR-01"
},
"category": {
"metadata": {},
"type": "string",
"value": "TrailRoute"
},
"dataProvider": {
"metadata": {},
"type": "string",
"value": "nec-ccoc"
},
"description": {
"metadata": {},
"type": "string",
"value": "Comenzamos"
},
"extraInfo": {
"metadata": {},
"type": "string",
"value": "Encinar"
},
"id": "trailroute_lr-01",
"location": {
"metadata": {},
"type": "geo:json",
"value": {
"coordinates": [
-3.8565638,
40.4845294
],
"type": "Point"
}
},
"name": {
"metadata": {},
"type": "string",
"value": "Majalacabra"
},
"shortDescription": {
"metadata": {},
"type": "string",
"value": "Dificultad: baja"
},
"source": {
"metadata": {},
"type": "string",
"value": "portal-randev6"
},
"type": "PointOfInterest"
},
"task": "synthesize"
},
"response": "{\"jq_expression\":\".name.value\"}",
"system_prompt": "You generate a jq expression for one target field. Return exactly one flat JSON object and nothing else. Do not wrap the result in markdown. Do not nest the result under keys like result, output, data, or expression. Use exactly this output schema: {\"jq_expression\": string}. \"jq_expression\" must be a JSON string containing only the jq expression for the target field. Use candidate_source_path as the primary source location, verify it against source_json, and use source_fragment as the focused local value. Do not return explanations or extra keys. Example valid output: {\"jq_expression\":\".datetime\"}",
"used_hints": true
},
"stage": "jq_synthesis",
"timestamp": "2026-05-19T17:04:08.259126+00:00"
},
{
"payload": {
"field_name": "hasAdditionalInformation",
"hint_hash": "cc618f502b3d304bd72b2dde47b31f79e2ff51e0e7b8cd97f91e89bebb20d8e5",
"jq_expression": ".extraInfo? | if . then {remarks: .value} else empty end",
"prompt_payload": {
"candidate_source_path": "extraInfo",
"field_name": "hasAdditionalInformation",
"field_schema": {
"additionalProperties": false,
"properties": {
"remarks": {
"type": "string"
}
},
"type": "object"
},
"hints": "Transform NGSI PointOfInterest into Trail schema strictly following the target schema.\r\n\r\nMappings:\r\n- name.value -\u003e name\r\n- shortDescription.value -\u003e hasDescription.shortDescription\r\n- description.value -\u003e hasDescription.longDescription\r\n- extraInfo.value -\u003e hasAdditionalInformation.remarks\r\n- category.value -\u003e hasAdditionalType\r\n- location.value -\u003e hasLocation\r\n\r\nRules:\r\n- hasDescription must contain only plain string fields: shortDescription and longDescription\r\n- Do NOT create nested objects inside hasDescription\r\n- Do NOT use \"object\", \"value\", or \"lang\" in the output\r\n- Follow the schema strictly, no extra properties allowed\r\n- Only include hasDescription if any description field exists\r\n- Only include hasAdditionalInformation if extraInfo exists\r\n- Always extract values using .value\r\n``",
"source_fragment": {
"metadata": {},
"type": "string",
"value": "Encinar"
},
"source_json": {
"alternateName": {
"metadata": {},
"type": "string",
"value": "LR-01"
},
"category": {
"metadata": {},
"type": "string",
"value": "TrailRoute"
},
"dataProvider": {
"metadata": {},
"type": "string",
"value": "nec-ccoc"
},
"description": {
"metadata": {},
"type": "string",
"value": "Comenzamos"
},
"extraInfo": {
"metadata": {},
"type": "string",
"value": "Encinar"
},
"id": "trailroute_lr-01",
"location": {
"metadata": {},
"type": "geo:json",
"value": {
"coordinates": [
-3.8565638,
40.4845294
],
"type": "Point"
}
},
"name": {
"metadata": {},
"type": "string",
"value": "Majalacabra"
},
"shortDescription": {
"metadata": {},
"type": "string",
"value": "Dificultad: baja"
},
"source": {
"metadata": {},
"type": "string",
"value": "portal-randev6"
},
"type": "PointOfInterest"
},
"task": "synthesize"
},
"response": "{\"jq_expression\":\".extraInfo? | if . then {remarks: .value} else empty end\"}",
"system_prompt": "You generate a jq expression for one target field. Return exactly one flat JSON object and nothing else. Do not wrap the result in markdown. Do not nest the result under keys like result, output, data, or expression. Use exactly this output schema: {\"jq_expression\": string}. \"jq_expression\" must be a JSON string containing only the jq expression for the target field. Use candidate_source_path as the primary source location, verify it against source_json, and use source_fragment as the focused local value. Do not return explanations or extra keys. Example valid output: {\"jq_expression\":\".datetime\"}",
"used_hints": true
},
"stage": "jq_synthesis",
"timestamp": "2026-05-19T17:04:18.796993+00:00"
},
{
"payload": {
"field_name": "hasAdditionalType",
"hint_hash": "cc618f502b3d304bd72b2dde47b31f79e2ff51e0e7b8cd97f91e89bebb20d8e5",
"jq_expression": ".category.value",
"prompt_payload": {
"candidate_source_path": "category.value",
"field_name": "hasAdditionalType",
"field_schema": {
"type": "string"
},
"hints": "Transform NGSI PointOfInterest into Trail schema strictly following the target schema.\r\n\r\nMappings:\r\n- name.value -\u003e name\r\n- shortDescription.value -\u003e hasDescription.shortDescription\r\n- description.value -\u003e hasDescription.longDescription\r\n- extraInfo.value -\u003e hasAdditionalInformation.remarks\r\n- category.value -\u003e hasAdditionalType\r\n- location.value -\u003e hasLocation\r\n\r\nRules:\r\n- hasDescription must contain only plain string fields: shortDescription and longDescription\r\n- Do NOT create nested objects inside hasDescription\r\n- Do NOT use \"object\", \"value\", or \"lang\" in the output\r\n- Follow the schema strictly, no extra properties allowed\r\n- Only include hasDescription if any description field exists\r\n- Only include hasAdditionalInformation if extraInfo exists\r\n- Always extract values using .value\r\n``",
"source_fragment": "TrailRoute",
"source_json": {
"alternateName": {
"metadata": {},
"type": "string",
"value": "LR-01"
},
"category": {
"metadata": {},
"type": "string",
"value": "TrailRoute"
},
"dataProvider": {
"metadata": {},
"type": "string",
"value": "nec-ccoc"
},
"description": {
"metadata": {},
"type": "string",
"value": "Comenzamos"
},
"extraInfo": {
"metadata": {},
"type": "string",
"value": "Encinar"
},
"id": "trailroute_lr-01",
"location": {
"metadata": {},
"type": "geo:json",
"value": {
"coordinates": [
-3.8565638,
40.4845294
],
"type": "Point"
}
},
"name": {
"metadata": {},
"type": "string",
"value": "Majalacabra"
},
"shortDescription": {
"metadata": {},
"type": "string",
"value": "Dificultad: baja"
},
"source": {
"metadata": {},
"type": "string",
"value": "portal-randev6"
},
"type": "PointOfInterest"
},
"task": "synthesize"
},
"response": "{\"jq_expression\":\".category.value\"}",
"system_prompt": "You generate a jq expression for one target field. Return exactly one flat JSON object and nothing else. Do not wrap the result in markdown. Do not nest the result under keys like result, output, data, or expression. Use exactly this output schema: {\"jq_expression\": string}. \"jq_expression\" must be a JSON string containing only the jq expression for the target field. Use candidate_source_path as the primary source location, verify it against source_json, and use source_fragment as the focused local value. Do not return explanations or extra keys. Example valid output: {\"jq_expression\":\".datetime\"}",
"used_hints": true
},
"stage": "jq_synthesis",
"timestamp": "2026-05-19T17:04:21.346104+00:00"
},
{
"payload": {
"field_name": "hasLocation",
"hint_hash": "cc618f502b3d304bd72b2dde47b31f79e2ff51e0e7b8cd97f91e89bebb20d8e5",
"jq_expression": ".location.value",
"prompt_payload": {
"candidate_source_path": "location.value",
"field_name": "hasLocation",
"field_schema": {
"additionalProperties": false,
"properties": {
"coordinates": {
"items": {
"type": "number"
},
"type": "array"
},
"type": {
"enum": [
"Point"
],
"type": "string"
}
},
"required": [
"type",
"coordinates"
],
"type": "object"
},
"hints": "Transform NGSI PointOfInterest into Trail schema strictly following the target schema.\r\n\r\nMappings:\r\n- name.value -\u003e name\r\n- shortDescription.value -\u003e hasDescription.shortDescription\r\n- description.value -\u003e hasDescription.longDescription\r\n- extraInfo.value -\u003e hasAdditionalInformation.remarks\r\n- category.value -\u003e hasAdditionalType\r\n- location.value -\u003e hasLocation\r\n\r\nRules:\r\n- hasDescription must contain only plain string fields: shortDescription and longDescription\r\n- Do NOT create nested objects inside hasDescription\r\n- Do NOT use \"object\", \"value\", or \"lang\" in the output\r\n- Follow the schema strictly, no extra properties allowed\r\n- Only include hasDescription if any description field exists\r\n- Only include hasAdditionalInformation if extraInfo exists\r\n- Always extract values using .value\r\n``",
"source_fragment": {
"coordinates": [
-3.8565638,
40.4845294
],
"type": "Point"
},
"source_json": {
"alternateName": {
"metadata": {},
"type": "string",
"value": "LR-01"
},
"category": {
"metadata": {},
"type": "string",
"value": "TrailRoute"
},
"dataProvider": {
"metadata": {},
"type": "string",
"value": "nec-ccoc"
},
"description": {
"metadata": {},
"type": "string",
"value": "Comenzamos"
},
"extraInfo": {
"metadata": {},
"type": "string",
"value": "Encinar"
},
"id": "trailroute_lr-01",
"location": {
"metadata": {},
"type": "geo:json",
"value": {
"coordinates": [
-3.8565638,
40.4845294
],
"type": "Point"
}
},
"name": {
"metadata": {},
"type": "string",
"value": "Majalacabra"
},
"shortDescription": {
"metadata": {},
"type": "string",
"value": "Dificultad: baja"
},
"source": {
"metadata": {},
"type": "string",
"value": "portal-randev6"
},
"type": "PointOfInterest"
},
"task": "synthesize"
},
"response": "{\"jq_expression\":\".location.value\"}",
"system_prompt": "You generate a jq expression for one target field. Return exactly one flat JSON object and nothing else. Do not wrap the result in markdown. Do not nest the result under keys like result, output, data, or expression. Use exactly this output schema: {\"jq_expression\": string}. \"jq_expression\" must be a JSON string containing only the jq expression for the target field. Use candidate_source_path as the primary source location, verify it against source_json, and use source_fragment as the focused local value. Do not return explanations or extra keys. Example valid output: {\"jq_expression\":\".datetime\"}",
"used_hints": true
},
"stage": "jq_synthesis",
"timestamp": "2026-05-19T17:04:25.283402+00:00"
},
{
"payload": {
"field_expressions": {
"hasAdditionalInformation": ".extraInfo? | if . then {remarks: .value} else empty end",
"hasAdditionalType": ".category.value",
"hasLocation": ".location.value",
"name": ".name.value"
},
"jq_filter": "{ \"name\": .name.value, \"hasAdditionalInformation\": .extraInfo? | if . then {remarks: .value} else empty end, \"hasAdditionalType\": .category.value, \"hasLocation\": .location.value }",
"validation_passed": true
},
"stage": "generation_complete",
"timestamp": "2026-05-19T17:04:25.293972+00:00"
},
{
"payload": {
"jq_filter": "{ \"name\": .name.value, \"hasAdditionalInformation\": .extraInfo? | if . then {remarks: .value} else empty end, \"hasAdditionalType\": .category.value, \"hasLocation\": .location.value }",
"output_json": {
"hasAdditionalInformation": {
"remarks": "Encinar"
},
"hasAdditionalType": "TrailRoute",
"hasLocation": {
"coordinates": [
-3.8565638,
40.4845294
],
"type": "Point"
},
"name": "Majalacabra"
},
"schema_valid": true,
"validation_errors": []
},
"stage": "transform_complete",
"timestamp": "2026-05-19T17:04:25.297874+00:00"
}
],
"run_id": "06c0db1a-e001-4dde-b215-dd083ca6f470"
}