此 MCP 可以做什么
Designs customizable furniture in 2D and 3D, validates buildability, generates cut lists and assembly instructions, and calculates material quotes in Argentine pesos.
工具
输入模式
{'type': 'object', '$schema': 'http://json-schema.org/draft-07/schema#', 'required': ['cambios'], 'properties': {'cambios': {'type': 'object', 'description': 'Diff a aplicar sobre baseParams (merge por campo). Ej: {width: 2400, shelves: 5}. El resultado se re-valida con el esquema; los objetos anidados (root, content, headboard) se reemplazan completos. Si queda inválido, la tool falla con el motivo.', 'propertyNames': {'type': 'string'}, 'additionalProperties': {}}, 'baseParams': {'oneOf': [{'type': 'object', 'required': ['kind', 'width', 'height', 'depth', 'shelves', 'backPanel', 'material'], 'properties': {'kind': {'type': 'string', 'const': 'shelf'}, 'depth': {'type': 'number', 'exclusiveMinimum': 0}, 'width': {'type': 'number', 'exclusiveMinimum': 0}, 'height': {'type': 'number', 'exclusiveMinimum': 0}, 'shelves': {'type': 'integer', 'maximum': 9007199254740991, 'minimum': 0}, 'material': {'type': 'string'}, 'backPanel': {'type': 'boolean'}, 'openFrame': {'type': 'boolean'}, 'techoPasante': {'type': 'boolean'}}, 'additionalProperties': False}, {'type': 'object', 'required': ['kind', 'width', 'height', 'depth', 'drawers', 'material'], 'properties': {'kind': {'type': 'string', 'const': 'desk'}, 'depth': {'type': 'number', 'exclusiveMinimum': 0}, 'width': {'type': 'number', 'exclusiveMinimum': 0}, 'height': {'type': 'number', 'exclusiveMinimum': 0}, 'drawers': {'type': 'integer', 'maximum': 9007199254740991, 'minimum': 0}, 'material': {'type': 'string'}}, 'additionalProperties': False}, {'type': 'object', 'required': ['kind', 'width', 'height', 'depth', 'doors', 'rod', 'material'], 'properties': {'rod': {'type': 'boolean'}, 'kind': {'type': 'string', 'const': 'wardrobe'}, 'depth': {'type': 'number', 'exclusiveMinimum': 0}, 'doors': {'type': 'integer', 'maximum': 9007199254740991, 'minimum': 0}, 'width': {'type': 'number', 'exclusiveMinimum': 0}, 'height': {'type': 'number', 'exclusiveMinimum': 0}, 'material': {'type': 'string'}, 'techoPasante': {'type': 'boolean'}}, 'additionalProperties': False}, {'type': 'object', 'required': ['kind', 'width', 'depth', 'height', 'rafters', 'postSize', 'slope', 'material'], 'properties': {'kind': {'type': 'string', 'const': 'pergola'}, 'depth': {'type': 'number', 'exclusiveMinimum': 0}, 'slope': {'type': 'number', 'maximum': 45, 'minimum': 0}, 'width': {'type': 'number', 'exclusiveMinimum': 0}, 'height': {'type': 'number', 'exclusiveMinimum': 0}, 'rafters': {'type': 'integer', 'maximum': 9007199254740991, 'minimum': 1}, 'material': {'type': 'string'}, 'postSize': {'type': 'number', 'exclusiveMinimum': 0}}, 'additionalProperties': False}, {'type': 'object', 'required': ['kind', 'width', 'depth', 'boardWidth', 'gap', 'joists', 'material'], 'properties': {'gap': {'type': 'number', 'minimum': 0}, 'kind': {'type': 'string', 'const': 'deck'}, 'depth': {'type': 'number', 'exclusiveMinimum': 0}, 'width': {'type': 'number', 'exclusiveMinimum': 0}, 'joists': {'type': 'integer', 'maximum': 9007199254740991, 'minimum': 1}, 'material': {'type': 'string'}, 'boardWidth': {'type': 'number', 'exclusiveMinimum': 0}}, 'additionalProperties': False}, {'type': 'object', 'required': ['kind', 'width', 'height', 'depth', 'legSize', 'material'], 'properties': {'kind': {'type': 'string', 'const': 'table'}, 'depth': {'type': 'number', 'exclusiveMinimum': 0}, 'width': {'type': 'number', 'exclusiveMinimum': 0}, 'height': {'type': 'number', 'exclusiveMinimum': 0}, 'legSize': {'type': 'number', 'exclusiveMinimum': 0}, 'material': {'type': 'string'}}, 'additionalProperties': False}, {'type': 'object', 'required': ['kind', 'width', 'height', 'depth', 'tabletopDepth', 'seatHeight', 'material'], 'properties': {'kind': {'type': 'string', 'const': 'picnic'}, 'depth': {'type': 'number', 'exclusiveMinimum': 0}, 'width': {'type': 'number', 'exclusiveMinimum': 0}, 'height': {'type': 'number', 'exclusiveMinimum': 0}, 'material': {'type': 'string'}, 'seatHeight': {'type': 'number', 'exclusiveMinimum': 0}, 'tabletopDepth': {'type': 'number', 'exclusiveMinimum': 0}}, 'additionalProperties': False}, {'type': 'object', 'required': ['kind', 'width', 'height', 'depth', 'storage', 'material'], 'properties': {'bunk': {'type': 'boolean'}, 'kind': {'type': 'string', 'const': 'cama'}, 'depth': {'type': 'number', 'exclusiveMinimum': 0}, 'width': {'type': 'number', 'exclusiveMinimum': 0}, 'height': {'type': 'number', 'exclusiveMinimum': 0}, 'storage': {'type': 'boolean'}, 'material': {'type': 'string'}, 'headboard': {'type': 'object', 'required': ['kind', 'width', 'height', 'depth', 'material', 'backPanel', 'root'], 'properties': {'base': {'enum': ['zocalo', 'patas', 'ruedas'], 'type': 'string'}, 'kind': {'type': 'string', 'const': 'modular'}, 'root': {'anyOf': [{'type': 'object', 'required': ['content'], 'properties': {'led': {'type': 'boolean'}, 'door': {'enum': ['izq', 'der', 'doble', 'arriba', 'abajo', 'corrediza'], 'type': 'string'}, 'lock': {'enum': ['magnetica', 'llave'], 'type': 'string'}, 'push': {'type': 'boolean'}, 'content': {'oneOf': [{'type': 'object', 'required': ['c', 'n'], 'properties': {'c': {'type': 'string', 'const': 'estantes'}, 'n': {'type': 'integer', 'maximum': 12, 'minimum': 1}}, 'additionalProperties': False}, {'type': 'object', 'required': ['c', 'n'], 'properties': {'c': {'type': 'string', 'const': 'cajones'}, 'n': {'type': 'integer', 'maximum': 8, 'minimum': 1}, 'lock': {'enum': ['magnetica', 'llave'], 'type': 'string'}, 'push': {'type': 'boolean'}}, 'additionalProperties': False}, {'type': 'object', 'required': ['c'], 'properties': {'c': {'type': 'string', 'const': 'cajonSecreto'}}, 'additionalProperties': False}, {'type': 'object', 'required': ['c'], 'properties': {'c': {'type': 'string', 'const': 'barral'}}, 'additionalProperties': False}, {'type': 'object', 'required': ['c'], 'properties': {'c': {'type': 'string', 'const': 'botellero'}}, 'additionalProperties': False}, {'type': 'object', 'required': ['c', 'n'], 'properties': {'c': {'type': 'string', 'const': 'zapatero'}, 'n': {'type': 'integer', 'maximum': 5, 'minimum': 1}}, 'additionalProperties': False}, {'type': 'object', 'required': ['c', 'n'], 'properties': {'c': {'type': 'string', 'const': 'vidrio'}, 'n': {'type': 'integer', 'maximum': 8, 'minimum': 1}}, 'additionalProperties': False}, {'type': 'object', 'required': ['c', 'n'], 'properties': {'c': {'type': 'string', 'const': 'bandeja'}, 'n': {'type': 'integer', 'maximum': 6, 'minimum': 1}}, 'additionalProperties': False}, {'type': 'object', 'required': ['c', 'n'], 'properties': {'c': {'type': 'string', 'const': 'ranurado'}, 'n': {'type': 'integer', 'maximum': 30, 'minimum': 3}}, 'additionalProperties': False}, {'type': 'object', 'required': ['c'], 'properties': {'c': {'type': 'string', 'const': 'hueco'}}, 'additionalProperties': False}, {'type': 'object', 'required': ['c'], 'properties': {'c': {'type': 'string', 'const': 'vacio'}}, 'additionalProperties': False}]}}, 'additionalProperties': False}, {'$ref': '#/definitions/__schema0'}]}, 'depth': {'type': 'number', 'exclusiveMinimum': 0}, 'width': {'type': 'number', 'exclusiveMinimum': 0}, 'height': {'type': 'number', 'exclusiveMinimum': 0}, 'colgado': {'type': 'boolean'}, 'overlay': {'type': 'boolean'}, 'material': {'type': 'string'}, 'backPanel': {'type': 'boolean'}, 'enCuerpos': {'type': 'boolean'}, 'softClose': {'type': 'boolean'}, 'glassDoors': {'type': 'boolean'}, 'slidingDoor': {'enum': ['full', 'per-column'], 'type': 'string'}, 'techoPasante': {'type': 'boolean'}, 'frontMaterial': {'type': 'string'}}, 'additionalProperties': False}, 'baseHeight': {'type': 'number', 'exclusiveMinimum': 0}, 'bunkHeight': {'type': 'number', 'maximum': 1600, 'minimum': 900}, 'bunkLadderSide': {'enum': ['izq', 'der'], 'type': 'string'}, 'drawersPerSide': {'type': 'integer', 'maximum': 4, 'minimum': 0}, 'headboardShelves': {'type': 'integer', 'maximum': 6, 'minimum': 0}, 'mattressThickness': {'type': 'number', 'exclusiveMinimum': 0}}, 'additionalProperties': False}, {'type': 'object', 'required': ['kind', 'width', 'height', 'depth', 'arms', 'material'], 'properties': {'arms': {'type': 'boolean'}, 'kind': {'type': 'string', 'const': 'sofa'}, 'depth': {'type': 'number', 'exclusiveMinimum': 0}, 'width': {'type': 'number', 'exclusiveMinimum': 0}, 'height': {'type': 'number', 'exclusiveMinimum': 0}, 'material': {'type': 'string'}, 'seatHeight': {'type': 'number', 'exclusiveMinimum': 0}, 'backrestAngle': {'type': 'number', 'maximum': 45, 'minimum': 0}, 'cushionThickness': {'type': 'number', 'minimum': 0}}, 'additionalProperties': False}, {'type': 'object', 'required': ['kind', 'width', 'height', 'depth', 'backrest', 'material'], 'properties': {'kind': {'type': 'string', 'const': 'banqueta'}, 'depth': {'type': 'number', 'exclusiveMinimum': 0}, 'width': {'type': 'number', 'exclusiveMinimum': 0}, 'height': {'type': 'number', 'exclusiveMinimum': 0}, 'backrest': {'type': 'boolean'}, 'material': {'type': 'string'}, 'backrestAngle': {'type': 'number', 'maximum': 45, 'minimum': 0}, 'cushionThickness': {'type': 'number', 'minimum': 0}}, 'additionalProperties': False}, {'type': 'object', 'required': ['kind', 'width', 'height', 'depth', 'material'], 'properties': {'kind': {'type': 'string', 'const': 'espejo'}, 'depth': {'type': 'number', 'exclusiveMinimum': 0}, 'width': {'type': 'number', 'exclusiveMinimum': 0}, 'height': {'type': 'number', 'exclusiveMinimum': 0}, 'material': {'type': 'string'}}, 'additionalProperties': False}, {'type': 'object', 'required': ['kind', 'width', 'height', 'depth', 'lid', 'wheels', 'material'], 'properties': {'lid': {'enum': ['ninguna', 'fija', 'abisagrada'], 'type': 'string'}, 'kind': {'type': 'string', 'const': 'caja'}, 'legs': {'type': 'number', 'maximum': 900, 'minimum': 0}, 'depth': {'type': 'number', 'exclusiveMinimum': 0}, 'width': {'type': 'number', 'exclusiveMinimum': 0}, 'height': {'type': 'number', 'exclusiveMinimum': 0}, 'wheels': {'type': 'boolean'}, 'material': {'type': 'string'}}, 'additionalProperties': False}, {'type': 'object', 'required': ['kind', 'width', 'height', 'depth', 'material'], 'properties': {'kind': {'type': 'string', 'const': 'cortina'}, 'depth': {'type': 'number', 'exclusiveMinimum': 0}, 'width': {'type': 'number', 'exclusiveMinimum': 0}, 'height': {'type': 'number', 'exclusiveMinimum': 0}, 'material': {'type': 'string'}}, 'additionalProperties': False}, {'type': 'object', 'required': ['kind', 'width', 'height', 'depth', 'hojas', 'relleno', 'material'], 'properties': {'kind': {'type': 'string', 'const': 'biombo'}, 'depth': {'type': 'number', 'exclusiveMinimum': 0}, 'hojas': {'type': 'integer', 'maximum': 6, 'minimum': 2}, 'width': {'type': 'number', 'exclusiveMinimum': 0}, 'height': {'type': 'number', 'exclusiveMinimum': 0}, 'relleno': {'type': 'boolean'}, 'material': {'type': 'string'}}, 'additionalProperties': False}, {'type': 'object', 'required': ['kind', 'width', 'height', 'depth', 'slope', 'shelves', 'puerta', 'material'], 'properties': {'kind': {'type': 'string', 'const': 'invernadero'}, 'depth': {'type': 'number', 'exclusiveMinimum': 0}, 'slope': {'type': 'number', 'maximum': 45, 'minimum': 0}, 'width': {'type': 'number', 'exclusiveMinimum': 0}, 'height': {'type': 'number', 'exclusiveMinimum': 0}, 'puerta': {'type': 'boolean'}, 'shelves': {'type': 'integer', 'maximum': 9007199254740991, 'minimum': 0}, 'material': {'type': 'string'}}, 'additionalProperties': False}, {'type': 'object', 'required': ['kind', 'width', 'height', 'depth', 'material', 'backPanel', 'root'], 'properties': {'base': {'enum': ['zocalo', 'patas', 'ruedas'], 'type': 'string'}, 'kind': {'type': 'string', 'const': 'modular'}, 'root': {'anyOf': [{'type': 'object', 'required': ['content'], 'properties': {'led': {'type': 'boolean'}, 'door': {'enum': ['izq', 'der', 'doble', 'arriba', 'abajo', 'corrediza'], 'type': 'string'}, 'lock': {'enum': ['magnetica', 'llave'], 'type': 'string'}, 'push': {'type': 'boolean'}, 'content': {'oneOf': [{'type': 'object', 'required': ['c', 'n'], 'properties': {'c': {'type': 'string', 'const': 'estantes'}, 'n': {'type': 'integer', 'maximum': 12, 'minimum': 1}}, 'additionalProperties': False}, {'type': 'object', 'required': ['c', 'n'], 'properties': {'c': {'type': 'string', 'const': 'cajones'}, 'n': {'type': 'integer', 'maximum': 8, 'minimum': 1}, 'lock': {'enum': ['magnetica', 'llave'], 'type': 'string'}, 'push': {'type': 'boolean'}}, 'additionalProperties': False}, {'type': 'object', 'required': ['c'], 'properties': {'c': {'type': 'string', 'const': 'cajonSecreto'}}, 'additionalProperties': False}, {'type': 'object', 'required': ['c'], 'properties': {'c': {'type': 'string', 'const': 'barral'}}, 'additionalProperties': False}, {'type': 'object', 'required': ['c'], 'properties': {'c': {'type': 'string', 'const': 'botellero'}}, 'additionalProperties': False}, {'type': 'object', 'required': ['c', 'n'], 'properties': {'c': {'type': 'string', 'const': 'zapatero'}, 'n': {'type': 'integer', 'maximum': 5, 'minimum': 1}}, 'additionalProperties': False}, {'type': 'object', 'required': ['c', 'n'], 'properties': {'c': {'type': 'string', 'const': 'vidrio'}, 'n': {'type': 'integer', 'maximum': 8, 'minimum': 1}}, 'additionalProperties': False}, {'type': 'object', 'required': ['c', 'n'], 'properties': {'c': {'type': 'string', 'const': 'bandeja'}, 'n': {'type': 'integer', 'maximum': 6, 'minimum': 1}}, 'additionalProperties': False}, {'type': 'object', 'required': ['c', 'n'], 'properties': {'c': {'type': 'string', 'const': 'ranurado'}, 'n': {'type': 'integer', 'maximum': 30, 'minimum': 3}}, 'additionalProperties': False}, {'type': 'object', 'required': ['c'], 'properties': {'c': {'type': 'string', 'const': 'hueco'}}, 'additionalProperties': False}, {'type': 'object', 'required': ['c'], 'properties': {'c': {'type': 'string', 'const': 'vacio'}}, 'additionalProperties': False}]}}, 'additionalProperties': False}, {'$ref': '#/definitions/__schema0'}]}, 'depth': {'type': 'number', 'exclusiveMinimum': 0}, 'width': {'type': 'number', 'exclusiveMinimum': 0}, 'height': {'type': 'number', 'exclusiveMinimum': 0}, 'colgado': {'type': 'boolean'}, 'overlay': {'type': 'boolean'}, 'material': {'type': 'string'}, 'backPanel': {'type': 'boolean'}, 'enCuerpos': {'type': 'boolean'}, 'softClose': {'type': 'boolean'}, 'glassDoors': {'type': 'boolean'}, 'slidingDoor': {'enum': ['full', 'per-column'], 'type': 'string'}, 'techoPasante': {'type': 'boolean'}, 'frontMaterial': {'type': 'string'}}, 'additionalProperties': False}], 'description': 'Params paramétricos de partida (ya válidos). Ej: los que devolvió construir_mueble. El schema enumera todos los campos por kind. Modular: frontMaterial (mismo espesor que material), softClose, base, colgado, enCuerpos, slidingDoor, glassDoors, overlay y techoPasante (techo al ancho total sobre los laterales; también en shelf y wardrobe). root admite cortes V/H anidados; cada hijo tiene f y, si genera cuerpo, alto/prof/colgado. En cortes H el alto se reparte con f, no con alto. height y depth deben abarcar todos los cuerpos. Cada hoja admite door, lock, push y led; content.c incluye cajonSecreto y cajones con content.lock/content.push. Shelf: shelves:0 deja solo carcasa; openFrame usa bastidor sin fondo. Cama: headboard modular, headboardShelves, drawersPerSide, bunk, bunkHeight, bunkLadderSide, mattressThickness, baseHeight. Sofá/banqueta: seatHeight (sofá), backrestAngle y cushionThickness. Otros tipos exponen sus opciones en el schema. Los avisos explican qué opción se recortó o no se aplicó y cómo corregirla.'}}, 'definitions': {'__schema0': {'type': 'object', 'required': ['s', 'ch'], 'properties': {'s': {'enum': ['V', 'H'], 'type': 'string'}, 'ch': {'type': 'array', 'items': {'type': 'object', 'required': ['f', 'node'], 'properties': {'f': {'type': 'number', 'exclusiveMinimum': 0}, 'alto': {'type': 'number', 'maximum': 3000, 'minimum': 150}, 'node': {'anyOf': [{'type': 'object', 'required': ['content'], 'properties': {'led': {'type': 'boolean'}, 'door': {'enum': ['izq', 'der', 'doble', 'arriba', 'abajo', 'corrediza'], 'type': 'string'}, 'lock': {'enum': ['magnetica', 'llave'], 'type': 'string'}, 'push': {'type': 'boolean'}, 'content': {'oneOf': [{'type': 'object', 'required': ['c', 'n'], 'properties': {'c': {'type': 'string', 'const': 'estantes'}, 'n': {'type': 'integer', 'maximum': 12, 'minimum': 1}}, 'additionalProperties': False}, {'type': 'object', 'required': ['c', 'n'], 'properties': {'c': {'type': 'string', 'const': 'cajones'}, 'n': {'type': 'integer', 'maximum': 8, 'minimum': 1}, 'lock': {'enum': ['magnetica', 'llave'], 'type': 'string'}, 'push': {'type': 'boolean'}}, 'additionalProperties': False}, {'type': 'object', 'required': ['c'], 'properties': {'c': {'type': 'string', 'const': 'cajonSecreto'}}, 'additionalProperties': False}, {'type': 'object', 'required': ['c'], 'properties': {'c': {'type': 'string', 'const': 'barral'}}, 'additionalProperties': False}, {'type': 'object', 'required': ['c'], 'properties': {'c': {'type': 'string', 'const': 'botellero'}}, 'additionalProperties': False}, {'type': 'object', 'required': ['c', 'n'], 'properties': {'c': {'type': 'string', 'const': 'zapatero'}, 'n': {'type': 'integer', 'maximum': 5, 'minimum': 1}}, 'additionalProperties': False}, {'type': 'object', 'required': ['c', 'n'], 'properties': {'c': {'type': 'string', 'const': 'vidrio'}, 'n': {'type': 'integer', 'maximum': 8, 'minimum': 1}}, 'additionalProperties': False}, {'type': 'object', 'required': ['c', 'n'], 'properties': {'c': {'type': 'string', 'const': 'bandeja'}, 'n': {'type': 'integer', 'maximum': 6, 'minimum': 1}}, 'additionalProperties': False}, {'type': 'object', 'required': ['c', 'n'], 'properties': {'c': {'type': 'string', 'const': 'ranurado'}, 'n': {'type': 'integer', 'maximum': 30, 'minimum': 3}}, 'additionalProperties': False}, {'type': 'object', 'required': ['c'], 'properties': {'c': {'type': 'string', 'const': 'hueco'}}, 'additionalProperties': False}, {'type': 'object', 'required': ['c'], 'properties': {'c': {'type': 'string', 'const': 'vacio'}}, 'additionalProperties': False}]}}, 'additionalProperties': False}, {'$ref': '#/definitions/__schema0'}]}, 'prof': {'type': 'number', 'maximum': 1200, 'minimum': 80}, 'colgado': {'type': 'boolean'}}, 'additionalProperties': False}, 'maxItems': 8, 'minItems': 2}, 'door': {'enum': ['izq', 'der', 'doble', 'arriba', 'abajo', 'corrediza'], 'type': 'string'}, 'lock': {'enum': ['magnetica', 'llave'], 'type': 'string'}, 'push': {'type': 'boolean'}}, 'additionalProperties': False}}}
输出模式
{'type': 'object', '$schema': 'http://json-schema.org/draft-07/schema#', 'required': ['medidas_mm', 'cotizacion', 'despiece', 'factibilidad', 'nota', 'editor_url'], 'properties': {'nota': {'type': 'string'}, 'despiece': {'type': 'object', 'required': ['piezas', 'herrajes'], 'properties': {'piezas': {'type': 'number'}, 'herrajes': {'type': 'number'}}, 'additionalProperties': False}, 'cotizacion': {'type': 'object', 'required': ['total_ars', 'total_formateado', 'piezas'], 'properties': {'piezas': {'type': 'number'}, 'total_ars': {'type': 'number'}, 'total_formateado': {'type': 'string'}}, 'additionalProperties': False}, 'editor_url': {'type': 'string'}, 'medidas_mm': {'type': 'object', 'required': ['ancho', 'alto', 'profundidad'], 'properties': {'alto': {'type': 'number'}, 'ancho': {'type': 'number'}, 'profundidad': {'type': 'number'}}, 'additionalProperties': False}, 'factibilidad': {'type': 'object', 'required': ['factible', 'warnings', 'nota'], 'properties': {'nota': {'type': 'string'}, 'factible': {'type': 'boolean'}, 'warnings': {'type': 'array', 'items': {'type': 'object', 'required': ['tipo', 'severidad', 'mensaje'], 'properties': {'tipo': {'type': 'string'}, 'mensaje': {'type': 'string'}, 'severidad': {'type': 'string'}}, 'additionalProperties': False}}, 'editor_url': {'type': 'string'}}, 'additionalProperties': False}}, 'additionalProperties': False}
输入模式
{'type': 'object', '$schema': 'http://json-schema.org/draft-07/schema#', 'required': ['consulta'], 'properties': {'consulta': {'type': 'string', 'maxLength': 200, 'minLength': 1, 'description': "Texto libre en español para buscar en el catálogo. Ejemplos: 'cama', 'silla comedor', 'banqueta de barra'. Soporta variantes morfológicas (plural/singular, acentos). Máximo 200 caracteres."}}}
输出模式
{'type': 'object', '$schema': 'http://json-schema.org/draft-07/schema#', 'required': ['resultados', 'total'], 'properties': {'total': {'type': 'number'}, 'resultados': {'type': 'array', 'items': {'type': 'object', 'required': ['id', 'nombre', 'categoria', 'medidas_mm', 'nota', 'ambiente', 'editor_url', 'imagen_url'], 'properties': {'id': {'type': 'string'}, 'nota': {'type': 'string'}, 'nombre': {'type': 'string'}, 'ambiente': {'type': 'string'}, 'categoria': {'type': 'string'}, 'editor_url': {'type': 'string'}, 'imagen_url': {'type': 'string'}, 'medidas_mm': {'type': 'object', 'required': ['ancho', 'profundidad', 'alto'], 'properties': {'alto': {'type': 'number'}, 'ancho': {'type': 'number'}, 'profundidad': {'type': 'number'}}, 'additionalProperties': False}}, 'additionalProperties': False}}}, 'additionalProperties': False}
输入模式
{'type': 'object', '$schema': 'http://json-schema.org/draft-07/schema#', 'properties': {'params': {'oneOf': [{'type': 'object', 'required': ['kind', 'width', 'height', 'depth', 'shelves', 'backPanel', 'material'], 'properties': {'kind': {'type': 'string', 'const': 'shelf'}, 'depth': {'type': 'number', 'exclusiveMinimum': 0}, 'width': {'type': 'number', 'exclusiveMinimum': 0}, 'height': {'type': 'number', 'exclusiveMinimum': 0}, 'shelves': {'type': 'integer', 'maximum': 9007199254740991, 'minimum': 0}, 'material': {'type': 'string'}, 'backPanel': {'type': 'boolean'}, 'openFrame': {'type': 'boolean'}, 'techoPasante': {'type': 'boolean'}}, 'additionalProperties': False}, {'type': 'object', 'required': ['kind', 'width', 'height', 'depth', 'drawers', 'material'], 'properties': {'kind': {'type': 'string', 'const': 'desk'}, 'depth': {'type': 'number', 'exclusiveMinimum': 0}, 'width': {'type': 'number', 'exclusiveMinimum': 0}, 'height': {'type': 'number', 'exclusiveMinimum': 0}, 'drawers': {'type': 'integer', 'maximum': 9007199254740991, 'minimum': 0}, 'material': {'type': 'string'}}, 'additionalProperties': False}, {'type': 'object', 'required': ['kind', 'width', 'height', 'depth', 'doors', 'rod', 'material'], 'properties': {'rod': {'type': 'boolean'}, 'kind': {'type': 'string', 'const': 'wardrobe'}, 'depth': {'type': 'number', 'exclusiveMinimum': 0}, 'doors': {'type': 'integer', 'maximum': 9007199254740991, 'minimum': 0}, 'width': {'type': 'number', 'exclusiveMinimum': 0}, 'height': {'type': 'number', 'exclusiveMinimum': 0}, 'material': {'type': 'string'}, 'techoPasante': {'type': 'boolean'}}, 'additionalProperties': False}, {'type': 'object', 'required': ['kind', 'width', 'depth', 'height', 'rafters', 'postSize', 'slope', 'material'], 'properties': {'kind': {'type': 'string', 'const': 'pergola'}, 'depth': {'type': 'number', 'exclusiveMinimum': 0}, 'slope': {'type': 'number', 'maximum': 45, 'minimum': 0}, 'width': {'type': 'number', 'exclusiveMinimum': 0}, 'height': {'type': 'number', 'exclusiveMinimum': 0}, 'rafters': {'type': 'integer', 'maximum': 9007199254740991, 'minimum': 1}, 'material': {'type': 'string'}, 'postSize': {'type': 'number', 'exclusiveMinimum': 0}}, 'additionalProperties': False}, {'type': 'object', 'required': ['kind', 'width', 'depth', 'boardWidth', 'gap', 'joists', 'material'], 'properties': {'gap': {'type': 'number', 'minimum': 0}, 'kind': {'type': 'string', 'const': 'deck'}, 'depth': {'type': 'number', 'exclusiveMinimum': 0}, 'width': {'type': 'number', 'exclusiveMinimum': 0}, 'joists': {'type': 'integer', 'maximum': 9007199254740991, 'minimum': 1}, 'material': {'type': 'string'}, 'boardWidth': {'type': 'number', 'exclusiveMinimum': 0}}, 'additionalProperties': False}, {'type': 'object', 'required': ['kind', 'width', 'height', 'depth', 'legSize', 'material'], 'properties': {'kind': {'type': 'string', 'const': 'table'}, 'depth': {'type': 'number', 'exclusiveMinimum': 0}, 'width': {'type': 'number', 'exclusiveMinimum': 0}, 'height': {'type': 'number', 'exclusiveMinimum': 0}, 'legSize': {'type': 'number', 'exclusiveMinimum': 0}, 'material': {'type': 'string'}}, 'additionalProperties': False}, {'type': 'object', 'required': ['kind', 'width', 'height', 'depth', 'tabletopDepth', 'seatHeight', 'material'], 'properties': {'kind': {'type': 'string', 'const': 'picnic'}, 'depth': {'type': 'number', 'exclusiveMinimum': 0}, 'width': {'type': 'number', 'exclusiveMinimum': 0}, 'height': {'type': 'number', 'exclusiveMinimum': 0}, 'material': {'type': 'string'}, 'seatHeight': {'type': 'number', 'exclusiveMinimum': 0}, 'tabletopDepth': {'type': 'number', 'exclusiveMinimum': 0}}, 'additionalProperties': False}, {'type': 'object', 'required': ['kind', 'width', 'height', 'depth', 'storage', 'material'], 'properties': {'bunk': {'type': 'boolean'}, 'kind': {'type': 'string', 'const': 'cama'}, 'depth': {'type': 'number', 'exclusiveMinimum': 0}, 'width': {'type': 'number', 'exclusiveMinimum': 0}, 'height': {'type': 'number', 'exclusiveMinimum': 0}, 'storage': {'type': 'boolean'}, 'material': {'type': 'string'}, 'headboard': {'type': 'object', 'required': ['kind', 'width', 'height', 'depth', 'material', 'backPanel', 'root'], 'properties': {'base': {'enum': ['zocalo', 'patas', 'ruedas'], 'type': 'string'}, 'kind': {'type': 'string', 'const': 'modular'}, 'root': {'anyOf': [{'type': 'object', 'required': ['content'], 'properties': {'led': {'type': 'boolean'}, 'door': {'enum': ['izq', 'der', 'doble', 'arriba', 'abajo', 'corrediza'], 'type': 'string'}, 'lock': {'enum': ['magnetica', 'llave'], 'type': 'string'}, 'push': {'type': 'boolean'}, 'content': {'oneOf': [{'type': 'object', 'required': ['c', 'n'], 'properties': {'c': {'type': 'string', 'const': 'estantes'}, 'n': {'type': 'integer', 'maximum': 12, 'minimum': 1}}, 'additionalProperties': False}, {'type': 'object', 'required': ['c', 'n'], 'properties': {'c': {'type': 'string', 'const': 'cajones'}, 'n': {'type': 'integer', 'maximum': 8, 'minimum': 1}, 'lock': {'enum': ['magnetica', 'llave'], 'type': 'string'}, 'push': {'type': 'boolean'}}, 'additionalProperties': False}, {'type': 'object', 'required': ['c'], 'properties': {'c': {'type': 'string', 'const': 'cajonSecreto'}}, 'additionalProperties': False}, {'type': 'object', 'required': ['c'], 'properties': {'c': {'type': 'string', 'const': 'barral'}}, 'additionalProperties': False}, {'type': 'object', 'required': ['c'], 'properties': {'c': {'type': 'string', 'const': 'botellero'}}, 'additionalProperties': False}, {'type': 'object', 'required': ['c', 'n'], 'properties': {'c': {'type': 'string', 'const': 'zapatero'}, 'n': {'type': 'integer', 'maximum': 5, 'minimum': 1}}, 'additionalProperties': False}, {'type': 'object', 'required': ['c', 'n'], 'properties': {'c': {'type': 'string', 'const': 'vidrio'}, 'n': {'type': 'integer', 'maximum': 8, 'minimum': 1}}, 'additionalProperties': False}, {'type': 'object', 'required': ['c', 'n'], 'properties': {'c': {'type': 'string', 'const': 'bandeja'}, 'n': {'type': 'integer', 'maximum': 6, 'minimum': 1}}, 'additionalProperties': False}, {'type': 'object', 'required': ['c', 'n'], 'properties': {'c': {'type': 'string', 'const': 'ranurado'}, 'n': {'type': 'integer', 'maximum': 30, 'minimum': 3}}, 'additionalProperties': False}, {'type': 'object', 'required': ['c'], 'properties': {'c': {'type': 'string', 'const': 'hueco'}}, 'additionalProperties': False}, {'type': 'object', 'required': ['c'], 'properties': {'c': {'type': 'string', 'const': 'vacio'}}, 'additionalProperties': False}]}}, 'additionalProperties': False}, {'$ref': '#/definitions/__schema0'}]}, 'depth': {'type': 'number', 'exclusiveMinimum': 0}, 'width': {'type': 'number', 'exclusiveMinimum': 0}, 'height': {'type': 'number', 'exclusiveMinimum': 0}, 'colgado': {'type': 'boolean'}, 'overlay': {'type': 'boolean'}, 'material': {'type': 'string'}, 'backPanel': {'type': 'boolean'}, 'enCuerpos': {'type': 'boolean'}, 'softClose': {'type': 'boolean'}, 'glassDoors': {'type': 'boolean'}, 'slidingDoor': {'enum': ['full', 'per-column'], 'type': 'string'}, 'techoPasante': {'type': 'boolean'}, 'frontMaterial': {'type': 'string'}}, 'additionalProperties': False}, 'baseHeight': {'type': 'number', 'exclusiveMinimum': 0}, 'bunkHeight': {'type': 'number', 'maximum': 1600, 'minimum': 900}, 'bunkLadderSide': {'enum': ['izq', 'der'], 'type': 'string'}, 'drawersPerSide': {'type': 'integer', 'maximum': 4, 'minimum': 0}, 'headboardShelves': {'type': 'integer', 'maximum': 6, 'minimum': 0}, 'mattressThickness': {'type': 'number', 'exclusiveMinimum': 0}}, 'additionalProperties': False}, {'type': 'object', 'required': ['kind', 'width', 'height', 'depth', 'arms', 'material'], 'properties': {'arms': {'type': 'boolean'}, 'kind': {'type': 'string', 'const': 'sofa'}, 'depth': {'type': 'number', 'exclusiveMinimum': 0}, 'width': {'type': 'number', 'exclusiveMinimum': 0}, 'height': {'type': 'number', 'exclusiveMinimum': 0}, 'material': {'type': 'string'}, 'seatHeight': {'type': 'number', 'exclusiveMinimum': 0}, 'backrestAngle': {'type': 'number', 'maximum': 45, 'minimum': 0}, 'cushionThickness': {'type': 'number', 'minimum': 0}}, 'additionalProperties': False}, {'type': 'object', 'required': ['kind', 'width', 'height', 'depth', 'backrest', 'material'], 'properties': {'kind': {'type': 'string', 'const': 'banqueta'}, 'depth': {'type': 'number', 'exclusiveMinimum': 0}, 'width': {'type': 'number', 'exclusiveMinimum': 0}, 'height': {'type': 'number', 'exclusiveMinimum': 0}, 'backrest': {'type': 'boolean'}, 'material': {'type': 'string'}, 'backrestAngle': {'type': 'number', 'maximum': 45, 'minimum': 0}, 'cushionThickness': {'type': 'number', 'minimum': 0}}, 'additionalProperties': False}, {'type': 'object', 'required': ['kind', 'width', 'height', 'depth', 'material'], 'properties': {'kind': {'type': 'string', 'const': 'espejo'}, 'depth': {'type': 'number', 'exclusiveMinimum': 0}, 'width': {'type': 'number', 'exclusiveMinimum': 0}, 'height': {'type': 'number', 'exclusiveMinimum': 0}, 'material': {'type': 'string'}}, 'additionalProperties': False}, {'type': 'object', 'required': ['kind', 'width', 'height', 'depth', 'lid', 'wheels', 'material'], 'properties': {'lid': {'enum': ['ninguna', 'fija', 'abisagrada'], 'type': 'string'}, 'kind': {'type': 'string', 'const': 'caja'}, 'legs': {'type': 'number', 'maximum': 900, 'minimum': 0}, 'depth': {'type': 'number', 'exclusiveMinimum': 0}, 'width': {'type': 'number', 'exclusiveMinimum': 0}, 'height': {'type': 'number', 'exclusiveMinimum': 0}, 'wheels': {'type': 'boolean'}, 'material': {'type': 'string'}}, 'additionalProperties': False}, {'type': 'object', 'required': ['kind', 'width', 'height', 'depth', 'material'], 'properties': {'kind': {'type': 'string', 'const': 'cortina'}, 'depth': {'type': 'number', 'exclusiveMinimum': 0}, 'width': {'type': 'number', 'exclusiveMinimum': 0}, 'height': {'type': 'number', 'exclusiveMinimum': 0}, 'material': {'type': 'string'}}, 'additionalProperties': False}, {'type': 'object', 'required': ['kind', 'width', 'height', 'depth', 'hojas', 'relleno', 'material'], 'properties': {'kind': {'type': 'string', 'const': 'biombo'}, 'depth': {'type': 'number', 'exclusiveMinimum': 0}, 'hojas': {'type': 'integer', 'maximum': 6, 'minimum': 2}, 'width': {'type': 'number', 'exclusiveMinimum': 0}, 'height': {'type': 'number', 'exclusiveMinimum': 0}, 'relleno': {'type': 'boolean'}, 'material': {'type': 'string'}}, 'additionalProperties': False}, {'type': 'object', 'required': ['kind', 'width', 'height', 'depth', 'slope', 'shelves', 'puerta', 'material'], 'properties': {'kind': {'type': 'string', 'const': 'invernadero'}, 'depth': {'type': 'number', 'exclusiveMinimum': 0}, 'slope': {'type': 'number', 'maximum': 45, 'minimum': 0}, 'width': {'type': 'number', 'exclusiveMinimum': 0}, 'height': {'type': 'number', 'exclusiveMinimum': 0}, 'puerta': {'type': 'boolean'}, 'shelves': {'type': 'integer', 'maximum': 9007199254740991, 'minimum': 0}, 'material': {'type': 'string'}}, 'additionalProperties': False}, {'type': 'object', 'required': ['kind', 'width', 'height', 'depth', 'material', 'backPanel', 'root'], 'properties': {'base': {'enum': ['zocalo', 'patas', 'ruedas'], 'type': 'string'}, 'kind': {'type': 'string', 'const': 'modular'}, 'root': {'anyOf': [{'type': 'object', 'required': ['content'], 'properties': {'led': {'type': 'boolean'}, 'door': {'enum': ['izq', 'der', 'doble', 'arriba', 'abajo', 'corrediza'], 'type': 'string'}, 'lock': {'enum': ['magnetica', 'llave'], 'type': 'string'}, 'push': {'type': 'boolean'}, 'content': {'oneOf': [{'type': 'object', 'required': ['c', 'n'], 'properties': {'c': {'type': 'string', 'const': 'estantes'}, 'n': {'type': 'integer', 'maximum': 12, 'minimum': 1}}, 'additionalProperties': False}, {'type': 'object', 'required': ['c', 'n'], 'properties': {'c': {'type': 'string', 'const': 'cajones'}, 'n': {'type': 'integer', 'maximum': 8, 'minimum': 1}, 'lock': {'enum': ['magnetica', 'llave'], 'type': 'string'}, 'push': {'type': 'boolean'}}, 'additionalProperties': False}, {'type': 'object', 'required': ['c'], 'properties': {'c': {'type': 'string', 'const': 'cajonSecreto'}}, 'additionalProperties': False}, {'type': 'object', 'required': ['c'], 'properties': {'c': {'type': 'string', 'const': 'barral'}}, 'additionalProperties': False}, {'type': 'object', 'required': ['c'], 'properties': {'c': {'type': 'string', 'const': 'botellero'}}, 'additionalProperties': False}, {'type': 'object', 'required': ['c', 'n'], 'properties': {'c': {'type': 'string', 'const': 'zapatero'}, 'n': {'type': 'integer', 'maximum': 5, 'minimum': 1}}, 'additionalProperties': False}, {'type': 'object', 'required': ['c', 'n'], 'properties': {'c': {'type': 'string', 'const': 'vidrio'}, 'n': {'type': 'integer', 'maximum': 8, 'minimum': 1}}, 'additionalProperties': False}, {'type': 'object', 'required': ['c', 'n'], 'properties': {'c': {'type': 'string', 'const': 'bandeja'}, 'n': {'type': 'integer', 'maximum': 6, 'minimum': 1}}, 'additionalProperties': False}, {'type': 'object', 'required': ['c', 'n'], 'properties': {'c': {'type': 'string', 'const': 'ranurado'}, 'n': {'type': 'integer', 'maximum': 30, 'minimum': 3}}, 'additionalProperties': False}, {'type': 'object', 'required': ['c'], 'properties': {'c': {'type': 'string', 'const': 'hueco'}}, 'additionalProperties': False}, {'type': 'object', 'required': ['c'], 'properties': {'c': {'type': 'string', 'const': 'vacio'}}, 'additionalProperties': False}]}}, 'additionalProperties': False}, {'$ref': '#/definitions/__schema0'}]}, 'depth': {'type': 'number', 'exclusiveMinimum': 0}, 'width': {'type': 'number', 'exclusiveMinimum': 0}, 'height': {'type': 'number', 'exclusiveMinimum': 0}, 'colgado': {'type': 'boolean'}, 'overlay': {'type': 'boolean'}, 'material': {'type': 'string'}, 'backPanel': {'type': 'boolean'}, 'enCuerpos': {'type': 'boolean'}, 'softClose': {'type': 'boolean'}, 'glassDoors': {'type': 'boolean'}, 'slidingDoor': {'enum': ['full', 'per-column'], 'type': 'string'}, 'techoPasante': {'type': 'boolean'}, 'frontMaterial': {'type': 'string'}}, 'additionalProperties': False}], 'description': "Params a medida (alternativa a 'preset'). Para un mueble modular con el motor recursivo, kind='modular' + un árbol 'root'. El árbol: un nodo es un SPLIT {s:'V'|'H', ch:[{f,node},...]} o una HOJA {content:{c,...}, door?}. s='V' parte en columnas (izqâ\x86\x92der); s='H' parte en filas (ABAJOâ\x86\x92ARRIBA). f = peso relativo del hijo. content.c â\x88\x88 estantes{n}, cajones{n}, barral, zapatero{n}, vidrio{n}, bandeja{n}, botellero, vacio, o 'hueco' para el lugar de un electrodoméstico o de las piernas (si llega al piso, esa celda va sin piso, sin fondo y sin zócalo). door â\x88\x88 izq/der/doble/arriba/abajo/corrediza. material p.ej. 'mdf-18mm-blanco'. Ej. cómoda 80cm con puerta arriba y 2 cajones abajo: {kind:'modular',width:800,height:900,depth:450,material:'mdf-18mm-blanco',backPanel:true,base:'zocalo',root:{s:'H',ch:[{f:1,node:{content:{c:'cajones',n:2}}},{f:1,node:{content:{c:'estantes',n:2},door:'der'}}]}}. El mueble puede dejar de ser una caja: 'enCuerpos: true' lo arma en cuerpos separados (uno por columna, cada uno con sus laterales, para poder llevarlo), y cada hijo del corte de la RAÃ\x8dZ acepta 'alto' y 'prof' propios (mm) y pasa a ser un CUERPO aparte â\x80\x94bajo escalera, escritorio con alzada, bajo mesada con torreâ\x80\x94, alineados por atrás. Y 'colgado: true' (en el mueble o en un cuerpo) lo manda a la pared: el kit trae colgadores y riel en vez de patas. El schema enumera todos los campos por kind. Modular: frontMaterial (mismo espesor que material), softClose, base, colgado, enCuerpos, slidingDoor, glassDoors, overlay y techoPasante (techo al ancho total sobre los laterales; también en shelf y wardrobe). root admite cortes V/H anidados; cada hijo tiene f y, si genera cuerpo, alto/prof/colgado. En cortes H el alto se reparte con f, no con alto. height y depth deben abarcar todos los cuerpos. Cada hoja admite door, lock, push y led; content.c incluye cajonSecreto y cajones con content.lock/content.push. Shelf: shelves:0 deja solo carcasa; openFrame usa bastidor sin fondo. Cama: headboard modular, headboardShelves, drawersPerSide, bunk, bunkHeight, bunkLadderSide, mattressThickness, baseHeight. Sofá/banqueta: seatHeight (sofá), backrestAngle y cushionThickness. Otros tipos exponen sus opciones en el schema. Los avisos explican qué opción se recortó o no se aplicó y cómo corregirla."}, 'preset': {'type': 'string', 'description': "ID del preset del mueble a construir. Requerido si no se pasa 'params'. Ejemplos: 'placard-corredizo', 'biblioteca', 'escritorio-cajonera', 'comoda', 'bajo-mesada'. Usá listar_presets para ver todos los ids disponibles."}, 'salida': {'anyOf': [{'enum': ['despiece', 'imagen', 'modelo3d', 'visor'], 'type': 'string'}, {'type': 'array', 'items': {'enum': ['despiece', 'imagen', 'modelo3d', 'visor'], 'type': 'string'}, 'minItems': 1}], 'description': "Qué devolver (uno o varios): un string o una lista. 'despiece' = piezas+cotización+factibilidad (texto). 'imagen' = vista 2D frente/lateral/planta (SVG). 'modelo3d' = el modelo 3D GLB embebido para renderizar. 'visor' = link al editor 3D en el sitio. Default: ['despiece']. El link al sitio se incluye SIEMPRE."}, 'ajustes': {'type': 'object', 'properties': {'alto_mm': {'type': 'number', 'exclusiveMinimum': 0}, 'ancho_mm': {'type': 'number', 'exclusiveMinimum': 0}, 'profundidad_mm': {'type': 'number', 'exclusiveMinimum': 0}}, 'description': 'Ajustes de medidas opcionales, en milÃ\xadmetros, sobre el preset O sobre los params que pases. Sólo los campos que querés sobreescribir. Ej: {ancho_mm: 2400}.', 'additionalProperties': False}}, 'definitions': {'__schema0': {'type': 'object', 'required': ['s', 'ch'], 'properties': {'s': {'enum': ['V', 'H'], 'type': 'string'}, 'ch': {'type': 'array', 'items': {'type': 'object', 'required': ['f', 'node'], 'properties': {'f': {'type': 'number', 'exclusiveMinimum': 0}, 'alto': {'type': 'number', 'maximum': 3000, 'minimum': 150}, 'node': {'anyOf': [{'type': 'object', 'required': ['content'], 'properties': {'led': {'type': 'boolean'}, 'door': {'enum': ['izq', 'der', 'doble', 'arriba', 'abajo', 'corrediza'], 'type': 'string'}, 'lock': {'enum': ['magnetica', 'llave'], 'type': 'string'}, 'push': {'type': 'boolean'}, 'content': {'oneOf': [{'type': 'object', 'required': ['c', 'n'], 'properties': {'c': {'type': 'string', 'const': 'estantes'}, 'n': {'type': 'integer', 'maximum': 12, 'minimum': 1}}, 'additionalProperties': False}, {'type': 'object', 'required': ['c', 'n'], 'properties': {'c': {'type': 'string', 'const': 'cajones'}, 'n': {'type': 'integer', 'maximum': 8, 'minimum': 1}, 'lock': {'enum': ['magnetica', 'llave'], 'type': 'string'}, 'push': {'type': 'boolean'}}, 'additionalProperties': False}, {'type': 'object', 'required': ['c'], 'properties': {'c': {'type': 'string', 'const': 'cajonSecreto'}}, 'additionalProperties': False}, {'type': 'object', 'required': ['c'], 'properties': {'c': {'type': 'string', 'const': 'barral'}}, 'additionalProperties': False}, {'type': 'object', 'required': ['c'], 'properties': {'c': {'type': 'string', 'const': 'botellero'}}, 'additionalProperties': False}, {'type': 'object', 'required': ['c', 'n'], 'properties': {'c': {'type': 'string', 'const': 'zapatero'}, 'n': {'type': 'integer', 'maximum': 5, 'minimum': 1}}, 'additionalProperties': False}, {'type': 'object', 'required': ['c', 'n'], 'properties': {'c': {'type': 'string', 'const': 'vidrio'}, 'n': {'type': 'integer', 'maximum': 8, 'minimum': 1}}, 'additionalProperties': False}, {'type': 'object', 'required': ['c', 'n'], 'properties': {'c': {'type': 'string', 'const': 'bandeja'}, 'n': {'type': 'integer', 'maximum': 6, 'minimum': 1}}, 'additionalProperties': False}, {'type': 'object', 'required': ['c', 'n'], 'properties': {'c': {'type': 'string', 'const': 'ranurado'}, 'n': {'type': 'integer', 'maximum': 30, 'minimum': 3}}, 'additionalProperties': False}, {'type': 'object', 'required': ['c'], 'properties': {'c': {'type': 'string', 'const': 'hueco'}}, 'additionalProperties': False}, {'type': 'object', 'required': ['c'], 'properties': {'c': {'type': 'string', 'const': 'vacio'}}, 'additionalProperties': False}]}}, 'additionalProperties': False}, {'$ref': '#/definitions/__schema0'}]}, 'prof': {'type': 'number', 'maximum': 1200, 'minimum': 80}, 'colgado': {'type': 'boolean'}}, 'additionalProperties': False}, 'maxItems': 8, 'minItems': 2}, 'door': {'enum': ['izq', 'der', 'doble', 'arriba', 'abajo', 'corrediza'], 'type': 'string'}, 'lock': {'enum': ['magnetica', 'llave'], 'type': 'string'}, 'push': {'type': 'boolean'}}, 'additionalProperties': False}}}
输出模式
{'type': 'object', '$schema': 'http://json-schema.org/draft-07/schema#', 'required': ['mueble', 'medidas_mm', 'salida_incluida', 'editor_url', 'modelo_url', 'nota'], 'properties': {'nota': {'type': 'string'}, 'mueble': {'type': 'string'}, 'cotizacion': {'type': 'object', 'required': ['total_ars', 'total_formateado', 'piezas'], 'properties': {'piezas': {'type': 'number'}, 'total_ars': {'type': 'number'}, 'total_formateado': {'type': 'string'}}, 'additionalProperties': False}, 'editor_url': {'type': 'string'}, 'medidas_mm': {'type': 'object', 'required': ['ancho', 'alto', 'profundidad'], 'properties': {'alto': {'type': 'number'}, 'ancho': {'type': 'number'}, 'profundidad': {'type': 'number'}}, 'additionalProperties': False}, 'modelo_url': {'type': 'string'}, 'factibilidad': {'type': 'object', 'required': ['factible', 'warnings', 'nota'], 'properties': {'nota': {'type': 'string'}, 'factible': {'type': 'boolean'}, 'warnings': {'type': 'array', 'items': {'type': 'object', 'required': ['tipo', 'severidad', 'mensaje'], 'properties': {'tipo': {'type': 'string'}, 'mensaje': {'type': 'string'}, 'severidad': {'type': 'string'}}, 'additionalProperties': False}}, 'editor_url': {'type': 'string'}}, 'additionalProperties': False}, 'salida_incluida': {'type': 'array', 'items': {'type': 'string'}}}, 'additionalProperties': False}
输入模式
{'type': 'object', '$schema': 'http://json-schema.org/draft-07/schema#', 'properties': {'params': {'oneOf': [{'type': 'object', 'required': ['kind', 'width', 'height', 'depth', 'shelves', 'backPanel', 'material'], 'properties': {'kind': {'type': 'string', 'const': 'shelf'}, 'depth': {'type': 'number', 'exclusiveMinimum': 0}, 'width': {'type': 'number', 'exclusiveMinimum': 0}, 'height': {'type': 'number', 'exclusiveMinimum': 0}, 'shelves': {'type': 'integer', 'maximum': 9007199254740991, 'minimum': 0}, 'material': {'type': 'string'}, 'backPanel': {'type': 'boolean'}, 'openFrame': {'type': 'boolean'}, 'techoPasante': {'type': 'boolean'}}, 'additionalProperties': False}, {'type': 'object', 'required': ['kind', 'width', 'height', 'depth', 'drawers', 'material'], 'properties': {'kind': {'type': 'string', 'const': 'desk'}, 'depth': {'type': 'number', 'exclusiveMinimum': 0}, 'width': {'type': 'number', 'exclusiveMinimum': 0}, 'height': {'type': 'number', 'exclusiveMinimum': 0}, 'drawers': {'type': 'integer', 'maximum': 9007199254740991, 'minimum': 0}, 'material': {'type': 'string'}}, 'additionalProperties': False}, {'type': 'object', 'required': ['kind', 'width', 'height', 'depth', 'doors', 'rod', 'material'], 'properties': {'rod': {'type': 'boolean'}, 'kind': {'type': 'string', 'const': 'wardrobe'}, 'depth': {'type': 'number', 'exclusiveMinimum': 0}, 'doors': {'type': 'integer', 'maximum': 9007199254740991, 'minimum': 0}, 'width': {'type': 'number', 'exclusiveMinimum': 0}, 'height': {'type': 'number', 'exclusiveMinimum': 0}, 'material': {'type': 'string'}, 'techoPasante': {'type': 'boolean'}}, 'additionalProperties': False}, {'type': 'object', 'required': ['kind', 'width', 'depth', 'height', 'rafters', 'postSize', 'slope', 'material'], 'properties': {'kind': {'type': 'string', 'const': 'pergola'}, 'depth': {'type': 'number', 'exclusiveMinimum': 0}, 'slope': {'type': 'number', 'maximum': 45, 'minimum': 0}, 'width': {'type': 'number', 'exclusiveMinimum': 0}, 'height': {'type': 'number', 'exclusiveMinimum': 0}, 'rafters': {'type': 'integer', 'maximum': 9007199254740991, 'minimum': 1}, 'material': {'type': 'string'}, 'postSize': {'type': 'number', 'exclusiveMinimum': 0}}, 'additionalProperties': False}, {'type': 'object', 'required': ['kind', 'width', 'depth', 'boardWidth', 'gap', 'joists', 'material'], 'properties': {'gap': {'type': 'number', 'minimum': 0}, 'kind': {'type': 'string', 'const': 'deck'}, 'depth': {'type': 'number', 'exclusiveMinimum': 0}, 'width': {'type': 'number', 'exclusiveMinimum': 0}, 'joists': {'type': 'integer', 'maximum': 9007199254740991, 'minimum': 1}, 'material': {'type': 'string'}, 'boardWidth': {'type': 'number', 'exclusiveMinimum': 0}}, 'additionalProperties': False}, {'type': 'object', 'required': ['kind', 'width', 'height', 'depth', 'legSize', 'material'], 'properties': {'kind': {'type': 'string', 'const': 'table'}, 'depth': {'type': 'number', 'exclusiveMinimum': 0}, 'width': {'type': 'number', 'exclusiveMinimum': 0}, 'height': {'type': 'number', 'exclusiveMinimum': 0}, 'legSize': {'type': 'number', 'exclusiveMinimum': 0}, 'material': {'type': 'string'}}, 'additionalProperties': False}, {'type': 'object', 'required': ['kind', 'width', 'height', 'depth', 'tabletopDepth', 'seatHeight', 'material'], 'properties': {'kind': {'type': 'string', 'const': 'picnic'}, 'depth': {'type': 'number', 'exclusiveMinimum': 0}, 'width': {'type': 'number', 'exclusiveMinimum': 0}, 'height': {'type': 'number', 'exclusiveMinimum': 0}, 'material': {'type': 'string'}, 'seatHeight': {'type': 'number', 'exclusiveMinimum': 0}, 'tabletopDepth': {'type': 'number', 'exclusiveMinimum': 0}}, 'additionalProperties': False}, {'type': 'object', 'required': ['kind', 'width', 'height', 'depth', 'storage', 'material'], 'properties': {'bunk': {'type': 'boolean'}, 'kind': {'type': 'string', 'const': 'cama'}, 'depth': {'type': 'number', 'exclusiveMinimum': 0}, 'width': {'type': 'number', 'exclusiveMinimum': 0}, 'height': {'type': 'number', 'exclusiveMinimum': 0}, 'storage': {'type': 'boolean'}, 'material': {'type': 'string'}, 'headboard': {'type': 'object', 'required': ['kind', 'width', 'height', 'depth', 'material', 'backPanel', 'root'], 'properties': {'base': {'enum': ['zocalo', 'patas', 'ruedas'], 'type': 'string'}, 'kind': {'type': 'string', 'const': 'modular'}, 'root': {'anyOf': [{'type': 'object', 'required': ['content'], 'properties': {'led': {'type': 'boolean'}, 'door': {'enum': ['izq', 'der', 'doble', 'arriba', 'abajo', 'corrediza'], 'type': 'string'}, 'lock': {'enum': ['magnetica', 'llave'], 'type': 'string'}, 'push': {'type': 'boolean'}, 'content': {'oneOf': [{'type': 'object', 'required': ['c', 'n'], 'properties': {'c': {'type': 'string', 'const': 'estantes'}, 'n': {'type': 'integer', 'maximum': 12, 'minimum': 1}}, 'additionalProperties': False}, {'type': 'object', 'required': ['c', 'n'], 'properties': {'c': {'type': 'string', 'const': 'cajones'}, 'n': {'type': 'integer', 'maximum': 8, 'minimum': 1}, 'lock': {'enum': ['magnetica', 'llave'], 'type': 'string'}, 'push': {'type': 'boolean'}}, 'additionalProperties': False}, {'type': 'object', 'required': ['c'], 'properties': {'c': {'type': 'string', 'const': 'cajonSecreto'}}, 'additionalProperties': False}, {'type': 'object', 'required': ['c'], 'properties': {'c': {'type': 'string', 'const': 'barral'}}, 'additionalProperties': False}, {'type': 'object', 'required': ['c'], 'properties': {'c': {'type': 'string', 'const': 'botellero'}}, 'additionalProperties': False}, {'type': 'object', 'required': ['c', 'n'], 'properties': {'c': {'type': 'string', 'const': 'zapatero'}, 'n': {'type': 'integer', 'maximum': 5, 'minimum': 1}}, 'additionalProperties': False}, {'type': 'object', 'required': ['c', 'n'], 'properties': {'c': {'type': 'string', 'const': 'vidrio'}, 'n': {'type': 'integer', 'maximum': 8, 'minimum': 1}}, 'additionalProperties': False}, {'type': 'object', 'required': ['c', 'n'], 'properties': {'c': {'type': 'string', 'const': 'bandeja'}, 'n': {'type': 'integer', 'maximum': 6, 'minimum': 1}}, 'additionalProperties': False}, {'type': 'object', 'required': ['c', 'n'], 'properties': {'c': {'type': 'string', 'const': 'ranurado'}, 'n': {'type': 'integer', 'maximum': 30, 'minimum': 3}}, 'additionalProperties': False}, {'type': 'object', 'required': ['c'], 'properties': {'c': {'type': 'string', 'const': 'hueco'}}, 'additionalProperties': False}, {'type': 'object', 'required': ['c'], 'properties': {'c': {'type': 'string', 'const': 'vacio'}}, 'additionalProperties': False}]}}, 'additionalProperties': False}, {'$ref': '#/definitions/__schema0'}]}, 'depth': {'type': 'number', 'exclusiveMinimum': 0}, 'width': {'type': 'number', 'exclusiveMinimum': 0}, 'height': {'type': 'number', 'exclusiveMinimum': 0}, 'colgado': {'type': 'boolean'}, 'overlay': {'type': 'boolean'}, 'material': {'type': 'string'}, 'backPanel': {'type': 'boolean'}, 'enCuerpos': {'type': 'boolean'}, 'softClose': {'type': 'boolean'}, 'glassDoors': {'type': 'boolean'}, 'slidingDoor': {'enum': ['full', 'per-column'], 'type': 'string'}, 'techoPasante': {'type': 'boolean'}, 'frontMaterial': {'type': 'string'}}, 'additionalProperties': False}, 'baseHeight': {'type': 'number', 'exclusiveMinimum': 0}, 'bunkHeight': {'type': 'number', 'maximum': 1600, 'minimum': 900}, 'bunkLadderSide': {'enum': ['izq', 'der'], 'type': 'string'}, 'drawersPerSide': {'type': 'integer', 'maximum': 4, 'minimum': 0}, 'headboardShelves': {'type': 'integer', 'maximum': 6, 'minimum': 0}, 'mattressThickness': {'type': 'number', 'exclusiveMinimum': 0}}, 'additionalProperties': False}, {'type': 'object', 'required': ['kind', 'width', 'height', 'depth', 'arms', 'material'], 'properties': {'arms': {'type': 'boolean'}, 'kind': {'type': 'string', 'const': 'sofa'}, 'depth': {'type': 'number', 'exclusiveMinimum': 0}, 'width': {'type': 'number', 'exclusiveMinimum': 0}, 'height': {'type': 'number', 'exclusiveMinimum': 0}, 'material': {'type': 'string'}, 'seatHeight': {'type': 'number', 'exclusiveMinimum': 0}, 'backrestAngle': {'type': 'number', 'maximum': 45, 'minimum': 0}, 'cushionThickness': {'type': 'number', 'minimum': 0}}, 'additionalProperties': False}, {'type': 'object', 'required': ['kind', 'width', 'height', 'depth', 'backrest', 'material'], 'properties': {'kind': {'type': 'string', 'const': 'banqueta'}, 'depth': {'type': 'number', 'exclusiveMinimum': 0}, 'width': {'type': 'number', 'exclusiveMinimum': 0}, 'height': {'type': 'number', 'exclusiveMinimum': 0}, 'backrest': {'type': 'boolean'}, 'material': {'type': 'string'}, 'backrestAngle': {'type': 'number', 'maximum': 45, 'minimum': 0}, 'cushionThickness': {'type': 'number', 'minimum': 0}}, 'additionalProperties': False}, {'type': 'object', 'required': ['kind', 'width', 'height', 'depth', 'material'], 'properties': {'kind': {'type': 'string', 'const': 'espejo'}, 'depth': {'type': 'number', 'exclusiveMinimum': 0}, 'width': {'type': 'number', 'exclusiveMinimum': 0}, 'height': {'type': 'number', 'exclusiveMinimum': 0}, 'material': {'type': 'string'}}, 'additionalProperties': False}, {'type': 'object', 'required': ['kind', 'width', 'height', 'depth', 'lid', 'wheels', 'material'], 'properties': {'lid': {'enum': ['ninguna', 'fija', 'abisagrada'], 'type': 'string'}, 'kind': {'type': 'string', 'const': 'caja'}, 'legs': {'type': 'number', 'maximum': 900, 'minimum': 0}, 'depth': {'type': 'number', 'exclusiveMinimum': 0}, 'width': {'type': 'number', 'exclusiveMinimum': 0}, 'height': {'type': 'number', 'exclusiveMinimum': 0}, 'wheels': {'type': 'boolean'}, 'material': {'type': 'string'}}, 'additionalProperties': False}, {'type': 'object', 'required': ['kind', 'width', 'height', 'depth', 'material'], 'properties': {'kind': {'type': 'string', 'const': 'cortina'}, 'depth': {'type': 'number', 'exclusiveMinimum': 0}, 'width': {'type': 'number', 'exclusiveMinimum': 0}, 'height': {'type': 'number', 'exclusiveMinimum': 0}, 'material': {'type': 'string'}}, 'additionalProperties': False}, {'type': 'object', 'required': ['kind', 'width', 'height', 'depth', 'hojas', 'relleno', 'material'], 'properties': {'kind': {'type': 'string', 'const': 'biombo'}, 'depth': {'type': 'number', 'exclusiveMinimum': 0}, 'hojas': {'type': 'integer', 'maximum': 6, 'minimum': 2}, 'width': {'type': 'number', 'exclusiveMinimum': 0}, 'height': {'type': 'number', 'exclusiveMinimum': 0}, 'relleno': {'type': 'boolean'}, 'material': {'type': 'string'}}, 'additionalProperties': False}, {'type': 'object', 'required': ['kind', 'width', 'height', 'depth', 'slope', 'shelves', 'puerta', 'material'], 'properties': {'kind': {'type': 'string', 'const': 'invernadero'}, 'depth': {'type': 'number', 'exclusiveMinimum': 0}, 'slope': {'type': 'number', 'maximum': 45, 'minimum': 0}, 'width': {'type': 'number', 'exclusiveMinimum': 0}, 'height': {'type': 'number', 'exclusiveMinimum': 0}, 'puerta': {'type': 'boolean'}, 'shelves': {'type': 'integer', 'maximum': 9007199254740991, 'minimum': 0}, 'material': {'type': 'string'}}, 'additionalProperties': False}, {'type': 'object', 'required': ['kind', 'width', 'height', 'depth', 'material', 'backPanel', 'root'], 'properties': {'base': {'enum': ['zocalo', 'patas', 'ruedas'], 'type': 'string'}, 'kind': {'type': 'string', 'const': 'modular'}, 'root': {'anyOf': [{'type': 'object', 'required': ['content'], 'properties': {'led': {'type': 'boolean'}, 'door': {'enum': ['izq', 'der', 'doble', 'arriba', 'abajo', 'corrediza'], 'type': 'string'}, 'lock': {'enum': ['magnetica', 'llave'], 'type': 'string'}, 'push': {'type': 'boolean'}, 'content': {'oneOf': [{'type': 'object', 'required': ['c', 'n'], 'properties': {'c': {'type': 'string', 'const': 'estantes'}, 'n': {'type': 'integer', 'maximum': 12, 'minimum': 1}}, 'additionalProperties': False}, {'type': 'object', 'required': ['c', 'n'], 'properties': {'c': {'type': 'string', 'const': 'cajones'}, 'n': {'type': 'integer', 'maximum': 8, 'minimum': 1}, 'lock': {'enum': ['magnetica', 'llave'], 'type': 'string'}, 'push': {'type': 'boolean'}}, 'additionalProperties': False}, {'type': 'object', 'required': ['c'], 'properties': {'c': {'type': 'string', 'const': 'cajonSecreto'}}, 'additionalProperties': False}, {'type': 'object', 'required': ['c'], 'properties': {'c': {'type': 'string', 'const': 'barral'}}, 'additionalProperties': False}, {'type': 'object', 'required': ['c'], 'properties': {'c': {'type': 'string', 'const': 'botellero'}}, 'additionalProperties': False}, {'type': 'object', 'required': ['c', 'n'], 'properties': {'c': {'type': 'string', 'const': 'zapatero'}, 'n': {'type': 'integer', 'maximum': 5, 'minimum': 1}}, 'additionalProperties': False}, {'type': 'object', 'required': ['c', 'n'], 'properties': {'c': {'type': 'string', 'const': 'vidrio'}, 'n': {'type': 'integer', 'maximum': 8, 'minimum': 1}}, 'additionalProperties': False}, {'type': 'object', 'required': ['c', 'n'], 'properties': {'c': {'type': 'string', 'const': 'bandeja'}, 'n': {'type': 'integer', 'maximum': 6, 'minimum': 1}}, 'additionalProperties': False}, {'type': 'object', 'required': ['c', 'n'], 'properties': {'c': {'type': 'string', 'const': 'ranurado'}, 'n': {'type': 'integer', 'maximum': 30, 'minimum': 3}}, 'additionalProperties': False}, {'type': 'object', 'required': ['c'], 'properties': {'c': {'type': 'string', 'const': 'hueco'}}, 'additionalProperties': False}, {'type': 'object', 'required': ['c'], 'properties': {'c': {'type': 'string', 'const': 'vacio'}}, 'additionalProperties': False}]}}, 'additionalProperties': False}, {'$ref': '#/definitions/__schema0'}]}, 'depth': {'type': 'number', 'exclusiveMinimum': 0}, 'width': {'type': 'number', 'exclusiveMinimum': 0}, 'height': {'type': 'number', 'exclusiveMinimum': 0}, 'colgado': {'type': 'boolean'}, 'overlay': {'type': 'boolean'}, 'material': {'type': 'string'}, 'backPanel': {'type': 'boolean'}, 'enCuerpos': {'type': 'boolean'}, 'softClose': {'type': 'boolean'}, 'glassDoors': {'type': 'boolean'}, 'slidingDoor': {'enum': ['full', 'per-column'], 'type': 'string'}, 'techoPasante': {'type': 'boolean'}, 'frontMaterial': {'type': 'string'}}, 'additionalProperties': False}], 'description': "Params paramétricos completos del mueble (alternativa a 'preset'). Requerido si no se pasa 'preset'. Debe incluir kind, material y las medidas y opciones requeridas por ese kind; deck no lleva height. El schema enumera todos los campos por kind. Modular: frontMaterial (mismo espesor que material), softClose, base, colgado, enCuerpos, slidingDoor, glassDoors, overlay y techoPasante (techo al ancho total sobre los laterales; también en shelf y wardrobe). root admite cortes V/H anidados; cada hijo tiene f y, si genera cuerpo, alto/prof/colgado. En cortes H el alto se reparte con f, no con alto. height y depth deben abarcar todos los cuerpos. Cada hoja admite door, lock, push y led; content.c incluye cajonSecreto y cajones con content.lock/content.push. Shelf: shelves:0 deja solo carcasa; openFrame usa bastidor sin fondo. Cama: headboard modular, headboardShelves, drawersPerSide, bunk, bunkHeight, bunkLadderSide, mattressThickness, baseHeight. Sofá/banqueta: seatHeight (sofá), backrestAngle y cushionThickness. Otros tipos exponen sus opciones en el schema. Los avisos explican qué opción se recortó o no se aplicó y cómo corregirla."}, 'preset': {'type': 'string', 'description': "ID del preset del mueble a cotizar. Requerido si no se pasa 'params'. Ejemplos: 'placard-corredizo', 'biblioteca', 'escritorio-cajonera', 'comoda', 'bajo-mesada'. Usá listar_presets para ver todos los ids disponibles."}, 'ajustes': {'type': 'object', 'properties': {'alto_mm': {'type': 'number', 'exclusiveMinimum': 0}, 'ancho_mm': {'type': 'number', 'exclusiveMinimum': 0}, 'profundidad_mm': {'type': 'number', 'exclusiveMinimum': 0}}, 'description': 'Ajustes de medidas opcionales, en milÃ\xadmetros, sobre el preset O sobre los params que pases. Sólo los campos que querés sobreescribir. Ej: {ancho_mm: 2400}.', 'additionalProperties': False}}, 'definitions': {'__schema0': {'type': 'object', 'required': ['s', 'ch'], 'properties': {'s': {'enum': ['V', 'H'], 'type': 'string'}, 'ch': {'type': 'array', 'items': {'type': 'object', 'required': ['f', 'node'], 'properties': {'f': {'type': 'number', 'exclusiveMinimum': 0}, 'alto': {'type': 'number', 'maximum': 3000, 'minimum': 150}, 'node': {'anyOf': [{'type': 'object', 'required': ['content'], 'properties': {'led': {'type': 'boolean'}, 'door': {'enum': ['izq', 'der', 'doble', 'arriba', 'abajo', 'corrediza'], 'type': 'string'}, 'lock': {'enum': ['magnetica', 'llave'], 'type': 'string'}, 'push': {'type': 'boolean'}, 'content': {'oneOf': [{'type': 'object', 'required': ['c', 'n'], 'properties': {'c': {'type': 'string', 'const': 'estantes'}, 'n': {'type': 'integer', 'maximum': 12, 'minimum': 1}}, 'additionalProperties': False}, {'type': 'object', 'required': ['c', 'n'], 'properties': {'c': {'type': 'string', 'const': 'cajones'}, 'n': {'type': 'integer', 'maximum': 8, 'minimum': 1}, 'lock': {'enum': ['magnetica', 'llave'], 'type': 'string'}, 'push': {'type': 'boolean'}}, 'additionalProperties': False}, {'type': 'object', 'required': ['c'], 'properties': {'c': {'type': 'string', 'const': 'cajonSecreto'}}, 'additionalProperties': False}, {'type': 'object', 'required': ['c'], 'properties': {'c': {'type': 'string', 'const': 'barral'}}, 'additionalProperties': False}, {'type': 'object', 'required': ['c'], 'properties': {'c': {'type': 'string', 'const': 'botellero'}}, 'additionalProperties': False}, {'type': 'object', 'required': ['c', 'n'], 'properties': {'c': {'type': 'string', 'const': 'zapatero'}, 'n': {'type': 'integer', 'maximum': 5, 'minimum': 1}}, 'additionalProperties': False}, {'type': 'object', 'required': ['c', 'n'], 'properties': {'c': {'type': 'string', 'const': 'vidrio'}, 'n': {'type': 'integer', 'maximum': 8, 'minimum': 1}}, 'additionalProperties': False}, {'type': 'object', 'required': ['c', 'n'], 'properties': {'c': {'type': 'string', 'const': 'bandeja'}, 'n': {'type': 'integer', 'maximum': 6, 'minimum': 1}}, 'additionalProperties': False}, {'type': 'object', 'required': ['c', 'n'], 'properties': {'c': {'type': 'string', 'const': 'ranurado'}, 'n': {'type': 'integer', 'maximum': 30, 'minimum': 3}}, 'additionalProperties': False}, {'type': 'object', 'required': ['c'], 'properties': {'c': {'type': 'string', 'const': 'hueco'}}, 'additionalProperties': False}, {'type': 'object', 'required': ['c'], 'properties': {'c': {'type': 'string', 'const': 'vacio'}}, 'additionalProperties': False}]}}, 'additionalProperties': False}, {'$ref': '#/definitions/__schema0'}]}, 'prof': {'type': 'number', 'maximum': 1200, 'minimum': 80}, 'colgado': {'type': 'boolean'}}, 'additionalProperties': False}, 'maxItems': 8, 'minItems': 2}, 'door': {'enum': ['izq', 'der', 'doble', 'arriba', 'abajo', 'corrediza'], 'type': 'string'}, 'lock': {'enum': ['magnetica', 'llave'], 'type': 'string'}, 'push': {'type': 'boolean'}}, 'additionalProperties': False}}}
输出模式
{'type': 'object', '$schema': 'http://json-schema.org/draft-07/schema#', 'required': ['mueble', 'medidas_mm', 'lineas', 'total_ars', 'total_formateado', 'nota', 'editor_url'], 'properties': {'nota': {'type': 'string'}, 'lineas': {'type': 'array', 'items': {'type': 'object', 'required': ['concepto', 'cantidad'], 'properties': {'cantidad': {'type': 'number'}, 'concepto': {'type': 'string'}, 'url_compra': {'type': 'string'}, 'subtotal_ars': {'type': 'number'}, 'precio_unitario_ars': {'type': 'number'}}, 'additionalProperties': False}}, 'mueble': {'type': 'string'}, 'total_ars': {'type': 'number'}, 'editor_url': {'type': 'string'}, 'medidas_mm': {'type': 'object', 'required': ['ancho', 'alto', 'profundidad'], 'properties': {'alto': {'type': 'number'}, 'ancho': {'type': 'number'}, 'profundidad': {'type': 'number'}}, 'additionalProperties': False}, 'total_formateado': {'type': 'string'}}, 'additionalProperties': False}
输入模式
{'type': 'object', '$schema': 'http://json-schema.org/draft-07/schema#', 'required': ['muebles'], 'properties': {'espacio': {'type': 'object', 'required': ['ancho_mm', 'profundidad_mm'], 'properties': {'ancho_mm': {'type': 'number', 'description': 'Ancho del espacio/habitación en milÃ\xadmetros. Ej: 3500 para 3.50 m.', 'exclusiveMinimum': 0}, 'profundidad_mm': {'type': 'number', 'description': 'Profundidad del espacio/habitación en milÃ\xadmetros. Ej: 4000 para 4.00 m.', 'exclusiveMinimum': 0}}, 'description': 'Dimensiones del espacio: {ancho_mm: 3500, profundidad_mm: 4000}, ambas requeridas, en mm. Si se omite, el espacio se calcula automáticamente.', 'additionalProperties': False}, 'muebles': {'type': 'array', 'items': {'type': 'object', 'properties': {'params': {'oneOf': [{'type': 'object', 'required': ['kind', 'width', 'height', 'depth', 'shelves', 'backPanel', 'material'], 'properties': {'kind': {'type': 'string', 'const': 'shelf'}, 'depth': {'type': 'number', 'exclusiveMinimum': 0}, 'width': {'type': 'number', 'exclusiveMinimum': 0}, 'height': {'type': 'number', 'exclusiveMinimum': 0}, 'shelves': {'type': 'integer', 'maximum': 9007199254740991, 'minimum': 0}, 'material': {'type': 'string'}, 'backPanel': {'type': 'boolean'}, 'openFrame': {'type': 'boolean'}, 'techoPasante': {'type': 'boolean'}}, 'additionalProperties': False}, {'type': 'object', 'required': ['kind', 'width', 'height', 'depth', 'drawers', 'material'], 'properties': {'kind': {'type': 'string', 'const': 'desk'}, 'depth': {'type': 'number', 'exclusiveMinimum': 0}, 'width': {'type': 'number', 'exclusiveMinimum': 0}, 'height': {'type': 'number', 'exclusiveMinimum': 0}, 'drawers': {'type': 'integer', 'maximum': 9007199254740991, 'minimum': 0}, 'material': {'type': 'string'}}, 'additionalProperties': False}, {'type': 'object', 'required': ['kind', 'width', 'height', 'depth', 'doors', 'rod', 'material'], 'properties': {'rod': {'type': 'boolean'}, 'kind': {'type': 'string', 'const': 'wardrobe'}, 'depth': {'type': 'number', 'exclusiveMinimum': 0}, 'doors': {'type': 'integer', 'maximum': 9007199254740991, 'minimum': 0}, 'width': {'type': 'number', 'exclusiveMinimum': 0}, 'height': {'type': 'number', 'exclusiveMinimum': 0}, 'material': {'type': 'string'}, 'techoPasante': {'type': 'boolean'}}, 'additionalProperties': False}, {'type': 'object', 'required': ['kind', 'width', 'depth', 'height', 'rafters', 'postSize', 'slope', 'material'], 'properties': {'kind': {'type': 'string', 'const': 'pergola'}, 'depth': {'type': 'number', 'exclusiveMinimum': 0}, 'slope': {'type': 'number', 'maximum': 45, 'minimum': 0}, 'width': {'type': 'number', 'exclusiveMinimum': 0}, 'height': {'type': 'number', 'exclusiveMinimum': 0}, 'rafters': {'type': 'integer', 'maximum': 9007199254740991, 'minimum': 1}, 'material': {'type': 'string'}, 'postSize': {'type': 'number', 'exclusiveMinimum': 0}}, 'additionalProperties': False}, {'type': 'object', 'required': ['kind', 'width', 'depth', 'boardWidth', 'gap', 'joists', 'material'], 'properties': {'gap': {'type': 'number', 'minimum': 0}, 'kind': {'type': 'string', 'const': 'deck'}, 'depth': {'type': 'number', 'exclusiveMinimum': 0}, 'width': {'type': 'number', 'exclusiveMinimum': 0}, 'joists': {'type': 'integer', 'maximum': 9007199254740991, 'minimum': 1}, 'material': {'type': 'string'}, 'boardWidth': {'type': 'number', 'exclusiveMinimum': 0}}, 'additionalProperties': False}, {'type': 'object', 'required': ['kind', 'width', 'height', 'depth', 'legSize', 'material'], 'properties': {'kind': {'type': 'string', 'const': 'table'}, 'depth': {'type': 'number', 'exclusiveMinimum': 0}, 'width': {'type': 'number', 'exclusiveMinimum': 0}, 'height': {'type': 'number', 'exclusiveMinimum': 0}, 'legSize': {'type': 'number', 'exclusiveMinimum': 0}, 'material': {'type': 'string'}}, 'additionalProperties': False}, {'type': 'object', 'required': ['kind', 'width', 'height', 'depth', 'tabletopDepth', 'seatHeight', 'material'], 'properties': {'kind': {'type': 'string', 'const': 'picnic'}, 'depth': {'type': 'number', 'exclusiveMinimum': 0}, 'width': {'type': 'number', 'exclusiveMinimum': 0}, 'height': {'type': 'number', 'exclusiveMinimum': 0}, 'material': {'type': 'string'}, 'seatHeight': {'type': 'number', 'exclusiveMinimum': 0}, 'tabletopDepth': {'type': 'number', 'exclusiveMinimum': 0}}, 'additionalProperties': False}, {'type': 'object', 'required': ['kind', 'width', 'height', 'depth', 'storage', 'material'], 'properties': {'bunk': {'type': 'boolean'}, 'kind': {'type': 'string', 'const': 'cama'}, 'depth': {'type': 'number', 'exclusiveMinimum': 0}, 'width': {'type': 'number', 'exclusiveMinimum': 0}, 'height': {'type': 'number', 'exclusiveMinimum': 0}, 'storage': {'type': 'boolean'}, 'material': {'type': 'string'}, 'headboard': {'type': 'object', 'required': ['kind', 'width', 'height', 'depth', 'material', 'backPanel', 'root'], 'properties': {'base': {'enum': ['zocalo', 'patas', 'ruedas'], 'type': 'string'}, 'kind': {'type': 'string', 'const': 'modular'}, 'root': {'anyOf': [{'type': 'object', 'required': ['content'], 'properties': {'led': {'type': 'boolean'}, 'door': {'enum': ['izq', 'der', 'doble', 'arriba', 'abajo', 'corrediza'], 'type': 'string'}, 'lock': {'enum': ['magnetica', 'llave'], 'type': 'string'}, 'push': {'type': 'boolean'}, 'content': {'oneOf': [{'type': 'object', 'required': ['c', 'n'], 'properties': {'c': {'type': 'string', 'const': 'estantes'}, 'n': {'type': 'integer', 'maximum': 12, 'minimum': 1}}, 'additionalProperties': False}, {'type': 'object', 'required': ['c', 'n'], 'properties': {'c': {'type': 'string', 'const': 'cajones'}, 'n': {'type': 'integer', 'maximum': 8, 'minimum': 1}, 'lock': {'enum': ['magnetica', 'llave'], 'type': 'string'}, 'push': {'type': 'boolean'}}, 'additionalProperties': False}, {'type': 'object', 'required': ['c'], 'properties': {'c': {'type': 'string', 'const': 'cajonSecreto'}}, 'additionalProperties': False}, {'type': 'object', 'required': ['c'], 'properties': {'c': {'type': 'string', 'const': 'barral'}}, 'additionalProperties': False}, {'type': 'object', 'required': ['c'], 'properties': {'c': {'type': 'string', 'const': 'botellero'}}, 'additionalProperties': False}, {'type': 'object', 'required': ['c', 'n'], 'properties': {'c': {'type': 'string', 'const': 'zapatero'}, 'n': {'type': 'integer', 'maximum': 5, 'minimum': 1}}, 'additionalProperties': False}, {'type': 'object', 'required': ['c', 'n'], 'properties': {'c': {'type': 'string', 'const': 'vidrio'}, 'n': {'type': 'integer', 'maximum': 8, 'minimum': 1}}, 'additionalProperties': False}, {'type': 'object', 'required': ['c', 'n'], 'properties': {'c': {'type': 'string', 'const': 'bandeja'}, 'n': {'type': 'integer', 'maximum': 6, 'minimum': 1}}, 'additionalProperties': False}, {'type': 'object', 'required': ['c', 'n'], 'properties': {'c': {'type': 'string', 'const': 'ranurado'}, 'n': {'type': 'integer', 'maximum': 30, 'minimum': 3}}, 'additionalProperties': False}, {'type': 'object', 'required': ['c'], 'properties': {'c': {'type': 'string', 'const': 'hueco'}}, 'additionalProperties': False}, {'type': 'object', 'required': ['c'], 'properties': {'c': {'type': 'string', 'const': 'vacio'}}, 'additionalProperties': False}]}}, 'additionalProperties': False}, {'$ref': '#/definitions/__schema0'}]}, 'depth': {'type': 'number', 'exclusiveMinimum': 0}, 'width': {'type': 'number', 'exclusiveMinimum': 0}, 'height': {'type': 'number', 'exclusiveMinimum': 0}, 'colgado': {'type': 'boolean'}, 'overlay': {'type': 'boolean'}, 'material': {'type': 'string'}, 'backPanel': {'type': 'boolean'}, 'enCuerpos': {'type': 'boolean'}, 'softClose': {'type': 'boolean'}, 'glassDoors': {'type': 'boolean'}, 'slidingDoor': {'enum': ['full', 'per-column'], 'type': 'string'}, 'techoPasante': {'type': 'boolean'}, 'frontMaterial': {'type': 'string'}}, 'additionalProperties': False}, 'baseHeight': {'type': 'number', 'exclusiveMinimum': 0}, 'bunkHeight': {'type': 'number', 'maximum': 1600, 'minimum': 900}, 'bunkLadderSide': {'enum': ['izq', 'der'], 'type': 'string'}, 'drawersPerSide': {'type': 'integer', 'maximum': 4, 'minimum': 0}, 'headboardShelves': {'type': 'integer', 'maximum': 6, 'minimum': 0}, 'mattressThickness': {'type': 'number', 'exclusiveMinimum': 0}}, 'additionalProperties': False}, {'type': 'object', 'required': ['kind', 'width', 'height', 'depth', 'arms', 'material'], 'properties': {'arms': {'type': 'boolean'}, 'kind': {'type': 'string', 'const': 'sofa'}, 'depth': {'type': 'number', 'exclusiveMinimum': 0}, 'width': {'type': 'number', 'exclusiveMinimum': 0}, 'height': {'type': 'number', 'exclusiveMinimum': 0}, 'material': {'type': 'string'}, 'seatHeight': {'type': 'number', 'exclusiveMinimum': 0}, 'backrestAngle': {'type': 'number', 'maximum': 45, 'minimum': 0}, 'cushionThickness': {'type': 'number', 'minimum': 0}}, 'additionalProperties': False}, {'type': 'object', 'required': ['kind', 'width', 'height', 'depth', 'backrest', 'material'], 'properties': {'kind': {'type': 'string', 'const': 'banqueta'}, 'depth': {'type': 'number', 'exclusiveMinimum': 0}, 'width': {'type': 'number', 'exclusiveMinimum': 0}, 'height': {'type': 'number', 'exclusiveMinimum': 0}, 'backrest': {'type': 'boolean'}, 'material': {'type': 'string'}, 'backrestAngle': {'type': 'number', 'maximum': 45, 'minimum': 0}, 'cushionThickness': {'type': 'number', 'minimum': 0}}, 'additionalProperties': False}, {'type': 'object', 'required': ['kind', 'width', 'height', 'depth', 'material'], 'properties': {'kind': {'type': 'string', 'const': 'espejo'}, 'depth': {'type': 'number', 'exclusiveMinimum': 0}, 'width': {'type': 'number', 'exclusiveMinimum': 0}, 'height': {'type': 'number', 'exclusiveMinimum': 0}, 'material': {'type': 'string'}}, 'additionalProperties': False}, {'type': 'object', 'required': ['kind', 'width', 'height', 'depth', 'lid', 'wheels', 'material'], 'properties': {'lid': {'enum': ['ninguna', 'fija', 'abisagrada'], 'type': 'string'}, 'kind': {'type': 'string', 'const': 'caja'}, 'legs': {'type': 'number', 'maximum': 900, 'minimum': 0}, 'depth': {'type': 'number', 'exclusiveMinimum': 0}, 'width': {'type': 'number', 'exclusiveMinimum': 0}, 'height': {'type': 'number', 'exclusiveMinimum': 0}, 'wheels': {'type': 'boolean'}, 'material': {'type': 'string'}}, 'additionalProperties': False}, {'type': 'object', 'required': ['kind', 'width', 'height', 'depth', 'material'], 'properties': {'kind': {'type': 'string', 'const': 'cortina'}, 'depth': {'type': 'number', 'exclusiveMinimum': 0}, 'width': {'type': 'number', 'exclusiveMinimum': 0}, 'height': {'type': 'number', 'exclusiveMinimum': 0}, 'material': {'type': 'string'}}, 'additionalProperties': False}, {'type': 'object', 'required': ['kind', 'width', 'height', 'depth', 'hojas', 'relleno', 'material'], 'properties': {'kind': {'type': 'string', 'const': 'biombo'}, 'depth': {'type': 'number', 'exclusiveMinimum': 0}, 'hojas': {'type': 'integer', 'maximum': 6, 'minimum': 2}, 'width': {'type': 'number', 'exclusiveMinimum': 0}, 'height': {'type': 'number', 'exclusiveMinimum': 0}, 'relleno': {'type': 'boolean'}, 'material': {'type': 'string'}}, 'additionalProperties': False}, {'type': 'object', 'required': ['kind', 'width', 'height', 'depth', 'slope', 'shelves', 'puerta', 'material'], 'properties': {'kind': {'type': 'string', 'const': 'invernadero'}, 'depth': {'type': 'number', 'exclusiveMinimum': 0}, 'slope': {'type': 'number', 'maximum': 45, 'minimum': 0}, 'width': {'type': 'number', 'exclusiveMinimum': 0}, 'height': {'type': 'number', 'exclusiveMinimum': 0}, 'puerta': {'type': 'boolean'}, 'shelves': {'type': 'integer', 'maximum': 9007199254740991, 'minimum': 0}, 'material': {'type': 'string'}}, 'additionalProperties': False}, {'type': 'object', 'required': ['kind', 'width', 'height', 'depth', 'material', 'backPanel', 'root'], 'properties': {'base': {'enum': ['zocalo', 'patas', 'ruedas'], 'type': 'string'}, 'kind': {'type': 'string', 'const': 'modular'}, 'root': {'anyOf': [{'type': 'object', 'required': ['content'], 'properties': {'led': {'type': 'boolean'}, 'door': {'enum': ['izq', 'der', 'doble', 'arriba', 'abajo', 'corrediza'], 'type': 'string'}, 'lock': {'enum': ['magnetica', 'llave'], 'type': 'string'}, 'push': {'type': 'boolean'}, 'content': {'oneOf': [{'type': 'object', 'required': ['c', 'n'], 'properties': {'c': {'type': 'string', 'const': 'estantes'}, 'n': {'type': 'integer', 'maximum': 12, 'minimum': 1}}, 'additionalProperties': False}, {'type': 'object', 'required': ['c', 'n'], 'properties': {'c': {'type': 'string', 'const': 'cajones'}, 'n': {'type': 'integer', 'maximum': 8, 'minimum': 1}, 'lock': {'enum': ['magnetica', 'llave'], 'type': 'string'}, 'push': {'type': 'boolean'}}, 'additionalProperties': False}, {'type': 'object', 'required': ['c'], 'properties': {'c': {'type': 'string', 'const': 'cajonSecreto'}}, 'additionalProperties': False}, {'type': 'object', 'required': ['c'], 'properties': {'c': {'type': 'string', 'const': 'barral'}}, 'additionalProperties': False}, {'type': 'object', 'required': ['c'], 'properties': {'c': {'type': 'string', 'const': 'botellero'}}, 'additionalProperties': False}, {'type': 'object', 'required': ['c', 'n'], 'properties': {'c': {'type': 'string', 'const': 'zapatero'}, 'n': {'type': 'integer', 'maximum': 5, 'minimum': 1}}, 'additionalProperties': False}, {'type': 'object', 'required': ['c', 'n'], 'properties': {'c': {'type': 'string', 'const': 'vidrio'}, 'n': {'type': 'integer', 'maximum': 8, 'minimum': 1}}, 'additionalProperties': False}, {'type': 'object', 'required': ['c', 'n'], 'properties': {'c': {'type': 'string', 'const': 'bandeja'}, 'n': {'type': 'integer', 'maximum': 6, 'minimum': 1}}, 'additionalProperties': False}, {'type': 'object', 'required': ['c', 'n'], 'properties': {'c': {'type': 'string', 'const': 'ranurado'}, 'n': {'type': 'integer', 'maximum': 30, 'minimum': 3}}, 'additionalProperties': False}, {'type': 'object', 'required': ['c'], 'properties': {'c': {'type': 'string', 'const': 'hueco'}}, 'additionalProperties': False}, {'type': 'object', 'required': ['c'], 'properties': {'c': {'type': 'string', 'const': 'vacio'}}, 'additionalProperties': False}]}}, 'additionalProperties': False}, {'$ref': '#/definitions/__schema0'}]}, 'depth': {'type': 'number', 'exclusiveMinimum': 0}, 'width': {'type': 'number', 'exclusiveMinimum': 0}, 'height': {'type': 'number', 'exclusiveMinimum': 0}, 'colgado': {'type': 'boolean'}, 'overlay': {'type': 'boolean'}, 'material': {'type': 'string'}, 'backPanel': {'type': 'boolean'}, 'enCuerpos': {'type': 'boolean'}, 'softClose': {'type': 'boolean'}, 'glassDoors': {'type': 'boolean'}, 'slidingDoor': {'enum': ['full', 'per-column'], 'type': 'string'}, 'techoPasante': {'type': 'boolean'}, 'frontMaterial': {'type': 'string'}}, 'additionalProperties': False}], 'description': "Params paramétricos completos (alternativa a 'preset'). El schema enumera todos los campos por kind. Modular: frontMaterial (mismo espesor que material), softClose, base, colgado, enCuerpos, slidingDoor, glassDoors, overlay y techoPasante (techo al ancho total sobre los laterales; también en shelf y wardrobe). root admite cortes V/H anidados; cada hijo tiene f y, si genera cuerpo, alto/prof/colgado. En cortes H el alto se reparte con f, no con alto. height y depth deben abarcar todos los cuerpos. Cada hoja admite door, lock, push y led; content.c incluye cajonSecreto y cajones con content.lock/content.push. Shelf: shelves:0 deja solo carcasa; openFrame usa bastidor sin fondo. Cama: headboard modular, headboardShelves, drawersPerSide, bunk, bunkHeight, bunkLadderSide, mattressThickness, baseHeight. Sofá/banqueta: seatHeight (sofá), backrestAngle y cushionThickness. Otros tipos exponen sus opciones en el schema. Los avisos explican qué opción se recortó o no se aplicó y cómo corregirla."}, 'preset': {'type': 'string', 'description': "ID del preset del mueble. Usá listar_presets para ver los disponibles. Requerido si no se pasa 'params'."}, 'posicion_mm': {'type': 'object', 'required': ['x', 'z'], 'properties': {'x': {'type': 'number', 'description': 'Posición X en planta, en milÃ\xadmetros.'}, 'z': {'type': 'number', 'description': 'Posición Z en planta, en milÃ\xadmetros.'}}, 'description': 'Posición del mueble en planta (mm). Si se omite, se distribuye automáticamente en fila.', 'additionalProperties': False}, 'rotacion_grados': {'type': 'number', 'description': 'Rotación horizontal del mueble en grados (0 = frente al sur, 90 = lateral). Default: 0.'}}, 'additionalProperties': False}, 'maxItems': 20, 'minItems': 1, 'description': 'Lista de muebles a incluir en el diseño. MÃ\xadnimo 1, máximo 20.'}}, 'definitions': {'__schema0': {'type': 'object', 'required': ['s', 'ch'], 'properties': {'s': {'enum': ['V', 'H'], 'type': 'string'}, 'ch': {'type': 'array', 'items': {'type': 'object', 'required': ['f', 'node'], 'properties': {'f': {'type': 'number', 'exclusiveMinimum': 0}, 'alto': {'type': 'number', 'maximum': 3000, 'minimum': 150}, 'node': {'anyOf': [{'type': 'object', 'required': ['content'], 'properties': {'led': {'type': 'boolean'}, 'door': {'enum': ['izq', 'der', 'doble', 'arriba', 'abajo', 'corrediza'], 'type': 'string'}, 'lock': {'enum': ['magnetica', 'llave'], 'type': 'string'}, 'push': {'type': 'boolean'}, 'content': {'oneOf': [{'type': 'object', 'required': ['c', 'n'], 'properties': {'c': {'type': 'string', 'const': 'estantes'}, 'n': {'type': 'integer', 'maximum': 12, 'minimum': 1}}, 'additionalProperties': False}, {'type': 'object', 'required': ['c', 'n'], 'properties': {'c': {'type': 'string', 'const': 'cajones'}, 'n': {'type': 'integer', 'maximum': 8, 'minimum': 1}, 'lock': {'enum': ['magnetica', 'llave'], 'type': 'string'}, 'push': {'type': 'boolean'}}, 'additionalProperties': False}, {'type': 'object', 'required': ['c'], 'properties': {'c': {'type': 'string', 'const': 'cajonSecreto'}}, 'additionalProperties': False}, {'type': 'object', 'required': ['c'], 'properties': {'c': {'type': 'string', 'const': 'barral'}}, 'additionalProperties': False}, {'type': 'object', 'required': ['c'], 'properties': {'c': {'type': 'string', 'const': 'botellero'}}, 'additionalProperties': False}, {'type': 'object', 'required': ['c', 'n'], 'properties': {'c': {'type': 'string', 'const': 'zapatero'}, 'n': {'type': 'integer', 'maximum': 5, 'minimum': 1}}, 'additionalProperties': False}, {'type': 'object', 'required': ['c', 'n'], 'properties': {'c': {'type': 'string', 'const': 'vidrio'}, 'n': {'type': 'integer', 'maximum': 8, 'minimum': 1}}, 'additionalProperties': False}, {'type': 'object', 'required': ['c', 'n'], 'properties': {'c': {'type': 'string', 'const': 'bandeja'}, 'n': {'type': 'integer', 'maximum': 6, 'minimum': 1}}, 'additionalProperties': False}, {'type': 'object', 'required': ['c', 'n'], 'properties': {'c': {'type': 'string', 'const': 'ranurado'}, 'n': {'type': 'integer', 'maximum': 30, 'minimum': 3}}, 'additionalProperties': False}, {'type': 'object', 'required': ['c'], 'properties': {'c': {'type': 'string', 'const': 'hueco'}}, 'additionalProperties': False}, {'type': 'object', 'required': ['c'], 'properties': {'c': {'type': 'string', 'const': 'vacio'}}, 'additionalProperties': False}]}}, 'additionalProperties': False}, {'$ref': '#/definitions/__schema0'}]}, 'prof': {'type': 'number', 'maximum': 1200, 'minimum': 80}, 'colgado': {'type': 'boolean'}}, 'additionalProperties': False}, 'maxItems': 8, 'minItems': 2}, 'door': {'enum': ['izq', 'der', 'doble', 'arriba', 'abajo', 'corrediza'], 'type': 'string'}, 'lock': {'enum': ['magnetica', 'llave'], 'type': 'string'}, 'push': {'type': 'boolean'}}, 'additionalProperties': False}}}
输出模式
{'type': 'object', '$schema': 'http://json-schema.org/draft-07/schema#', 'required': ['url', 'muebles_incluidos', 'previews', 'nota'], 'properties': {'url': {'type': 'string'}, 'nota': {'type': 'string'}, 'previews': {'type': 'array', 'items': {'type': 'object', 'required': ['nombre'], 'properties': {'nombre': {'type': 'string'}}, 'additionalProperties': False}}, 'espacio_mm': {'type': 'object', 'required': ['ancho', 'profundidad'], 'properties': {'ancho': {'type': 'number'}, 'profundidad': {'type': 'number'}}, 'additionalProperties': False}, 'muebles_incluidos': {'type': 'array', 'items': {'type': 'string'}}}, 'additionalProperties': False}
输入模式
{'type': 'object', '$schema': 'http://json-schema.org/draft-07/schema#', 'properties': {'params': {'oneOf': [{'type': 'object', 'required': ['kind', 'width', 'height', 'depth', 'shelves', 'backPanel', 'material'], 'properties': {'kind': {'type': 'string', 'const': 'shelf'}, 'depth': {'type': 'number', 'exclusiveMinimum': 0}, 'width': {'type': 'number', 'exclusiveMinimum': 0}, 'height': {'type': 'number', 'exclusiveMinimum': 0}, 'shelves': {'type': 'integer', 'maximum': 9007199254740991, 'minimum': 0}, 'material': {'type': 'string'}, 'backPanel': {'type': 'boolean'}, 'openFrame': {'type': 'boolean'}, 'techoPasante': {'type': 'boolean'}}, 'additionalProperties': False}, {'type': 'object', 'required': ['kind', 'width', 'height', 'depth', 'drawers', 'material'], 'properties': {'kind': {'type': 'string', 'const': 'desk'}, 'depth': {'type': 'number', 'exclusiveMinimum': 0}, 'width': {'type': 'number', 'exclusiveMinimum': 0}, 'height': {'type': 'number', 'exclusiveMinimum': 0}, 'drawers': {'type': 'integer', 'maximum': 9007199254740991, 'minimum': 0}, 'material': {'type': 'string'}}, 'additionalProperties': False}, {'type': 'object', 'required': ['kind', 'width', 'height', 'depth', 'doors', 'rod', 'material'], 'properties': {'rod': {'type': 'boolean'}, 'kind': {'type': 'string', 'const': 'wardrobe'}, 'depth': {'type': 'number', 'exclusiveMinimum': 0}, 'doors': {'type': 'integer', 'maximum': 9007199254740991, 'minimum': 0}, 'width': {'type': 'number', 'exclusiveMinimum': 0}, 'height': {'type': 'number', 'exclusiveMinimum': 0}, 'material': {'type': 'string'}, 'techoPasante': {'type': 'boolean'}}, 'additionalProperties': False}, {'type': 'object', 'required': ['kind', 'width', 'depth', 'height', 'rafters', 'postSize', 'slope', 'material'], 'properties': {'kind': {'type': 'string', 'const': 'pergola'}, 'depth': {'type': 'number', 'exclusiveMinimum': 0}, 'slope': {'type': 'number', 'maximum': 45, 'minimum': 0}, 'width': {'type': 'number', 'exclusiveMinimum': 0}, 'height': {'type': 'number', 'exclusiveMinimum': 0}, 'rafters': {'type': 'integer', 'maximum': 9007199254740991, 'minimum': 1}, 'material': {'type': 'string'}, 'postSize': {'type': 'number', 'exclusiveMinimum': 0}}, 'additionalProperties': False}, {'type': 'object', 'required': ['kind', 'width', 'depth', 'boardWidth', 'gap', 'joists', 'material'], 'properties': {'gap': {'type': 'number', 'minimum': 0}, 'kind': {'type': 'string', 'const': 'deck'}, 'depth': {'type': 'number', 'exclusiveMinimum': 0}, 'width': {'type': 'number', 'exclusiveMinimum': 0}, 'joists': {'type': 'integer', 'maximum': 9007199254740991, 'minimum': 1}, 'material': {'type': 'string'}, 'boardWidth': {'type': 'number', 'exclusiveMinimum': 0}}, 'additionalProperties': False}, {'type': 'object', 'required': ['kind', 'width', 'height', 'depth', 'legSize', 'material'], 'properties': {'kind': {'type': 'string', 'const': 'table'}, 'depth': {'type': 'number', 'exclusiveMinimum': 0}, 'width': {'type': 'number', 'exclusiveMinimum': 0}, 'height': {'type': 'number', 'exclusiveMinimum': 0}, 'legSize': {'type': 'number', 'exclusiveMinimum': 0}, 'material': {'type': 'string'}}, 'additionalProperties': False}, {'type': 'object', 'required': ['kind', 'width', 'height', 'depth', 'tabletopDepth', 'seatHeight', 'material'], 'properties': {'kind': {'type': 'string', 'const': 'picnic'}, 'depth': {'type': 'number', 'exclusiveMinimum': 0}, 'width': {'type': 'number', 'exclusiveMinimum': 0}, 'height': {'type': 'number', 'exclusiveMinimum': 0}, 'material': {'type': 'string'}, 'seatHeight': {'type': 'number', 'exclusiveMinimum': 0}, 'tabletopDepth': {'type': 'number', 'exclusiveMinimum': 0}}, 'additionalProperties': False}, {'type': 'object', 'required': ['kind', 'width', 'height', 'depth', 'storage', 'material'], 'properties': {'bunk': {'type': 'boolean'}, 'kind': {'type': 'string', 'const': 'cama'}, 'depth': {'type': 'number', 'exclusiveMinimum': 0}, 'width': {'type': 'number', 'exclusiveMinimum': 0}, 'height': {'type': 'number', 'exclusiveMinimum': 0}, 'storage': {'type': 'boolean'}, 'material': {'type': 'string'}, 'headboard': {'type': 'object', 'required': ['kind', 'width', 'height', 'depth', 'material', 'backPanel', 'root'], 'properties': {'base': {'enum': ['zocalo', 'patas', 'ruedas'], 'type': 'string'}, 'kind': {'type': 'string', 'const': 'modular'}, 'root': {'anyOf': [{'type': 'object', 'required': ['content'], 'properties': {'led': {'type': 'boolean'}, 'door': {'enum': ['izq', 'der', 'doble', 'arriba', 'abajo', 'corrediza'], 'type': 'string'}, 'lock': {'enum': ['magnetica', 'llave'], 'type': 'string'}, 'push': {'type': 'boolean'}, 'content': {'oneOf': [{'type': 'object', 'required': ['c', 'n'], 'properties': {'c': {'type': 'string', 'const': 'estantes'}, 'n': {'type': 'integer', 'maximum': 12, 'minimum': 1}}, 'additionalProperties': False}, {'type': 'object', 'required': ['c', 'n'], 'properties': {'c': {'type': 'string', 'const': 'cajones'}, 'n': {'type': 'integer', 'maximum': 8, 'minimum': 1}, 'lock': {'enum': ['magnetica', 'llave'], 'type': 'string'}, 'push': {'type': 'boolean'}}, 'additionalProperties': False}, {'type': 'object', 'required': ['c'], 'properties': {'c': {'type': 'string', 'const': 'cajonSecreto'}}, 'additionalProperties': False}, {'type': 'object', 'required': ['c'], 'properties': {'c': {'type': 'string', 'const': 'barral'}}, 'additionalProperties': False}, {'type': 'object', 'required': ['c'], 'properties': {'c': {'type': 'string', 'const': 'botellero'}}, 'additionalProperties': False}, {'type': 'object', 'required': ['c', 'n'], 'properties': {'c': {'type': 'string', 'const': 'zapatero'}, 'n': {'type': 'integer', 'maximum': 5, 'minimum': 1}}, 'additionalProperties': False}, {'type': 'object', 'required': ['c', 'n'], 'properties': {'c': {'type': 'string', 'const': 'vidrio'}, 'n': {'type': 'integer', 'maximum': 8, 'minimum': 1}}, 'additionalProperties': False}, {'type': 'object', 'required': ['c', 'n'], 'properties': {'c': {'type': 'string', 'const': 'bandeja'}, 'n': {'type': 'integer', 'maximum': 6, 'minimum': 1}}, 'additionalProperties': False}, {'type': 'object', 'required': ['c', 'n'], 'properties': {'c': {'type': 'string', 'const': 'ranurado'}, 'n': {'type': 'integer', 'maximum': 30, 'minimum': 3}}, 'additionalProperties': False}, {'type': 'object', 'required': ['c'], 'properties': {'c': {'type': 'string', 'const': 'hueco'}}, 'additionalProperties': False}, {'type': 'object', 'required': ['c'], 'properties': {'c': {'type': 'string', 'const': 'vacio'}}, 'additionalProperties': False}]}}, 'additionalProperties': False}, {'$ref': '#/definitions/__schema0'}]}, 'depth': {'type': 'number', 'exclusiveMinimum': 0}, 'width': {'type': 'number', 'exclusiveMinimum': 0}, 'height': {'type': 'number', 'exclusiveMinimum': 0}, 'colgado': {'type': 'boolean'}, 'overlay': {'type': 'boolean'}, 'material': {'type': 'string'}, 'backPanel': {'type': 'boolean'}, 'enCuerpos': {'type': 'boolean'}, 'softClose': {'type': 'boolean'}, 'glassDoors': {'type': 'boolean'}, 'slidingDoor': {'enum': ['full', 'per-column'], 'type': 'string'}, 'techoPasante': {'type': 'boolean'}, 'frontMaterial': {'type': 'string'}}, 'additionalProperties': False}, 'baseHeight': {'type': 'number', 'exclusiveMinimum': 0}, 'bunkHeight': {'type': 'number', 'maximum': 1600, 'minimum': 900}, 'bunkLadderSide': {'enum': ['izq', 'der'], 'type': 'string'}, 'drawersPerSide': {'type': 'integer', 'maximum': 4, 'minimum': 0}, 'headboardShelves': {'type': 'integer', 'maximum': 6, 'minimum': 0}, 'mattressThickness': {'type': 'number', 'exclusiveMinimum': 0}}, 'additionalProperties': False}, {'type': 'object', 'required': ['kind', 'width', 'height', 'depth', 'arms', 'material'], 'properties': {'arms': {'type': 'boolean'}, 'kind': {'type': 'string', 'const': 'sofa'}, 'depth': {'type': 'number', 'exclusiveMinimum': 0}, 'width': {'type': 'number', 'exclusiveMinimum': 0}, 'height': {'type': 'number', 'exclusiveMinimum': 0}, 'material': {'type': 'string'}, 'seatHeight': {'type': 'number', 'exclusiveMinimum': 0}, 'backrestAngle': {'type': 'number', 'maximum': 45, 'minimum': 0}, 'cushionThickness': {'type': 'number', 'minimum': 0}}, 'additionalProperties': False}, {'type': 'object', 'required': ['kind', 'width', 'height', 'depth', 'backrest', 'material'], 'properties': {'kind': {'type': 'string', 'const': 'banqueta'}, 'depth': {'type': 'number', 'exclusiveMinimum': 0}, 'width': {'type': 'number', 'exclusiveMinimum': 0}, 'height': {'type': 'number', 'exclusiveMinimum': 0}, 'backrest': {'type': 'boolean'}, 'material': {'type': 'string'}, 'backrestAngle': {'type': 'number', 'maximum': 45, 'minimum': 0}, 'cushionThickness': {'type': 'number', 'minimum': 0}}, 'additionalProperties': False}, {'type': 'object', 'required': ['kind', 'width', 'height', 'depth', 'material'], 'properties': {'kind': {'type': 'string', 'const': 'espejo'}, 'depth': {'type': 'number', 'exclusiveMinimum': 0}, 'width': {'type': 'number', 'exclusiveMinimum': 0}, 'height': {'type': 'number', 'exclusiveMinimum': 0}, 'material': {'type': 'string'}}, 'additionalProperties': False}, {'type': 'object', 'required': ['kind', 'width', 'height', 'depth', 'lid', 'wheels', 'material'], 'properties': {'lid': {'enum': ['ninguna', 'fija', 'abisagrada'], 'type': 'string'}, 'kind': {'type': 'string', 'const': 'caja'}, 'legs': {'type': 'number', 'maximum': 900, 'minimum': 0}, 'depth': {'type': 'number', 'exclusiveMinimum': 0}, 'width': {'type': 'number', 'exclusiveMinimum': 0}, 'height': {'type': 'number', 'exclusiveMinimum': 0}, 'wheels': {'type': 'boolean'}, 'material': {'type': 'string'}}, 'additionalProperties': False}, {'type': 'object', 'required': ['kind', 'width', 'height', 'depth', 'material'], 'properties': {'kind': {'type': 'string', 'const': 'cortina'}, 'depth': {'type': 'number', 'exclusiveMinimum': 0}, 'width': {'type': 'number', 'exclusiveMinimum': 0}, 'height': {'type': 'number', 'exclusiveMinimum': 0}, 'material': {'type': 'string'}}, 'additionalProperties': False}, {'type': 'object', 'required': ['kind', 'width', 'height', 'depth', 'hojas', 'relleno', 'material'], 'properties': {'kind': {'type': 'string', 'const': 'biombo'}, 'depth': {'type': 'number', 'exclusiveMinimum': 0}, 'hojas': {'type': 'integer', 'maximum': 6, 'minimum': 2}, 'width': {'type': 'number', 'exclusiveMinimum': 0}, 'height': {'type': 'number', 'exclusiveMinimum': 0}, 'relleno': {'type': 'boolean'}, 'material': {'type': 'string'}}, 'additionalProperties': False}, {'type': 'object', 'required': ['kind', 'width', 'height', 'depth', 'slope', 'shelves', 'puerta', 'material'], 'properties': {'kind': {'type': 'string', 'const': 'invernadero'}, 'depth': {'type': 'number', 'exclusiveMinimum': 0}, 'slope': {'type': 'number', 'maximum': 45, 'minimum': 0}, 'width': {'type': 'number', 'exclusiveMinimum': 0}, 'height': {'type': 'number', 'exclusiveMinimum': 0}, 'puerta': {'type': 'boolean'}, 'shelves': {'type': 'integer', 'maximum': 9007199254740991, 'minimum': 0}, 'material': {'type': 'string'}}, 'additionalProperties': False}, {'type': 'object', 'required': ['kind', 'width', 'height', 'depth', 'material', 'backPanel', 'root'], 'properties': {'base': {'enum': ['zocalo', 'patas', 'ruedas'], 'type': 'string'}, 'kind': {'type': 'string', 'const': 'modular'}, 'root': {'anyOf': [{'type': 'object', 'required': ['content'], 'properties': {'led': {'type': 'boolean'}, 'door': {'enum': ['izq', 'der', 'doble', 'arriba', 'abajo', 'corrediza'], 'type': 'string'}, 'lock': {'enum': ['magnetica', 'llave'], 'type': 'string'}, 'push': {'type': 'boolean'}, 'content': {'oneOf': [{'type': 'object', 'required': ['c', 'n'], 'properties': {'c': {'type': 'string', 'const': 'estantes'}, 'n': {'type': 'integer', 'maximum': 12, 'minimum': 1}}, 'additionalProperties': False}, {'type': 'object', 'required': ['c', 'n'], 'properties': {'c': {'type': 'string', 'const': 'cajones'}, 'n': {'type': 'integer', 'maximum': 8, 'minimum': 1}, 'lock': {'enum': ['magnetica', 'llave'], 'type': 'string'}, 'push': {'type': 'boolean'}}, 'additionalProperties': False}, {'type': 'object', 'required': ['c'], 'properties': {'c': {'type': 'string', 'const': 'cajonSecreto'}}, 'additionalProperties': False}, {'type': 'object', 'required': ['c'], 'properties': {'c': {'type': 'string', 'const': 'barral'}}, 'additionalProperties': False}, {'type': 'object', 'required': ['c'], 'properties': {'c': {'type': 'string', 'const': 'botellero'}}, 'additionalProperties': False}, {'type': 'object', 'required': ['c', 'n'], 'properties': {'c': {'type': 'string', 'const': 'zapatero'}, 'n': {'type': 'integer', 'maximum': 5, 'minimum': 1}}, 'additionalProperties': False}, {'type': 'object', 'required': ['c', 'n'], 'properties': {'c': {'type': 'string', 'const': 'vidrio'}, 'n': {'type': 'integer', 'maximum': 8, 'minimum': 1}}, 'additionalProperties': False}, {'type': 'object', 'required': ['c', 'n'], 'properties': {'c': {'type': 'string', 'const': 'bandeja'}, 'n': {'type': 'integer', 'maximum': 6, 'minimum': 1}}, 'additionalProperties': False}, {'type': 'object', 'required': ['c', 'n'], 'properties': {'c': {'type': 'string', 'const': 'ranurado'}, 'n': {'type': 'integer', 'maximum': 30, 'minimum': 3}}, 'additionalProperties': False}, {'type': 'object', 'required': ['c'], 'properties': {'c': {'type': 'string', 'const': 'hueco'}}, 'additionalProperties': False}, {'type': 'object', 'required': ['c'], 'properties': {'c': {'type': 'string', 'const': 'vacio'}}, 'additionalProperties': False}]}}, 'additionalProperties': False}, {'$ref': '#/definitions/__schema0'}]}, 'depth': {'type': 'number', 'exclusiveMinimum': 0}, 'width': {'type': 'number', 'exclusiveMinimum': 0}, 'height': {'type': 'number', 'exclusiveMinimum': 0}, 'colgado': {'type': 'boolean'}, 'overlay': {'type': 'boolean'}, 'material': {'type': 'string'}, 'backPanel': {'type': 'boolean'}, 'enCuerpos': {'type': 'boolean'}, 'softClose': {'type': 'boolean'}, 'glassDoors': {'type': 'boolean'}, 'slidingDoor': {'enum': ['full', 'per-column'], 'type': 'string'}, 'techoPasante': {'type': 'boolean'}, 'frontMaterial': {'type': 'string'}}, 'additionalProperties': False}], 'description': "Params paramétricos completos del mueble (alternativa a 'preset'). Requerido si no se pasa 'preset'. Debe incluir kind, material y las medidas y opciones requeridas por ese kind; deck no lleva height. El schema enumera todos los campos por kind. Modular: frontMaterial (mismo espesor que material), softClose, base, colgado, enCuerpos, slidingDoor, glassDoors, overlay y techoPasante (techo al ancho total sobre los laterales; también en shelf y wardrobe). root admite cortes V/H anidados; cada hijo tiene f y, si genera cuerpo, alto/prof/colgado. En cortes H el alto se reparte con f, no con alto. height y depth deben abarcar todos los cuerpos. Cada hoja admite door, lock, push y led; content.c incluye cajonSecreto y cajones con content.lock/content.push. Shelf: shelves:0 deja solo carcasa; openFrame usa bastidor sin fondo. Cama: headboard modular, headboardShelves, drawersPerSide, bunk, bunkHeight, bunkLadderSide, mattressThickness, baseHeight. Sofá/banqueta: seatHeight (sofá), backrestAngle y cushionThickness. Otros tipos exponen sus opciones en el schema. Los avisos explican qué opción se recortó o no se aplicó y cómo corregirla."}, 'preset': {'type': 'string', 'description': "ID del preset del mueble a despiesar. Requerido si no se pasa 'params'. Ejemplos: 'placard-corredizo', 'biblioteca', 'escritorio-cajonera', 'comoda', 'bajo-mesada'. Usá listar_presets para ver todos los ids disponibles."}, 'ajustes': {'type': 'object', 'properties': {'alto_mm': {'type': 'number', 'exclusiveMinimum': 0}, 'ancho_mm': {'type': 'number', 'exclusiveMinimum': 0}, 'profundidad_mm': {'type': 'number', 'exclusiveMinimum': 0}}, 'description': 'Ajustes de medidas opcionales, en milÃ\xadmetros, sobre el preset O sobre los params que pases. Sólo los campos que querés sobreescribir. Ej: {ancho_mm: 2400}.', 'additionalProperties': False}}, 'definitions': {'__schema0': {'type': 'object', 'required': ['s', 'ch'], 'properties': {'s': {'enum': ['V', 'H'], 'type': 'string'}, 'ch': {'type': 'array', 'items': {'type': 'object', 'required': ['f', 'node'], 'properties': {'f': {'type': 'number', 'exclusiveMinimum': 0}, 'alto': {'type': 'number', 'maximum': 3000, 'minimum': 150}, 'node': {'anyOf': [{'type': 'object', 'required': ['content'], 'properties': {'led': {'type': 'boolean'}, 'door': {'enum': ['izq', 'der', 'doble', 'arriba', 'abajo', 'corrediza'], 'type': 'string'}, 'lock': {'enum': ['magnetica', 'llave'], 'type': 'string'}, 'push': {'type': 'boolean'}, 'content': {'oneOf': [{'type': 'object', 'required': ['c', 'n'], 'properties': {'c': {'type': 'string', 'const': 'estantes'}, 'n': {'type': 'integer', 'maximum': 12, 'minimum': 1}}, 'additionalProperties': False}, {'type': 'object', 'required': ['c', 'n'], 'properties': {'c': {'type': 'string', 'const': 'cajones'}, 'n': {'type': 'integer', 'maximum': 8, 'minimum': 1}, 'lock': {'enum': ['magnetica', 'llave'], 'type': 'string'}, 'push': {'type': 'boolean'}}, 'additionalProperties': False}, {'type': 'object', 'required': ['c'], 'properties': {'c': {'type': 'string', 'const': 'cajonSecreto'}}, 'additionalProperties': False}, {'type': 'object', 'required': ['c'], 'properties': {'c': {'type': 'string', 'const': 'barral'}}, 'additionalProperties': False}, {'type': 'object', 'required': ['c'], 'properties': {'c': {'type': 'string', 'const': 'botellero'}}, 'additionalProperties': False}, {'type': 'object', 'required': ['c', 'n'], 'properties': {'c': {'type': 'string', 'const': 'zapatero'}, 'n': {'type': 'integer', 'maximum': 5, 'minimum': 1}}, 'additionalProperties': False}, {'type': 'object', 'required': ['c', 'n'], 'properties': {'c': {'type': 'string', 'const': 'vidrio'}, 'n': {'type': 'integer', 'maximum': 8, 'minimum': 1}}, 'additionalProperties': False}, {'type': 'object', 'required': ['c', 'n'], 'properties': {'c': {'type': 'string', 'const': 'bandeja'}, 'n': {'type': 'integer', 'maximum': 6, 'minimum': 1}}, 'additionalProperties': False}, {'type': 'object', 'required': ['c', 'n'], 'properties': {'c': {'type': 'string', 'const': 'ranurado'}, 'n': {'type': 'integer', 'maximum': 30, 'minimum': 3}}, 'additionalProperties': False}, {'type': 'object', 'required': ['c'], 'properties': {'c': {'type': 'string', 'const': 'hueco'}}, 'additionalProperties': False}, {'type': 'object', 'required': ['c'], 'properties': {'c': {'type': 'string', 'const': 'vacio'}}, 'additionalProperties': False}]}}, 'additionalProperties': False}, {'$ref': '#/definitions/__schema0'}]}, 'prof': {'type': 'number', 'maximum': 1200, 'minimum': 80}, 'colgado': {'type': 'boolean'}}, 'additionalProperties': False}, 'maxItems': 8, 'minItems': 2}, 'door': {'enum': ['izq', 'der', 'doble', 'arriba', 'abajo', 'corrediza'], 'type': 'string'}, 'lock': {'enum': ['magnetica', 'llave'], 'type': 'string'}, 'push': {'type': 'boolean'}}, 'additionalProperties': False}}}
输出模式
{'type': 'object', '$schema': 'http://json-schema.org/draft-07/schema#', 'required': ['mueble', 'medidas_mm', 'piezas', 'herrajes', 'tabla_texto', 'nota', 'editor_url'], 'properties': {'nota': {'type': 'string'}, 'mueble': {'type': 'string'}, 'piezas': {'type': 'array', 'items': {'type': 'object', 'required': ['pieza', 'cantidad', 'largo_mm', 'ancho_mm', 'espesor_mm', 'material'], 'properties': {'pieza': {'type': 'string'}, 'ancho_mm': {'type': 'number'}, 'cantidad': {'type': 'number'}, 'largo_mm': {'type': 'number'}, 'material': {'type': 'string'}, 'espesor_mm': {'type': 'number'}, 'tapacanto_frontal_mm': {'type': 'number'}}, 'additionalProperties': False}}, 'herrajes': {'type': 'array', 'items': {'type': 'object', 'required': ['concepto', 'cantidad', 'precio_unitario_ars', 'subtotal_ars'], 'properties': {'cantidad': {'type': 'number'}, 'concepto': {'type': 'string'}, 'subtotal_ars': {'type': 'number'}, 'precio_unitario_ars': {'type': 'number'}}, 'additionalProperties': False}}, 'editor_url': {'type': 'string'}, 'medidas_mm': {'type': 'object', 'required': ['ancho', 'alto', 'profundidad'], 'properties': {'alto': {'type': 'number'}, 'ancho': {'type': 'number'}, 'profundidad': {'type': 'number'}}, 'additionalProperties': False}, 'tabla_texto': {'type': 'string'}}, 'additionalProperties': False}
输入模式
{'type': 'object', '$schema': 'http://json-schema.org/draft-07/schema#', 'properties': {'ambiente': {'type': 'string', 'description': 'Filtro opcional por ambiente: Dormitorio, Living, Cocina y comedor, Baño, Oficina, Exterior u Otros.'}}}
输出模式
{'type': 'object', '$schema': 'http://json-schema.org/draft-07/schema#', 'required': ['presets'], 'properties': {'presets': {'type': 'array', 'items': {'type': 'object', 'required': ['id', 'nombre', 'tipo', 'medidas_mm', 'descripcion', 'ambiente', 'editor_url', 'imagen_url'], 'properties': {'id': {'type': 'string'}, 'tipo': {'type': 'string'}, 'nombre': {'type': 'string'}, 'ambiente': {'type': 'string'}, 'editor_url': {'type': 'string'}, 'imagen_url': {'type': 'string'}, 'medidas_mm': {'type': 'object', 'required': ['ancho', 'alto', 'profundidad'], 'properties': {'alto': {'type': 'number'}, 'ancho': {'type': 'number'}, 'profundidad': {'type': 'number'}}, 'additionalProperties': False}, 'descripcion': {'type': 'string'}}, 'additionalProperties': False}}}, 'additionalProperties': False}
输入模式
{'type': 'object', '$schema': 'http://json-schema.org/draft-07/schema#', 'properties': {'params': {'oneOf': [{'type': 'object', 'required': ['kind', 'width', 'height', 'depth', 'shelves', 'backPanel', 'material'], 'properties': {'kind': {'type': 'string', 'const': 'shelf'}, 'depth': {'type': 'number', 'exclusiveMinimum': 0}, 'width': {'type': 'number', 'exclusiveMinimum': 0}, 'height': {'type': 'number', 'exclusiveMinimum': 0}, 'shelves': {'type': 'integer', 'maximum': 9007199254740991, 'minimum': 0}, 'material': {'type': 'string'}, 'backPanel': {'type': 'boolean'}, 'openFrame': {'type': 'boolean'}, 'techoPasante': {'type': 'boolean'}}, 'additionalProperties': False}, {'type': 'object', 'required': ['kind', 'width', 'height', 'depth', 'drawers', 'material'], 'properties': {'kind': {'type': 'string', 'const': 'desk'}, 'depth': {'type': 'number', 'exclusiveMinimum': 0}, 'width': {'type': 'number', 'exclusiveMinimum': 0}, 'height': {'type': 'number', 'exclusiveMinimum': 0}, 'drawers': {'type': 'integer', 'maximum': 9007199254740991, 'minimum': 0}, 'material': {'type': 'string'}}, 'additionalProperties': False}, {'type': 'object', 'required': ['kind', 'width', 'height', 'depth', 'doors', 'rod', 'material'], 'properties': {'rod': {'type': 'boolean'}, 'kind': {'type': 'string', 'const': 'wardrobe'}, 'depth': {'type': 'number', 'exclusiveMinimum': 0}, 'doors': {'type': 'integer', 'maximum': 9007199254740991, 'minimum': 0}, 'width': {'type': 'number', 'exclusiveMinimum': 0}, 'height': {'type': 'number', 'exclusiveMinimum': 0}, 'material': {'type': 'string'}, 'techoPasante': {'type': 'boolean'}}, 'additionalProperties': False}, {'type': 'object', 'required': ['kind', 'width', 'depth', 'height', 'rafters', 'postSize', 'slope', 'material'], 'properties': {'kind': {'type': 'string', 'const': 'pergola'}, 'depth': {'type': 'number', 'exclusiveMinimum': 0}, 'slope': {'type': 'number', 'maximum': 45, 'minimum': 0}, 'width': {'type': 'number', 'exclusiveMinimum': 0}, 'height': {'type': 'number', 'exclusiveMinimum': 0}, 'rafters': {'type': 'integer', 'maximum': 9007199254740991, 'minimum': 1}, 'material': {'type': 'string'}, 'postSize': {'type': 'number', 'exclusiveMinimum': 0}}, 'additionalProperties': False}, {'type': 'object', 'required': ['kind', 'width', 'depth', 'boardWidth', 'gap', 'joists', 'material'], 'properties': {'gap': {'type': 'number', 'minimum': 0}, 'kind': {'type': 'string', 'const': 'deck'}, 'depth': {'type': 'number', 'exclusiveMinimum': 0}, 'width': {'type': 'number', 'exclusiveMinimum': 0}, 'joists': {'type': 'integer', 'maximum': 9007199254740991, 'minimum': 1}, 'material': {'type': 'string'}, 'boardWidth': {'type': 'number', 'exclusiveMinimum': 0}}, 'additionalProperties': False}, {'type': 'object', 'required': ['kind', 'width', 'height', 'depth', 'legSize', 'material'], 'properties': {'kind': {'type': 'string', 'const': 'table'}, 'depth': {'type': 'number', 'exclusiveMinimum': 0}, 'width': {'type': 'number', 'exclusiveMinimum': 0}, 'height': {'type': 'number', 'exclusiveMinimum': 0}, 'legSize': {'type': 'number', 'exclusiveMinimum': 0}, 'material': {'type': 'string'}}, 'additionalProperties': False}, {'type': 'object', 'required': ['kind', 'width', 'height', 'depth', 'tabletopDepth', 'seatHeight', 'material'], 'properties': {'kind': {'type': 'string', 'const': 'picnic'}, 'depth': {'type': 'number', 'exclusiveMinimum': 0}, 'width': {'type': 'number', 'exclusiveMinimum': 0}, 'height': {'type': 'number', 'exclusiveMinimum': 0}, 'material': {'type': 'string'}, 'seatHeight': {'type': 'number', 'exclusiveMinimum': 0}, 'tabletopDepth': {'type': 'number', 'exclusiveMinimum': 0}}, 'additionalProperties': False}, {'type': 'object', 'required': ['kind', 'width', 'height', 'depth', 'storage', 'material'], 'properties': {'bunk': {'type': 'boolean'}, 'kind': {'type': 'string', 'const': 'cama'}, 'depth': {'type': 'number', 'exclusiveMinimum': 0}, 'width': {'type': 'number', 'exclusiveMinimum': 0}, 'height': {'type': 'number', 'exclusiveMinimum': 0}, 'storage': {'type': 'boolean'}, 'material': {'type': 'string'}, 'headboard': {'type': 'object', 'required': ['kind', 'width', 'height', 'depth', 'material', 'backPanel', 'root'], 'properties': {'base': {'enum': ['zocalo', 'patas', 'ruedas'], 'type': 'string'}, 'kind': {'type': 'string', 'const': 'modular'}, 'root': {'anyOf': [{'type': 'object', 'required': ['content'], 'properties': {'led': {'type': 'boolean'}, 'door': {'enum': ['izq', 'der', 'doble', 'arriba', 'abajo', 'corrediza'], 'type': 'string'}, 'lock': {'enum': ['magnetica', 'llave'], 'type': 'string'}, 'push': {'type': 'boolean'}, 'content': {'oneOf': [{'type': 'object', 'required': ['c', 'n'], 'properties': {'c': {'type': 'string', 'const': 'estantes'}, 'n': {'type': 'integer', 'maximum': 12, 'minimum': 1}}, 'additionalProperties': False}, {'type': 'object', 'required': ['c', 'n'], 'properties': {'c': {'type': 'string', 'const': 'cajones'}, 'n': {'type': 'integer', 'maximum': 8, 'minimum': 1}, 'lock': {'enum': ['magnetica', 'llave'], 'type': 'string'}, 'push': {'type': 'boolean'}}, 'additionalProperties': False}, {'type': 'object', 'required': ['c'], 'properties': {'c': {'type': 'string', 'const': 'cajonSecreto'}}, 'additionalProperties': False}, {'type': 'object', 'required': ['c'], 'properties': {'c': {'type': 'string', 'const': 'barral'}}, 'additionalProperties': False}, {'type': 'object', 'required': ['c'], 'properties': {'c': {'type': 'string', 'const': 'botellero'}}, 'additionalProperties': False}, {'type': 'object', 'required': ['c', 'n'], 'properties': {'c': {'type': 'string', 'const': 'zapatero'}, 'n': {'type': 'integer', 'maximum': 5, 'minimum': 1}}, 'additionalProperties': False}, {'type': 'object', 'required': ['c', 'n'], 'properties': {'c': {'type': 'string', 'const': 'vidrio'}, 'n': {'type': 'integer', 'maximum': 8, 'minimum': 1}}, 'additionalProperties': False}, {'type': 'object', 'required': ['c', 'n'], 'properties': {'c': {'type': 'string', 'const': 'bandeja'}, 'n': {'type': 'integer', 'maximum': 6, 'minimum': 1}}, 'additionalProperties': False}, {'type': 'object', 'required': ['c', 'n'], 'properties': {'c': {'type': 'string', 'const': 'ranurado'}, 'n': {'type': 'integer', 'maximum': 30, 'minimum': 3}}, 'additionalProperties': False}, {'type': 'object', 'required': ['c'], 'properties': {'c': {'type': 'string', 'const': 'hueco'}}, 'additionalProperties': False}, {'type': 'object', 'required': ['c'], 'properties': {'c': {'type': 'string', 'const': 'vacio'}}, 'additionalProperties': False}]}}, 'additionalProperties': False}, {'$ref': '#/definitions/__schema0'}]}, 'depth': {'type': 'number', 'exclusiveMinimum': 0}, 'width': {'type': 'number', 'exclusiveMinimum': 0}, 'height': {'type': 'number', 'exclusiveMinimum': 0}, 'colgado': {'type': 'boolean'}, 'overlay': {'type': 'boolean'}, 'material': {'type': 'string'}, 'backPanel': {'type': 'boolean'}, 'enCuerpos': {'type': 'boolean'}, 'softClose': {'type': 'boolean'}, 'glassDoors': {'type': 'boolean'}, 'slidingDoor': {'enum': ['full', 'per-column'], 'type': 'string'}, 'techoPasante': {'type': 'boolean'}, 'frontMaterial': {'type': 'string'}}, 'additionalProperties': False}, 'baseHeight': {'type': 'number', 'exclusiveMinimum': 0}, 'bunkHeight': {'type': 'number', 'maximum': 1600, 'minimum': 900}, 'bunkLadderSide': {'enum': ['izq', 'der'], 'type': 'string'}, 'drawersPerSide': {'type': 'integer', 'maximum': 4, 'minimum': 0}, 'headboardShelves': {'type': 'integer', 'maximum': 6, 'minimum': 0}, 'mattressThickness': {'type': 'number', 'exclusiveMinimum': 0}}, 'additionalProperties': False}, {'type': 'object', 'required': ['kind', 'width', 'height', 'depth', 'arms', 'material'], 'properties': {'arms': {'type': 'boolean'}, 'kind': {'type': 'string', 'const': 'sofa'}, 'depth': {'type': 'number', 'exclusiveMinimum': 0}, 'width': {'type': 'number', 'exclusiveMinimum': 0}, 'height': {'type': 'number', 'exclusiveMinimum': 0}, 'material': {'type': 'string'}, 'seatHeight': {'type': 'number', 'exclusiveMinimum': 0}, 'backrestAngle': {'type': 'number', 'maximum': 45, 'minimum': 0}, 'cushionThickness': {'type': 'number', 'minimum': 0}}, 'additionalProperties': False}, {'type': 'object', 'required': ['kind', 'width', 'height', 'depth', 'backrest', 'material'], 'properties': {'kind': {'type': 'string', 'const': 'banqueta'}, 'depth': {'type': 'number', 'exclusiveMinimum': 0}, 'width': {'type': 'number', 'exclusiveMinimum': 0}, 'height': {'type': 'number', 'exclusiveMinimum': 0}, 'backrest': {'type': 'boolean'}, 'material': {'type': 'string'}, 'backrestAngle': {'type': 'number', 'maximum': 45, 'minimum': 0}, 'cushionThickness': {'type': 'number', 'minimum': 0}}, 'additionalProperties': False}, {'type': 'object', 'required': ['kind', 'width', 'height', 'depth', 'material'], 'properties': {'kind': {'type': 'string', 'const': 'espejo'}, 'depth': {'type': 'number', 'exclusiveMinimum': 0}, 'width': {'type': 'number', 'exclusiveMinimum': 0}, 'height': {'type': 'number', 'exclusiveMinimum': 0}, 'material': {'type': 'string'}}, 'additionalProperties': False}, {'type': 'object', 'required': ['kind', 'width', 'height', 'depth', 'lid', 'wheels', 'material'], 'properties': {'lid': {'enum': ['ninguna', 'fija', 'abisagrada'], 'type': 'string'}, 'kind': {'type': 'string', 'const': 'caja'}, 'legs': {'type': 'number', 'maximum': 900, 'minimum': 0}, 'depth': {'type': 'number', 'exclusiveMinimum': 0}, 'width': {'type': 'number', 'exclusiveMinimum': 0}, 'height': {'type': 'number', 'exclusiveMinimum': 0}, 'wheels': {'type': 'boolean'}, 'material': {'type': 'string'}}, 'additionalProperties': False}, {'type': 'object', 'required': ['kind', 'width', 'height', 'depth', 'material'], 'properties': {'kind': {'type': 'string', 'const': 'cortina'}, 'depth': {'type': 'number', 'exclusiveMinimum': 0}, 'width': {'type': 'number', 'exclusiveMinimum': 0}, 'height': {'type': 'number', 'exclusiveMinimum': 0}, 'material': {'type': 'string'}}, 'additionalProperties': False}, {'type': 'object', 'required': ['kind', 'width', 'height', 'depth', 'hojas', 'relleno', 'material'], 'properties': {'kind': {'type': 'string', 'const': 'biombo'}, 'depth': {'type': 'number', 'exclusiveMinimum': 0}, 'hojas': {'type': 'integer', 'maximum': 6, 'minimum': 2}, 'width': {'type': 'number', 'exclusiveMinimum': 0}, 'height': {'type': 'number', 'exclusiveMinimum': 0}, 'relleno': {'type': 'boolean'}, 'material': {'type': 'string'}}, 'additionalProperties': False}, {'type': 'object', 'required': ['kind', 'width', 'height', 'depth', 'slope', 'shelves', 'puerta', 'material'], 'properties': {'kind': {'type': 'string', 'const': 'invernadero'}, 'depth': {'type': 'number', 'exclusiveMinimum': 0}, 'slope': {'type': 'number', 'maximum': 45, 'minimum': 0}, 'width': {'type': 'number', 'exclusiveMinimum': 0}, 'height': {'type': 'number', 'exclusiveMinimum': 0}, 'puerta': {'type': 'boolean'}, 'shelves': {'type': 'integer', 'maximum': 9007199254740991, 'minimum': 0}, 'material': {'type': 'string'}}, 'additionalProperties': False}, {'type': 'object', 'required': ['kind', 'width', 'height', 'depth', 'material', 'backPanel', 'root'], 'properties': {'base': {'enum': ['zocalo', 'patas', 'ruedas'], 'type': 'string'}, 'kind': {'type': 'string', 'const': 'modular'}, 'root': {'anyOf': [{'type': 'object', 'required': ['content'], 'properties': {'led': {'type': 'boolean'}, 'door': {'enum': ['izq', 'der', 'doble', 'arriba', 'abajo', 'corrediza'], 'type': 'string'}, 'lock': {'enum': ['magnetica', 'llave'], 'type': 'string'}, 'push': {'type': 'boolean'}, 'content': {'oneOf': [{'type': 'object', 'required': ['c', 'n'], 'properties': {'c': {'type': 'string', 'const': 'estantes'}, 'n': {'type': 'integer', 'maximum': 12, 'minimum': 1}}, 'additionalProperties': False}, {'type': 'object', 'required': ['c', 'n'], 'properties': {'c': {'type': 'string', 'const': 'cajones'}, 'n': {'type': 'integer', 'maximum': 8, 'minimum': 1}, 'lock': {'enum': ['magnetica', 'llave'], 'type': 'string'}, 'push': {'type': 'boolean'}}, 'additionalProperties': False}, {'type': 'object', 'required': ['c'], 'properties': {'c': {'type': 'string', 'const': 'cajonSecreto'}}, 'additionalProperties': False}, {'type': 'object', 'required': ['c'], 'properties': {'c': {'type': 'string', 'const': 'barral'}}, 'additionalProperties': False}, {'type': 'object', 'required': ['c'], 'properties': {'c': {'type': 'string', 'const': 'botellero'}}, 'additionalProperties': False}, {'type': 'object', 'required': ['c', 'n'], 'properties': {'c': {'type': 'string', 'const': 'zapatero'}, 'n': {'type': 'integer', 'maximum': 5, 'minimum': 1}}, 'additionalProperties': False}, {'type': 'object', 'required': ['c', 'n'], 'properties': {'c': {'type': 'string', 'const': 'vidrio'}, 'n': {'type': 'integer', 'maximum': 8, 'minimum': 1}}, 'additionalProperties': False}, {'type': 'object', 'required': ['c', 'n'], 'properties': {'c': {'type': 'string', 'const': 'bandeja'}, 'n': {'type': 'integer', 'maximum': 6, 'minimum': 1}}, 'additionalProperties': False}, {'type': 'object', 'required': ['c', 'n'], 'properties': {'c': {'type': 'string', 'const': 'ranurado'}, 'n': {'type': 'integer', 'maximum': 30, 'minimum': 3}}, 'additionalProperties': False}, {'type': 'object', 'required': ['c'], 'properties': {'c': {'type': 'string', 'const': 'hueco'}}, 'additionalProperties': False}, {'type': 'object', 'required': ['c'], 'properties': {'c': {'type': 'string', 'const': 'vacio'}}, 'additionalProperties': False}]}}, 'additionalProperties': False}, {'$ref': '#/definitions/__schema0'}]}, 'depth': {'type': 'number', 'exclusiveMinimum': 0}, 'width': {'type': 'number', 'exclusiveMinimum': 0}, 'height': {'type': 'number', 'exclusiveMinimum': 0}, 'colgado': {'type': 'boolean'}, 'overlay': {'type': 'boolean'}, 'material': {'type': 'string'}, 'backPanel': {'type': 'boolean'}, 'enCuerpos': {'type': 'boolean'}, 'softClose': {'type': 'boolean'}, 'glassDoors': {'type': 'boolean'}, 'slidingDoor': {'enum': ['full', 'per-column'], 'type': 'string'}, 'techoPasante': {'type': 'boolean'}, 'frontMaterial': {'type': 'string'}}, 'additionalProperties': False}], 'description': "Params paramétricos completos del mueble (alternativa a 'preset'). Requerido si no se pasa 'preset'. Debe incluir kind, material y las medidas y opciones requeridas por ese kind; deck no lleva height. El schema enumera todos los campos por kind. Modular: frontMaterial (mismo espesor que material), softClose, base, colgado, enCuerpos, slidingDoor, glassDoors, overlay y techoPasante (techo al ancho total sobre los laterales; también en shelf y wardrobe). root admite cortes V/H anidados; cada hijo tiene f y, si genera cuerpo, alto/prof/colgado. En cortes H el alto se reparte con f, no con alto. height y depth deben abarcar todos los cuerpos. Cada hoja admite door, lock, push y led; content.c incluye cajonSecreto y cajones con content.lock/content.push. Shelf: shelves:0 deja solo carcasa; openFrame usa bastidor sin fondo. Cama: headboard modular, headboardShelves, drawersPerSide, bunk, bunkHeight, bunkLadderSide, mattressThickness, baseHeight. Sofá/banqueta: seatHeight (sofá), backrestAngle y cushionThickness. Otros tipos exponen sus opciones en el schema. Los avisos explican qué opción se recortó o no se aplicó y cómo corregirla."}, 'preset': {'type': 'string', 'description': "ID del preset del mueble a armar. Requerido si no se pasa 'params'. Ejemplos: 'placard-corredizo', 'biblioteca', 'escritorio-cajonera', 'comoda', 'bajo-mesada'. Usá listar_presets para ver todos los ids disponibles."}, 'ajustes': {'type': 'object', 'properties': {'alto_mm': {'type': 'number', 'exclusiveMinimum': 0}, 'ancho_mm': {'type': 'number', 'exclusiveMinimum': 0}, 'profundidad_mm': {'type': 'number', 'exclusiveMinimum': 0}}, 'description': 'Ajustes de medidas opcionales, en milÃ\xadmetros, sobre el preset O sobre los params que pases. Sólo los campos que querés sobreescribir. Ej: {ancho_mm: 2400}.', 'additionalProperties': False}}, 'definitions': {'__schema0': {'type': 'object', 'required': ['s', 'ch'], 'properties': {'s': {'enum': ['V', 'H'], 'type': 'string'}, 'ch': {'type': 'array', 'items': {'type': 'object', 'required': ['f', 'node'], 'properties': {'f': {'type': 'number', 'exclusiveMinimum': 0}, 'alto': {'type': 'number', 'maximum': 3000, 'minimum': 150}, 'node': {'anyOf': [{'type': 'object', 'required': ['content'], 'properties': {'led': {'type': 'boolean'}, 'door': {'enum': ['izq', 'der', 'doble', 'arriba', 'abajo', 'corrediza'], 'type': 'string'}, 'lock': {'enum': ['magnetica', 'llave'], 'type': 'string'}, 'push': {'type': 'boolean'}, 'content': {'oneOf': [{'type': 'object', 'required': ['c', 'n'], 'properties': {'c': {'type': 'string', 'const': 'estantes'}, 'n': {'type': 'integer', 'maximum': 12, 'minimum': 1}}, 'additionalProperties': False}, {'type': 'object', 'required': ['c', 'n'], 'properties': {'c': {'type': 'string', 'const': 'cajones'}, 'n': {'type': 'integer', 'maximum': 8, 'minimum': 1}, 'lock': {'enum': ['magnetica', 'llave'], 'type': 'string'}, 'push': {'type': 'boolean'}}, 'additionalProperties': False}, {'type': 'object', 'required': ['c'], 'properties': {'c': {'type': 'string', 'const': 'cajonSecreto'}}, 'additionalProperties': False}, {'type': 'object', 'required': ['c'], 'properties': {'c': {'type': 'string', 'const': 'barral'}}, 'additionalProperties': False}, {'type': 'object', 'required': ['c'], 'properties': {'c': {'type': 'string', 'const': 'botellero'}}, 'additionalProperties': False}, {'type': 'object', 'required': ['c', 'n'], 'properties': {'c': {'type': 'string', 'const': 'zapatero'}, 'n': {'type': 'integer', 'maximum': 5, 'minimum': 1}}, 'additionalProperties': False}, {'type': 'object', 'required': ['c', 'n'], 'properties': {'c': {'type': 'string', 'const': 'vidrio'}, 'n': {'type': 'integer', 'maximum': 8, 'minimum': 1}}, 'additionalProperties': False}, {'type': 'object', 'required': ['c', 'n'], 'properties': {'c': {'type': 'string', 'const': 'bandeja'}, 'n': {'type': 'integer', 'maximum': 6, 'minimum': 1}}, 'additionalProperties': False}, {'type': 'object', 'required': ['c', 'n'], 'properties': {'c': {'type': 'string', 'const': 'ranurado'}, 'n': {'type': 'integer', 'maximum': 30, 'minimum': 3}}, 'additionalProperties': False}, {'type': 'object', 'required': ['c'], 'properties': {'c': {'type': 'string', 'const': 'hueco'}}, 'additionalProperties': False}, {'type': 'object', 'required': ['c'], 'properties': {'c': {'type': 'string', 'const': 'vacio'}}, 'additionalProperties': False}]}}, 'additionalProperties': False}, {'$ref': '#/definitions/__schema0'}]}, 'prof': {'type': 'number', 'maximum': 1200, 'minimum': 80}, 'colgado': {'type': 'boolean'}}, 'additionalProperties': False}, 'maxItems': 8, 'minItems': 2}, 'door': {'enum': ['izq', 'der', 'doble', 'arriba', 'abajo', 'corrediza'], 'type': 'string'}, 'lock': {'enum': ['magnetica', 'llave'], 'type': 'string'}, 'push': {'type': 'boolean'}}, 'additionalProperties': False}}}
输出模式
{'type': 'object', '$schema': 'http://json-schema.org/draft-07/schema#', 'required': ['mueble', 'medidas_mm', 'peso_kg', 'pasos', 'herrajes', 'avisos', 'nota', 'editor_url'], 'properties': {'nota': {'type': 'string'}, 'pasos': {'type': 'array', 'items': {'type': 'object', 'required': ['n', 'titulo', 'detalle', 'piezas', 'panel_ids'], 'properties': {'n': {'type': 'number'}, 'piezas': {'type': 'array', 'items': {'type': 'string'}}, 'titulo': {'type': 'string'}, 'detalle': {'type': 'string'}, 'panel_ids': {'type': 'array', 'items': {'type': 'string'}}}, 'additionalProperties': False}}, 'avisos': {'type': 'array', 'items': {'type': 'object', 'required': ['tipo', 'severidad', 'mensaje'], 'properties': {'tipo': {'type': 'string'}, 'mensaje': {'type': 'string'}, 'severidad': {'type': 'string'}}, 'additionalProperties': False}}, 'mueble': {'type': 'string'}, 'peso_kg': {'type': 'number'}, 'herrajes': {'type': 'array', 'items': {'type': 'object', 'required': ['concepto', 'cantidad', 'precio_unitario_ars', 'subtotal_ars'], 'properties': {'cantidad': {'type': 'number'}, 'concepto': {'type': 'string'}, 'subtotal_ars': {'type': 'number'}, 'precio_unitario_ars': {'type': 'number'}}, 'additionalProperties': False}}, 'editor_url': {'type': 'string'}, 'medidas_mm': {'type': 'object', 'required': ['ancho', 'alto', 'profundidad'], 'properties': {'alto': {'type': 'number'}, 'ancho': {'type': 'number'}, 'profundidad': {'type': 'number'}}, 'additionalProperties': False}}, 'additionalProperties': False}
输入模式
{'type': 'object', '$schema': 'http://json-schema.org/draft-07/schema#', 'properties': {'params': {'oneOf': [{'type': 'object', 'required': ['kind', 'width', 'height', 'depth', 'shelves', 'backPanel', 'material'], 'properties': {'kind': {'type': 'string', 'const': 'shelf'}, 'depth': {'type': 'number', 'exclusiveMinimum': 0}, 'width': {'type': 'number', 'exclusiveMinimum': 0}, 'height': {'type': 'number', 'exclusiveMinimum': 0}, 'shelves': {'type': 'integer', 'maximum': 9007199254740991, 'minimum': 0}, 'material': {'type': 'string'}, 'backPanel': {'type': 'boolean'}, 'openFrame': {'type': 'boolean'}, 'techoPasante': {'type': 'boolean'}}, 'additionalProperties': False}, {'type': 'object', 'required': ['kind', 'width', 'height', 'depth', 'drawers', 'material'], 'properties': {'kind': {'type': 'string', 'const': 'desk'}, 'depth': {'type': 'number', 'exclusiveMinimum': 0}, 'width': {'type': 'number', 'exclusiveMinimum': 0}, 'height': {'type': 'number', 'exclusiveMinimum': 0}, 'drawers': {'type': 'integer', 'maximum': 9007199254740991, 'minimum': 0}, 'material': {'type': 'string'}}, 'additionalProperties': False}, {'type': 'object', 'required': ['kind', 'width', 'height', 'depth', 'doors', 'rod', 'material'], 'properties': {'rod': {'type': 'boolean'}, 'kind': {'type': 'string', 'const': 'wardrobe'}, 'depth': {'type': 'number', 'exclusiveMinimum': 0}, 'doors': {'type': 'integer', 'maximum': 9007199254740991, 'minimum': 0}, 'width': {'type': 'number', 'exclusiveMinimum': 0}, 'height': {'type': 'number', 'exclusiveMinimum': 0}, 'material': {'type': 'string'}, 'techoPasante': {'type': 'boolean'}}, 'additionalProperties': False}, {'type': 'object', 'required': ['kind', 'width', 'depth', 'height', 'rafters', 'postSize', 'slope', 'material'], 'properties': {'kind': {'type': 'string', 'const': 'pergola'}, 'depth': {'type': 'number', 'exclusiveMinimum': 0}, 'slope': {'type': 'number', 'maximum': 45, 'minimum': 0}, 'width': {'type': 'number', 'exclusiveMinimum': 0}, 'height': {'type': 'number', 'exclusiveMinimum': 0}, 'rafters': {'type': 'integer', 'maximum': 9007199254740991, 'minimum': 1}, 'material': {'type': 'string'}, 'postSize': {'type': 'number', 'exclusiveMinimum': 0}}, 'additionalProperties': False}, {'type': 'object', 'required': ['kind', 'width', 'depth', 'boardWidth', 'gap', 'joists', 'material'], 'properties': {'gap': {'type': 'number', 'minimum': 0}, 'kind': {'type': 'string', 'const': 'deck'}, 'depth': {'type': 'number', 'exclusiveMinimum': 0}, 'width': {'type': 'number', 'exclusiveMinimum': 0}, 'joists': {'type': 'integer', 'maximum': 9007199254740991, 'minimum': 1}, 'material': {'type': 'string'}, 'boardWidth': {'type': 'number', 'exclusiveMinimum': 0}}, 'additionalProperties': False}, {'type': 'object', 'required': ['kind', 'width', 'height', 'depth', 'legSize', 'material'], 'properties': {'kind': {'type': 'string', 'const': 'table'}, 'depth': {'type': 'number', 'exclusiveMinimum': 0}, 'width': {'type': 'number', 'exclusiveMinimum': 0}, 'height': {'type': 'number', 'exclusiveMinimum': 0}, 'legSize': {'type': 'number', 'exclusiveMinimum': 0}, 'material': {'type': 'string'}}, 'additionalProperties': False}, {'type': 'object', 'required': ['kind', 'width', 'height', 'depth', 'tabletopDepth', 'seatHeight', 'material'], 'properties': {'kind': {'type': 'string', 'const': 'picnic'}, 'depth': {'type': 'number', 'exclusiveMinimum': 0}, 'width': {'type': 'number', 'exclusiveMinimum': 0}, 'height': {'type': 'number', 'exclusiveMinimum': 0}, 'material': {'type': 'string'}, 'seatHeight': {'type': 'number', 'exclusiveMinimum': 0}, 'tabletopDepth': {'type': 'number', 'exclusiveMinimum': 0}}, 'additionalProperties': False}, {'type': 'object', 'required': ['kind', 'width', 'height', 'depth', 'storage', 'material'], 'properties': {'bunk': {'type': 'boolean'}, 'kind': {'type': 'string', 'const': 'cama'}, 'depth': {'type': 'number', 'exclusiveMinimum': 0}, 'width': {'type': 'number', 'exclusiveMinimum': 0}, 'height': {'type': 'number', 'exclusiveMinimum': 0}, 'storage': {'type': 'boolean'}, 'material': {'type': 'string'}, 'headboard': {'type': 'object', 'required': ['kind', 'width', 'height', 'depth', 'material', 'backPanel', 'root'], 'properties': {'base': {'enum': ['zocalo', 'patas', 'ruedas'], 'type': 'string'}, 'kind': {'type': 'string', 'const': 'modular'}, 'root': {'anyOf': [{'type': 'object', 'required': ['content'], 'properties': {'led': {'type': 'boolean'}, 'door': {'enum': ['izq', 'der', 'doble', 'arriba', 'abajo', 'corrediza'], 'type': 'string'}, 'lock': {'enum': ['magnetica', 'llave'], 'type': 'string'}, 'push': {'type': 'boolean'}, 'content': {'oneOf': [{'type': 'object', 'required': ['c', 'n'], 'properties': {'c': {'type': 'string', 'const': 'estantes'}, 'n': {'type': 'integer', 'maximum': 12, 'minimum': 1}}, 'additionalProperties': False}, {'type': 'object', 'required': ['c', 'n'], 'properties': {'c': {'type': 'string', 'const': 'cajones'}, 'n': {'type': 'integer', 'maximum': 8, 'minimum': 1}, 'lock': {'enum': ['magnetica', 'llave'], 'type': 'string'}, 'push': {'type': 'boolean'}}, 'additionalProperties': False}, {'type': 'object', 'required': ['c'], 'properties': {'c': {'type': 'string', 'const': 'cajonSecreto'}}, 'additionalProperties': False}, {'type': 'object', 'required': ['c'], 'properties': {'c': {'type': 'string', 'const': 'barral'}}, 'additionalProperties': False}, {'type': 'object', 'required': ['c'], 'properties': {'c': {'type': 'string', 'const': 'botellero'}}, 'additionalProperties': False}, {'type': 'object', 'required': ['c', 'n'], 'properties': {'c': {'type': 'string', 'const': 'zapatero'}, 'n': {'type': 'integer', 'maximum': 5, 'minimum': 1}}, 'additionalProperties': False}, {'type': 'object', 'required': ['c', 'n'], 'properties': {'c': {'type': 'string', 'const': 'vidrio'}, 'n': {'type': 'integer', 'maximum': 8, 'minimum': 1}}, 'additionalProperties': False}, {'type': 'object', 'required': ['c', 'n'], 'properties': {'c': {'type': 'string', 'const': 'bandeja'}, 'n': {'type': 'integer', 'maximum': 6, 'minimum': 1}}, 'additionalProperties': False}, {'type': 'object', 'required': ['c', 'n'], 'properties': {'c': {'type': 'string', 'const': 'ranurado'}, 'n': {'type': 'integer', 'maximum': 30, 'minimum': 3}}, 'additionalProperties': False}, {'type': 'object', 'required': ['c'], 'properties': {'c': {'type': 'string', 'const': 'hueco'}}, 'additionalProperties': False}, {'type': 'object', 'required': ['c'], 'properties': {'c': {'type': 'string', 'const': 'vacio'}}, 'additionalProperties': False}]}}, 'additionalProperties': False}, {'$ref': '#/definitions/__schema0'}]}, 'depth': {'type': 'number', 'exclusiveMinimum': 0}, 'width': {'type': 'number', 'exclusiveMinimum': 0}, 'height': {'type': 'number', 'exclusiveMinimum': 0}, 'colgado': {'type': 'boolean'}, 'overlay': {'type': 'boolean'}, 'material': {'type': 'string'}, 'backPanel': {'type': 'boolean'}, 'enCuerpos': {'type': 'boolean'}, 'softClose': {'type': 'boolean'}, 'glassDoors': {'type': 'boolean'}, 'slidingDoor': {'enum': ['full', 'per-column'], 'type': 'string'}, 'techoPasante': {'type': 'boolean'}, 'frontMaterial': {'type': 'string'}}, 'additionalProperties': False}, 'baseHeight': {'type': 'number', 'exclusiveMinimum': 0}, 'bunkHeight': {'type': 'number', 'maximum': 1600, 'minimum': 900}, 'bunkLadderSide': {'enum': ['izq', 'der'], 'type': 'string'}, 'drawersPerSide': {'type': 'integer', 'maximum': 4, 'minimum': 0}, 'headboardShelves': {'type': 'integer', 'maximum': 6, 'minimum': 0}, 'mattressThickness': {'type': 'number', 'exclusiveMinimum': 0}}, 'additionalProperties': False}, {'type': 'object', 'required': ['kind', 'width', 'height', 'depth', 'arms', 'material'], 'properties': {'arms': {'type': 'boolean'}, 'kind': {'type': 'string', 'const': 'sofa'}, 'depth': {'type': 'number', 'exclusiveMinimum': 0}, 'width': {'type': 'number', 'exclusiveMinimum': 0}, 'height': {'type': 'number', 'exclusiveMinimum': 0}, 'material': {'type': 'string'}, 'seatHeight': {'type': 'number', 'exclusiveMinimum': 0}, 'backrestAngle': {'type': 'number', 'maximum': 45, 'minimum': 0}, 'cushionThickness': {'type': 'number', 'minimum': 0}}, 'additionalProperties': False}, {'type': 'object', 'required': ['kind', 'width', 'height', 'depth', 'backrest', 'material'], 'properties': {'kind': {'type': 'string', 'const': 'banqueta'}, 'depth': {'type': 'number', 'exclusiveMinimum': 0}, 'width': {'type': 'number', 'exclusiveMinimum': 0}, 'height': {'type': 'number', 'exclusiveMinimum': 0}, 'backrest': {'type': 'boolean'}, 'material': {'type': 'string'}, 'backrestAngle': {'type': 'number', 'maximum': 45, 'minimum': 0}, 'cushionThickness': {'type': 'number', 'minimum': 0}}, 'additionalProperties': False}, {'type': 'object', 'required': ['kind', 'width', 'height', 'depth', 'material'], 'properties': {'kind': {'type': 'string', 'const': 'espejo'}, 'depth': {'type': 'number', 'exclusiveMinimum': 0}, 'width': {'type': 'number', 'exclusiveMinimum': 0}, 'height': {'type': 'number', 'exclusiveMinimum': 0}, 'material': {'type': 'string'}}, 'additionalProperties': False}, {'type': 'object', 'required': ['kind', 'width', 'height', 'depth', 'lid', 'wheels', 'material'], 'properties': {'lid': {'enum': ['ninguna', 'fija', 'abisagrada'], 'type': 'string'}, 'kind': {'type': 'string', 'const': 'caja'}, 'legs': {'type': 'number', 'maximum': 900, 'minimum': 0}, 'depth': {'type': 'number', 'exclusiveMinimum': 0}, 'width': {'type': 'number', 'exclusiveMinimum': 0}, 'height': {'type': 'number', 'exclusiveMinimum': 0}, 'wheels': {'type': 'boolean'}, 'material': {'type': 'string'}}, 'additionalProperties': False}, {'type': 'object', 'required': ['kind', 'width', 'height', 'depth', 'material'], 'properties': {'kind': {'type': 'string', 'const': 'cortina'}, 'depth': {'type': 'number', 'exclusiveMinimum': 0}, 'width': {'type': 'number', 'exclusiveMinimum': 0}, 'height': {'type': 'number', 'exclusiveMinimum': 0}, 'material': {'type': 'string'}}, 'additionalProperties': False}, {'type': 'object', 'required': ['kind', 'width', 'height', 'depth', 'hojas', 'relleno', 'material'], 'properties': {'kind': {'type': 'string', 'const': 'biombo'}, 'depth': {'type': 'number', 'exclusiveMinimum': 0}, 'hojas': {'type': 'integer', 'maximum': 6, 'minimum': 2}, 'width': {'type': 'number', 'exclusiveMinimum': 0}, 'height': {'type': 'number', 'exclusiveMinimum': 0}, 'relleno': {'type': 'boolean'}, 'material': {'type': 'string'}}, 'additionalProperties': False}, {'type': 'object', 'required': ['kind', 'width', 'height', 'depth', 'slope', 'shelves', 'puerta', 'material'], 'properties': {'kind': {'type': 'string', 'const': 'invernadero'}, 'depth': {'type': 'number', 'exclusiveMinimum': 0}, 'slope': {'type': 'number', 'maximum': 45, 'minimum': 0}, 'width': {'type': 'number', 'exclusiveMinimum': 0}, 'height': {'type': 'number', 'exclusiveMinimum': 0}, 'puerta': {'type': 'boolean'}, 'shelves': {'type': 'integer', 'maximum': 9007199254740991, 'minimum': 0}, 'material': {'type': 'string'}}, 'additionalProperties': False}, {'type': 'object', 'required': ['kind', 'width', 'height', 'depth', 'material', 'backPanel', 'root'], 'properties': {'base': {'enum': ['zocalo', 'patas', 'ruedas'], 'type': 'string'}, 'kind': {'type': 'string', 'const': 'modular'}, 'root': {'anyOf': [{'type': 'object', 'required': ['content'], 'properties': {'led': {'type': 'boolean'}, 'door': {'enum': ['izq', 'der', 'doble', 'arriba', 'abajo', 'corrediza'], 'type': 'string'}, 'lock': {'enum': ['magnetica', 'llave'], 'type': 'string'}, 'push': {'type': 'boolean'}, 'content': {'oneOf': [{'type': 'object', 'required': ['c', 'n'], 'properties': {'c': {'type': 'string', 'const': 'estantes'}, 'n': {'type': 'integer', 'maximum': 12, 'minimum': 1}}, 'additionalProperties': False}, {'type': 'object', 'required': ['c', 'n'], 'properties': {'c': {'type': 'string', 'const': 'cajones'}, 'n': {'type': 'integer', 'maximum': 8, 'minimum': 1}, 'lock': {'enum': ['magnetica', 'llave'], 'type': 'string'}, 'push': {'type': 'boolean'}}, 'additionalProperties': False}, {'type': 'object', 'required': ['c'], 'properties': {'c': {'type': 'string', 'const': 'cajonSecreto'}}, 'additionalProperties': False}, {'type': 'object', 'required': ['c'], 'properties': {'c': {'type': 'string', 'const': 'barral'}}, 'additionalProperties': False}, {'type': 'object', 'required': ['c'], 'properties': {'c': {'type': 'string', 'const': 'botellero'}}, 'additionalProperties': False}, {'type': 'object', 'required': ['c', 'n'], 'properties': {'c': {'type': 'string', 'const': 'zapatero'}, 'n': {'type': 'integer', 'maximum': 5, 'minimum': 1}}, 'additionalProperties': False}, {'type': 'object', 'required': ['c', 'n'], 'properties': {'c': {'type': 'string', 'const': 'vidrio'}, 'n': {'type': 'integer', 'maximum': 8, 'minimum': 1}}, 'additionalProperties': False}, {'type': 'object', 'required': ['c', 'n'], 'properties': {'c': {'type': 'string', 'const': 'bandeja'}, 'n': {'type': 'integer', 'maximum': 6, 'minimum': 1}}, 'additionalProperties': False}, {'type': 'object', 'required': ['c', 'n'], 'properties': {'c': {'type': 'string', 'const': 'ranurado'}, 'n': {'type': 'integer', 'maximum': 30, 'minimum': 3}}, 'additionalProperties': False}, {'type': 'object', 'required': ['c'], 'properties': {'c': {'type': 'string', 'const': 'hueco'}}, 'additionalProperties': False}, {'type': 'object', 'required': ['c'], 'properties': {'c': {'type': 'string', 'const': 'vacio'}}, 'additionalProperties': False}]}}, 'additionalProperties': False}, {'$ref': '#/definitions/__schema0'}]}, 'depth': {'type': 'number', 'exclusiveMinimum': 0}, 'width': {'type': 'number', 'exclusiveMinimum': 0}, 'height': {'type': 'number', 'exclusiveMinimum': 0}, 'colgado': {'type': 'boolean'}, 'overlay': {'type': 'boolean'}, 'material': {'type': 'string'}, 'backPanel': {'type': 'boolean'}, 'enCuerpos': {'type': 'boolean'}, 'softClose': {'type': 'boolean'}, 'glassDoors': {'type': 'boolean'}, 'slidingDoor': {'enum': ['full', 'per-column'], 'type': 'string'}, 'techoPasante': {'type': 'boolean'}, 'frontMaterial': {'type': 'string'}}, 'additionalProperties': False}], 'description': 'Params paramétricos completos del mueble a validar.'}}, 'definitions': {'__schema0': {'type': 'object', 'required': ['s', 'ch'], 'properties': {'s': {'enum': ['V', 'H'], 'type': 'string'}, 'ch': {'type': 'array', 'items': {'type': 'object', 'required': ['f', 'node'], 'properties': {'f': {'type': 'number', 'exclusiveMinimum': 0}, 'alto': {'type': 'number', 'maximum': 3000, 'minimum': 150}, 'node': {'anyOf': [{'type': 'object', 'required': ['content'], 'properties': {'led': {'type': 'boolean'}, 'door': {'enum': ['izq', 'der', 'doble', 'arriba', 'abajo', 'corrediza'], 'type': 'string'}, 'lock': {'enum': ['magnetica', 'llave'], 'type': 'string'}, 'push': {'type': 'boolean'}, 'content': {'oneOf': [{'type': 'object', 'required': ['c', 'n'], 'properties': {'c': {'type': 'string', 'const': 'estantes'}, 'n': {'type': 'integer', 'maximum': 12, 'minimum': 1}}, 'additionalProperties': False}, {'type': 'object', 'required': ['c', 'n'], 'properties': {'c': {'type': 'string', 'const': 'cajones'}, 'n': {'type': 'integer', 'maximum': 8, 'minimum': 1}, 'lock': {'enum': ['magnetica', 'llave'], 'type': 'string'}, 'push': {'type': 'boolean'}}, 'additionalProperties': False}, {'type': 'object', 'required': ['c'], 'properties': {'c': {'type': 'string', 'const': 'cajonSecreto'}}, 'additionalProperties': False}, {'type': 'object', 'required': ['c'], 'properties': {'c': {'type': 'string', 'const': 'barral'}}, 'additionalProperties': False}, {'type': 'object', 'required': ['c'], 'properties': {'c': {'type': 'string', 'const': 'botellero'}}, 'additionalProperties': False}, {'type': 'object', 'required': ['c', 'n'], 'properties': {'c': {'type': 'string', 'const': 'zapatero'}, 'n': {'type': 'integer', 'maximum': 5, 'minimum': 1}}, 'additionalProperties': False}, {'type': 'object', 'required': ['c', 'n'], 'properties': {'c': {'type': 'string', 'const': 'vidrio'}, 'n': {'type': 'integer', 'maximum': 8, 'minimum': 1}}, 'additionalProperties': False}, {'type': 'object', 'required': ['c', 'n'], 'properties': {'c': {'type': 'string', 'const': 'bandeja'}, 'n': {'type': 'integer', 'maximum': 6, 'minimum': 1}}, 'additionalProperties': False}, {'type': 'object', 'required': ['c', 'n'], 'properties': {'c': {'type': 'string', 'const': 'ranurado'}, 'n': {'type': 'integer', 'maximum': 30, 'minimum': 3}}, 'additionalProperties': False}, {'type': 'object', 'required': ['c'], 'properties': {'c': {'type': 'string', 'const': 'hueco'}}, 'additionalProperties': False}, {'type': 'object', 'required': ['c'], 'properties': {'c': {'type': 'string', 'const': 'vacio'}}, 'additionalProperties': False}]}}, 'additionalProperties': False}, {'$ref': '#/definitions/__schema0'}]}, 'prof': {'type': 'number', 'maximum': 1200, 'minimum': 80}, 'colgado': {'type': 'boolean'}}, 'additionalProperties': False}, 'maxItems': 8, 'minItems': 2}, 'door': {'enum': ['izq', 'der', 'doble', 'arriba', 'abajo', 'corrediza'], 'type': 'string'}, 'lock': {'enum': ['magnetica', 'llave'], 'type': 'string'}, 'push': {'type': 'boolean'}}, 'additionalProperties': False}}}
输出模式
{'type': 'object', '$schema': 'http://json-schema.org/draft-07/schema#', 'required': ['factible', 'warnings', 'nota'], 'properties': {'nota': {'type': 'string'}, 'factible': {'type': 'boolean'}, 'warnings': {'type': 'array', 'items': {'type': 'object', 'required': ['tipo', 'severidad', 'mensaje'], 'properties': {'tipo': {'type': 'string'}, 'mensaje': {'type': 'string'}, 'severidad': {'type': 'string'}}, 'additionalProperties': False}}, 'editor_url': {'type': 'string'}}, 'additionalProperties': False}
输入模式
{'type': 'object', '$schema': 'http://json-schema.org/draft-07/schema#', 'properties': {'params': {'oneOf': [{'type': 'object', 'required': ['kind', 'width', 'height', 'depth', 'shelves', 'backPanel', 'material'], 'properties': {'kind': {'type': 'string', 'const': 'shelf'}, 'depth': {'type': 'number', 'exclusiveMinimum': 0}, 'width': {'type': 'number', 'exclusiveMinimum': 0}, 'height': {'type': 'number', 'exclusiveMinimum': 0}, 'shelves': {'type': 'integer', 'maximum': 9007199254740991, 'minimum': 0}, 'material': {'type': 'string'}, 'backPanel': {'type': 'boolean'}, 'openFrame': {'type': 'boolean'}, 'techoPasante': {'type': 'boolean'}}, 'additionalProperties': False}, {'type': 'object', 'required': ['kind', 'width', 'height', 'depth', 'drawers', 'material'], 'properties': {'kind': {'type': 'string', 'const': 'desk'}, 'depth': {'type': 'number', 'exclusiveMinimum': 0}, 'width': {'type': 'number', 'exclusiveMinimum': 0}, 'height': {'type': 'number', 'exclusiveMinimum': 0}, 'drawers': {'type': 'integer', 'maximum': 9007199254740991, 'minimum': 0}, 'material': {'type': 'string'}}, 'additionalProperties': False}, {'type': 'object', 'required': ['kind', 'width', 'height', 'depth', 'doors', 'rod', 'material'], 'properties': {'rod': {'type': 'boolean'}, 'kind': {'type': 'string', 'const': 'wardrobe'}, 'depth': {'type': 'number', 'exclusiveMinimum': 0}, 'doors': {'type': 'integer', 'maximum': 9007199254740991, 'minimum': 0}, 'width': {'type': 'number', 'exclusiveMinimum': 0}, 'height': {'type': 'number', 'exclusiveMinimum': 0}, 'material': {'type': 'string'}, 'techoPasante': {'type': 'boolean'}}, 'additionalProperties': False}, {'type': 'object', 'required': ['kind', 'width', 'depth', 'height', 'rafters', 'postSize', 'slope', 'material'], 'properties': {'kind': {'type': 'string', 'const': 'pergola'}, 'depth': {'type': 'number', 'exclusiveMinimum': 0}, 'slope': {'type': 'number', 'maximum': 45, 'minimum': 0}, 'width': {'type': 'number', 'exclusiveMinimum': 0}, 'height': {'type': 'number', 'exclusiveMinimum': 0}, 'rafters': {'type': 'integer', 'maximum': 9007199254740991, 'minimum': 1}, 'material': {'type': 'string'}, 'postSize': {'type': 'number', 'exclusiveMinimum': 0}}, 'additionalProperties': False}, {'type': 'object', 'required': ['kind', 'width', 'depth', 'boardWidth', 'gap', 'joists', 'material'], 'properties': {'gap': {'type': 'number', 'minimum': 0}, 'kind': {'type': 'string', 'const': 'deck'}, 'depth': {'type': 'number', 'exclusiveMinimum': 0}, 'width': {'type': 'number', 'exclusiveMinimum': 0}, 'joists': {'type': 'integer', 'maximum': 9007199254740991, 'minimum': 1}, 'material': {'type': 'string'}, 'boardWidth': {'type': 'number', 'exclusiveMinimum': 0}}, 'additionalProperties': False}, {'type': 'object', 'required': ['kind', 'width', 'height', 'depth', 'legSize', 'material'], 'properties': {'kind': {'type': 'string', 'const': 'table'}, 'depth': {'type': 'number', 'exclusiveMinimum': 0}, 'width': {'type': 'number', 'exclusiveMinimum': 0}, 'height': {'type': 'number', 'exclusiveMinimum': 0}, 'legSize': {'type': 'number', 'exclusiveMinimum': 0}, 'material': {'type': 'string'}}, 'additionalProperties': False}, {'type': 'object', 'required': ['kind', 'width', 'height', 'depth', 'tabletopDepth', 'seatHeight', 'material'], 'properties': {'kind': {'type': 'string', 'const': 'picnic'}, 'depth': {'type': 'number', 'exclusiveMinimum': 0}, 'width': {'type': 'number', 'exclusiveMinimum': 0}, 'height': {'type': 'number', 'exclusiveMinimum': 0}, 'material': {'type': 'string'}, 'seatHeight': {'type': 'number', 'exclusiveMinimum': 0}, 'tabletopDepth': {'type': 'number', 'exclusiveMinimum': 0}}, 'additionalProperties': False}, {'type': 'object', 'required': ['kind', 'width', 'height', 'depth', 'storage', 'material'], 'properties': {'bunk': {'type': 'boolean'}, 'kind': {'type': 'string', 'const': 'cama'}, 'depth': {'type': 'number', 'exclusiveMinimum': 0}, 'width': {'type': 'number', 'exclusiveMinimum': 0}, 'height': {'type': 'number', 'exclusiveMinimum': 0}, 'storage': {'type': 'boolean'}, 'material': {'type': 'string'}, 'headboard': {'type': 'object', 'required': ['kind', 'width', 'height', 'depth', 'material', 'backPanel', 'root'], 'properties': {'base': {'enum': ['zocalo', 'patas', 'ruedas'], 'type': 'string'}, 'kind': {'type': 'string', 'const': 'modular'}, 'root': {'anyOf': [{'type': 'object', 'required': ['content'], 'properties': {'led': {'type': 'boolean'}, 'door': {'enum': ['izq', 'der', 'doble', 'arriba', 'abajo', 'corrediza'], 'type': 'string'}, 'lock': {'enum': ['magnetica', 'llave'], 'type': 'string'}, 'push': {'type': 'boolean'}, 'content': {'oneOf': [{'type': 'object', 'required': ['c', 'n'], 'properties': {'c': {'type': 'string', 'const': 'estantes'}, 'n': {'type': 'integer', 'maximum': 12, 'minimum': 1}}, 'additionalProperties': False}, {'type': 'object', 'required': ['c', 'n'], 'properties': {'c': {'type': 'string', 'const': 'cajones'}, 'n': {'type': 'integer', 'maximum': 8, 'minimum': 1}, 'lock': {'enum': ['magnetica', 'llave'], 'type': 'string'}, 'push': {'type': 'boolean'}}, 'additionalProperties': False}, {'type': 'object', 'required': ['c'], 'properties': {'c': {'type': 'string', 'const': 'cajonSecreto'}}, 'additionalProperties': False}, {'type': 'object', 'required': ['c'], 'properties': {'c': {'type': 'string', 'const': 'barral'}}, 'additionalProperties': False}, {'type': 'object', 'required': ['c'], 'properties': {'c': {'type': 'string', 'const': 'botellero'}}, 'additionalProperties': False}, {'type': 'object', 'required': ['c', 'n'], 'properties': {'c': {'type': 'string', 'const': 'zapatero'}, 'n': {'type': 'integer', 'maximum': 5, 'minimum': 1}}, 'additionalProperties': False}, {'type': 'object', 'required': ['c', 'n'], 'properties': {'c': {'type': 'string', 'const': 'vidrio'}, 'n': {'type': 'integer', 'maximum': 8, 'minimum': 1}}, 'additionalProperties': False}, {'type': 'object', 'required': ['c', 'n'], 'properties': {'c': {'type': 'string', 'const': 'bandeja'}, 'n': {'type': 'integer', 'maximum': 6, 'minimum': 1}}, 'additionalProperties': False}, {'type': 'object', 'required': ['c', 'n'], 'properties': {'c': {'type': 'string', 'const': 'ranurado'}, 'n': {'type': 'integer', 'maximum': 30, 'minimum': 3}}, 'additionalProperties': False}, {'type': 'object', 'required': ['c'], 'properties': {'c': {'type': 'string', 'const': 'hueco'}}, 'additionalProperties': False}, {'type': 'object', 'required': ['c'], 'properties': {'c': {'type': 'string', 'const': 'vacio'}}, 'additionalProperties': False}]}}, 'additionalProperties': False}, {'$ref': '#/definitions/__schema0'}]}, 'depth': {'type': 'number', 'exclusiveMinimum': 0}, 'width': {'type': 'number', 'exclusiveMinimum': 0}, 'height': {'type': 'number', 'exclusiveMinimum': 0}, 'colgado': {'type': 'boolean'}, 'overlay': {'type': 'boolean'}, 'material': {'type': 'string'}, 'backPanel': {'type': 'boolean'}, 'enCuerpos': {'type': 'boolean'}, 'softClose': {'type': 'boolean'}, 'glassDoors': {'type': 'boolean'}, 'slidingDoor': {'enum': ['full', 'per-column'], 'type': 'string'}, 'techoPasante': {'type': 'boolean'}, 'frontMaterial': {'type': 'string'}}, 'additionalProperties': False}, 'baseHeight': {'type': 'number', 'exclusiveMinimum': 0}, 'bunkHeight': {'type': 'number', 'maximum': 1600, 'minimum': 900}, 'bunkLadderSide': {'enum': ['izq', 'der'], 'type': 'string'}, 'drawersPerSide': {'type': 'integer', 'maximum': 4, 'minimum': 0}, 'headboardShelves': {'type': 'integer', 'maximum': 6, 'minimum': 0}, 'mattressThickness': {'type': 'number', 'exclusiveMinimum': 0}}, 'additionalProperties': False}, {'type': 'object', 'required': ['kind', 'width', 'height', 'depth', 'arms', 'material'], 'properties': {'arms': {'type': 'boolean'}, 'kind': {'type': 'string', 'const': 'sofa'}, 'depth': {'type': 'number', 'exclusiveMinimum': 0}, 'width': {'type': 'number', 'exclusiveMinimum': 0}, 'height': {'type': 'number', 'exclusiveMinimum': 0}, 'material': {'type': 'string'}, 'seatHeight': {'type': 'number', 'exclusiveMinimum': 0}, 'backrestAngle': {'type': 'number', 'maximum': 45, 'minimum': 0}, 'cushionThickness': {'type': 'number', 'minimum': 0}}, 'additionalProperties': False}, {'type': 'object', 'required': ['kind', 'width', 'height', 'depth', 'backrest', 'material'], 'properties': {'kind': {'type': 'string', 'const': 'banqueta'}, 'depth': {'type': 'number', 'exclusiveMinimum': 0}, 'width': {'type': 'number', 'exclusiveMinimum': 0}, 'height': {'type': 'number', 'exclusiveMinimum': 0}, 'backrest': {'type': 'boolean'}, 'material': {'type': 'string'}, 'backrestAngle': {'type': 'number', 'maximum': 45, 'minimum': 0}, 'cushionThickness': {'type': 'number', 'minimum': 0}}, 'additionalProperties': False}, {'type': 'object', 'required': ['kind', 'width', 'height', 'depth', 'material'], 'properties': {'kind': {'type': 'string', 'const': 'espejo'}, 'depth': {'type': 'number', 'exclusiveMinimum': 0}, 'width': {'type': 'number', 'exclusiveMinimum': 0}, 'height': {'type': 'number', 'exclusiveMinimum': 0}, 'material': {'type': 'string'}}, 'additionalProperties': False}, {'type': 'object', 'required': ['kind', 'width', 'height', 'depth', 'lid', 'wheels', 'material'], 'properties': {'lid': {'enum': ['ninguna', 'fija', 'abisagrada'], 'type': 'string'}, 'kind': {'type': 'string', 'const': 'caja'}, 'legs': {'type': 'number', 'maximum': 900, 'minimum': 0}, 'depth': {'type': 'number', 'exclusiveMinimum': 0}, 'width': {'type': 'number', 'exclusiveMinimum': 0}, 'height': {'type': 'number', 'exclusiveMinimum': 0}, 'wheels': {'type': 'boolean'}, 'material': {'type': 'string'}}, 'additionalProperties': False}, {'type': 'object', 'required': ['kind', 'width', 'height', 'depth', 'material'], 'properties': {'kind': {'type': 'string', 'const': 'cortina'}, 'depth': {'type': 'number', 'exclusiveMinimum': 0}, 'width': {'type': 'number', 'exclusiveMinimum': 0}, 'height': {'type': 'number', 'exclusiveMinimum': 0}, 'material': {'type': 'string'}}, 'additionalProperties': False}, {'type': 'object', 'required': ['kind', 'width', 'height', 'depth', 'hojas', 'relleno', 'material'], 'properties': {'kind': {'type': 'string', 'const': 'biombo'}, 'depth': {'type': 'number', 'exclusiveMinimum': 0}, 'hojas': {'type': 'integer', 'maximum': 6, 'minimum': 2}, 'width': {'type': 'number', 'exclusiveMinimum': 0}, 'height': {'type': 'number', 'exclusiveMinimum': 0}, 'relleno': {'type': 'boolean'}, 'material': {'type': 'string'}}, 'additionalProperties': False}, {'type': 'object', 'required': ['kind', 'width', 'height', 'depth', 'slope', 'shelves', 'puerta', 'material'], 'properties': {'kind': {'type': 'string', 'const': 'invernadero'}, 'depth': {'type': 'number', 'exclusiveMinimum': 0}, 'slope': {'type': 'number', 'maximum': 45, 'minimum': 0}, 'width': {'type': 'number', 'exclusiveMinimum': 0}, 'height': {'type': 'number', 'exclusiveMinimum': 0}, 'puerta': {'type': 'boolean'}, 'shelves': {'type': 'integer', 'maximum': 9007199254740991, 'minimum': 0}, 'material': {'type': 'string'}}, 'additionalProperties': False}, {'type': 'object', 'required': ['kind', 'width', 'height', 'depth', 'material', 'backPanel', 'root'], 'properties': {'base': {'enum': ['zocalo', 'patas', 'ruedas'], 'type': 'string'}, 'kind': {'type': 'string', 'const': 'modular'}, 'root': {'anyOf': [{'type': 'object', 'required': ['content'], 'properties': {'led': {'type': 'boolean'}, 'door': {'enum': ['izq', 'der', 'doble', 'arriba', 'abajo', 'corrediza'], 'type': 'string'}, 'lock': {'enum': ['magnetica', 'llave'], 'type': 'string'}, 'push': {'type': 'boolean'}, 'content': {'oneOf': [{'type': 'object', 'required': ['c', 'n'], 'properties': {'c': {'type': 'string', 'const': 'estantes'}, 'n': {'type': 'integer', 'maximum': 12, 'minimum': 1}}, 'additionalProperties': False}, {'type': 'object', 'required': ['c', 'n'], 'properties': {'c': {'type': 'string', 'const': 'cajones'}, 'n': {'type': 'integer', 'maximum': 8, 'minimum': 1}, 'lock': {'enum': ['magnetica', 'llave'], 'type': 'string'}, 'push': {'type': 'boolean'}}, 'additionalProperties': False}, {'type': 'object', 'required': ['c'], 'properties': {'c': {'type': 'string', 'const': 'cajonSecreto'}}, 'additionalProperties': False}, {'type': 'object', 'required': ['c'], 'properties': {'c': {'type': 'string', 'const': 'barral'}}, 'additionalProperties': False}, {'type': 'object', 'required': ['c'], 'properties': {'c': {'type': 'string', 'const': 'botellero'}}, 'additionalProperties': False}, {'type': 'object', 'required': ['c', 'n'], 'properties': {'c': {'type': 'string', 'const': 'zapatero'}, 'n': {'type': 'integer', 'maximum': 5, 'minimum': 1}}, 'additionalProperties': False}, {'type': 'object', 'required': ['c', 'n'], 'properties': {'c': {'type': 'string', 'const': 'vidrio'}, 'n': {'type': 'integer', 'maximum': 8, 'minimum': 1}}, 'additionalProperties': False}, {'type': 'object', 'required': ['c', 'n'], 'properties': {'c': {'type': 'string', 'const': 'bandeja'}, 'n': {'type': 'integer', 'maximum': 6, 'minimum': 1}}, 'additionalProperties': False}, {'type': 'object', 'required': ['c', 'n'], 'properties': {'c': {'type': 'string', 'const': 'ranurado'}, 'n': {'type': 'integer', 'maximum': 30, 'minimum': 3}}, 'additionalProperties': False}, {'type': 'object', 'required': ['c'], 'properties': {'c': {'type': 'string', 'const': 'hueco'}}, 'additionalProperties': False}, {'type': 'object', 'required': ['c'], 'properties': {'c': {'type': 'string', 'const': 'vacio'}}, 'additionalProperties': False}]}}, 'additionalProperties': False}, {'$ref': '#/definitions/__schema0'}]}, 'depth': {'type': 'number', 'exclusiveMinimum': 0}, 'width': {'type': 'number', 'exclusiveMinimum': 0}, 'height': {'type': 'number', 'exclusiveMinimum': 0}, 'colgado': {'type': 'boolean'}, 'overlay': {'type': 'boolean'}, 'material': {'type': 'string'}, 'backPanel': {'type': 'boolean'}, 'enCuerpos': {'type': 'boolean'}, 'softClose': {'type': 'boolean'}, 'glassDoors': {'type': 'boolean'}, 'slidingDoor': {'enum': ['full', 'per-column'], 'type': 'string'}, 'techoPasante': {'type': 'boolean'}, 'frontMaterial': {'type': 'string'}}, 'additionalProperties': False}], 'description': "Params paramétricos completos del mueble (alternativa a 'preset'). Requerido si no se pasa 'preset'. Debe incluir kind, material y las medidas y opciones requeridas por ese kind; deck no lleva height. El schema enumera todos los campos por kind. Modular: frontMaterial (mismo espesor que material), softClose, base, colgado, enCuerpos, slidingDoor, glassDoors, overlay y techoPasante (techo al ancho total sobre los laterales; también en shelf y wardrobe). root admite cortes V/H anidados; cada hijo tiene f y, si genera cuerpo, alto/prof/colgado. En cortes H el alto se reparte con f, no con alto. height y depth deben abarcar todos los cuerpos. Cada hoja admite door, lock, push y led; content.c incluye cajonSecreto y cajones con content.lock/content.push. Shelf: shelves:0 deja solo carcasa; openFrame usa bastidor sin fondo. Cama: headboard modular, headboardShelves, drawersPerSide, bunk, bunkHeight, bunkLadderSide, mattressThickness, baseHeight. Sofá/banqueta: seatHeight (sofá), backrestAngle y cushionThickness. Otros tipos exponen sus opciones en el schema. Los avisos explican qué opción se recortó o no se aplicó y cómo corregirla."}, 'preset': {'type': 'string', 'description': "ID del preset del mueble a visualizar. Requerido si no se pasa 'params'. Ejemplos: 'placard-corredizo', 'biblioteca', 'escritorio-cajonera', 'comoda', 'bajo-mesada'. Usá listar_presets para ver todos los ids disponibles."}, 'ajustes': {'type': 'object', 'properties': {'alto_mm': {'type': 'number', 'exclusiveMinimum': 0}, 'ancho_mm': {'type': 'number', 'exclusiveMinimum': 0}, 'profundidad_mm': {'type': 'number', 'exclusiveMinimum': 0}}, 'description': 'Ajustes de medidas opcionales, en milÃ\xadmetros, sobre el preset O sobre los params que pases. Sólo los campos que querés sobreescribir. Ej: {ancho_mm: 2400}.', 'additionalProperties': False}}, 'definitions': {'__schema0': {'type': 'object', 'required': ['s', 'ch'], 'properties': {'s': {'enum': ['V', 'H'], 'type': 'string'}, 'ch': {'type': 'array', 'items': {'type': 'object', 'required': ['f', 'node'], 'properties': {'f': {'type': 'number', 'exclusiveMinimum': 0}, 'alto': {'type': 'number', 'maximum': 3000, 'minimum': 150}, 'node': {'anyOf': [{'type': 'object', 'required': ['content'], 'properties': {'led': {'type': 'boolean'}, 'door': {'enum': ['izq', 'der', 'doble', 'arriba', 'abajo', 'corrediza'], 'type': 'string'}, 'lock': {'enum': ['magnetica', 'llave'], 'type': 'string'}, 'push': {'type': 'boolean'}, 'content': {'oneOf': [{'type': 'object', 'required': ['c', 'n'], 'properties': {'c': {'type': 'string', 'const': 'estantes'}, 'n': {'type': 'integer', 'maximum': 12, 'minimum': 1}}, 'additionalProperties': False}, {'type': 'object', 'required': ['c', 'n'], 'properties': {'c': {'type': 'string', 'const': 'cajones'}, 'n': {'type': 'integer', 'maximum': 8, 'minimum': 1}, 'lock': {'enum': ['magnetica', 'llave'], 'type': 'string'}, 'push': {'type': 'boolean'}}, 'additionalProperties': False}, {'type': 'object', 'required': ['c'], 'properties': {'c': {'type': 'string', 'const': 'cajonSecreto'}}, 'additionalProperties': False}, {'type': 'object', 'required': ['c'], 'properties': {'c': {'type': 'string', 'const': 'barral'}}, 'additionalProperties': False}, {'type': 'object', 'required': ['c'], 'properties': {'c': {'type': 'string', 'const': 'botellero'}}, 'additionalProperties': False}, {'type': 'object', 'required': ['c', 'n'], 'properties': {'c': {'type': 'string', 'const': 'zapatero'}, 'n': {'type': 'integer', 'maximum': 5, 'minimum': 1}}, 'additionalProperties': False}, {'type': 'object', 'required': ['c', 'n'], 'properties': {'c': {'type': 'string', 'const': 'vidrio'}, 'n': {'type': 'integer', 'maximum': 8, 'minimum': 1}}, 'additionalProperties': False}, {'type': 'object', 'required': ['c', 'n'], 'properties': {'c': {'type': 'string', 'const': 'bandeja'}, 'n': {'type': 'integer', 'maximum': 6, 'minimum': 1}}, 'additionalProperties': False}, {'type': 'object', 'required': ['c', 'n'], 'properties': {'c': {'type': 'string', 'const': 'ranurado'}, 'n': {'type': 'integer', 'maximum': 30, 'minimum': 3}}, 'additionalProperties': False}, {'type': 'object', 'required': ['c'], 'properties': {'c': {'type': 'string', 'const': 'hueco'}}, 'additionalProperties': False}, {'type': 'object', 'required': ['c'], 'properties': {'c': {'type': 'string', 'const': 'vacio'}}, 'additionalProperties': False}]}}, 'additionalProperties': False}, {'$ref': '#/definitions/__schema0'}]}, 'prof': {'type': 'number', 'maximum': 1200, 'minimum': 80}, 'colgado': {'type': 'boolean'}}, 'additionalProperties': False}, 'maxItems': 8, 'minItems': 2}, 'door': {'enum': ['izq', 'der', 'doble', 'arriba', 'abajo', 'corrediza'], 'type': 'string'}, 'lock': {'enum': ['magnetica', 'llave'], 'type': 'string'}, 'push': {'type': 'boolean'}}, 'additionalProperties': False}}}
输出模式
{'type': 'object', '$schema': 'http://json-schema.org/draft-07/schema#', 'required': ['mueble', 'medidas_mm', 'nota', 'editor_url'], 'properties': {'nota': {'type': 'string'}, 'mueble': {'type': 'string'}, 'editor_url': {'type': 'string'}, 'medidas_mm': {'type': 'object', 'required': ['ancho', 'alto', 'profundidad'], 'properties': {'alto': {'type': 'number'}, 'ancho': {'type': 'number'}, 'profundidad': {'type': 'number'}}, 'additionalProperties': False}}, 'additionalProperties': False}
近期工具变更
类似的 MCP 服务器
roastify-mcp
Supports a coffee commerce workflow with product and blend catalogs, inventory, coupons, packaging design editing, artwork genera…
YouCam for Beauty & Personal Care
Offers image-based beauty and personal-care analysis and virtual try-on tools for makeup, hair, facial features, body reshaping, …
agentee
Searches and purchases all-over print apparel, manages carts, promotions, shipping, checkout, orders, and user-submitted designs.
mu
Supports AI-assisted print-on-demand product design, storefronts, manufacturing quotes, orders, fulfillment, shipping, sales, and…
studiomcphub
Provides image enhancement, background removal, vectorization, color and print preparation, artwork search and analysis, product …
Capucine
Provides sourced personal styling guidance, weather-aware outfit recommendations, apparel shopping criteria, and links to verifie…
YouCam for Fashion & Retail
Provides image-based virtual try-on experiences for clothing, accessories, jewelry, watches, makeup, fabric, hats, scarves, and s…
R3PLICA AI Connector
Searches and presents premium design-brand products, collections, finishes, specifications, comparisons, images, and catalog link…