Calculiva Cut Planner
Plans flooring, trim and wallpaper orders from computed cut layouts. Free, read-only, no account.
Should I use this
Quality & Safety
Based on automated analysis of tool definitions and protocol compliance.
Context Cost
This is the approximate number of tokens consumed each time the server's tools are loaded into a model's context. Higher counts reduce the attention available for other tasks.
Install
One-Click Install
Add this to your `claude_desktop_config.json` file:
{
"mcpServers": {
"cut-planner": {
"url": "https://mcp.calculiva.com/mcp"
}
}
}Remote endpoints
https://mcp.calculiva.com/mcpstreamable-httpWhat it can do
Tool inventory
Tools (4)
🟢plan_trim_order(project, wallWidth, wallHeight, baseboardHeight, openings, ...)
Plans board and batten, wainscoting or picture frame molding on one wall: spacing, the cut list (miter long and short points for frames) and how many boards of each retail length to buy, with the total length bought and offcut percentage for each stock length; the length to buy is the one that buys the least total length, then the least offcut, then the fewest boards. The cut plan is first-fit decreasing: feasible, not proven optimal. Lengths accept feet and inches. Returns a link to the full plan on calculiva.com.
Input Schema
{
"type": "object",
"properties": {
"project": {
"type": "string",
"enum": [
"board-and-batten",
"wainscoting",
"picture-frame-molding"
],
"description": "board-and-batten, wainscoting (applied frames or stile and rail) or picture-frame-molding (boxes of 45° mitered molding)."
},
"wallWidth": {
"anyOf": [
{
"type": "string",
"minLength": 1,
"maxLength": 80
},
{
"type": "number",
"minimum": 0
}
],
"description": "Wall width. Length with its unit, e.g. \"12 ft 6 in\", \"12'6\\\"\", \"150 in\", \"3m80\"; a bare number is read as inches."
},
"wallHeight": {
"anyOf": [
{
"type": "string",
"minLength": 1,
"maxLength": 80
},
{
"type": "number",
"minimum": 0
}
],
"description": "Wall height, floor to ceiling. Length with its unit, e.g. \"12 ft 6 in\", \"12'6\\\"\", \"150 in\", \"3m80\"; a bare number is read as inches."
},
"baseboardHeight": {
"anyOf": [
{
"type": "string",
"minLength": 1,
"maxLength": 80
},
{
"type": "number",
"minimum": 0
}
],
"description": "Existing baseboard height; \"0\" if none. Default 5 1/4 in. Length with its unit, e.g. \"12 ft 6 in\", \"12'6\\\"\", \"150 in\", \"3m80\"; a bare number is read as inches."
},
"openings": {
"type": "array",
"items": {
"type": "object",
"properties": {
"position": {
"anyOf": [
{
"type": "string",
"minLength": 1,
"maxLength": 80
},
{
"type": "number",
"minimum": 0
}
],
"description": "Distance from the left end of the wall to the left edge of the opening or obstacle. Length with its unit, e.g. \"12 ft 6 in\", \"12'6\\\"\", \"150 in\", \"3m80\"; a bare number is read as inches."
},
"width": {
"anyOf": [
{
"type": "string",
"minLength": 1,
"maxLength": 80
},
{
"type": "number",
"minimum": 0
}
],
"description": "Width of the opening or obstacle (window, door, outlet, switch). Length with its unit, e.g. \"12 ft 6 in\", \"12'6\\\"\", \"150 in\", \"3m80\"; a bare number is read as inches."
},
"label": {
"type": "string",
"maxLength": 40,
"description": "Name shown in the plan, e.g. \"window\""
}
},
"required": [
"position",
"width"
],
"additionalProperties": false
},
"maxItems": 4,
"description": "Up to 4 openings or obstacles on the wall; pieces that land on them are flagged and left out of the cut list."
},
"stockLengthsFt": {
"type": "array",
"items": {
"type": "number",
"exclusiveMinimum": 0,
"maximum": 24
},
"minItems": 1,
"maxItems": 8,
"description": "Board lengths you can buy, in feet (1 to 8 values, each up to 24). Default: 8, 10, 12 and 16 ft are compared and any of them can be recommended; pass the lengths your store sells to plan on those."
},
"kerf": {
"anyOf": [
{
"type": "string",
"minLength": 1,
"maxLength": 80
},
{
"type": "number",
"minimum": 0
}
],
"description": "Saw kerf, charged between two cuts on the same board. Default 1/8 in. Length with its unit, e.g. \"12 ft 6 in\", \"12'6\\\"\", \"150 in\", \"3m80\"; a bare number is read as inches."
},
"extraPercent": {
"type": "number",
"minimum": 0,
"maximum": 100,
"description": "Extra boards to buy, % of the boards in the cut plan. Default 10."
},
"battenWidth": {
"anyOf": [
{
"type": "string",
"minLength": 1,
"maxLength": 80
},
{
"type": "number",
"minimum": 0
}
],
"description": "board-and-batten: actual batten width (a 1x3 is 2 1/2 in). Default 2 1/2 in. Length with its unit, e.g. \"12 ft 6 in\", \"12'6\\\"\", \"150 in\", \"3m80\"; a bare number is read as inches."
},
"battenCount": {
"type": "integer",
"minimum": 1,
"maximum": 400,
"description": "board-and-batten: number of battens. Omit to use battenSpacing."
},
"battenSpacing": {
"anyOf": [
{
"type": "string",
"minLength": 1,
"maxLength": 80
},
{
"type": "number",
"minimum": 0
}
],
"description": "board-and-batten: target gap between battens, used when battenCount is omitted. Default 12 in. Length with its unit, e.g. \"12 ft 6 in\", \"12'6\\\"\", \"150 in\", \"3m80\"; a bare number is read as inches."
},
"edge": {
"type": "string",
"enum": [
"space",
"batten"
],
"description": "board-and-batten: start and end the wall with a space (default) or with a batten."
},
"layout": {
"type": "string",
"enum": [
"vertical",
"grid"
],
"description": "board-and-batten: vertical battens (default) or a grid with horizontal rails."
},
"railCount": {
"type": "integer",
"minimum": 1,
"maximum": 20,
"description": "board-and-batten grid: horizontal rails per bay. Default 2."
},
"fullHeight": {
"type": "boolean",
"description": "board-and-batten: battens run to the ceiling. Default false."
},
"topRailHeight": {
"anyOf": [
{
"type": "string",
"minLength": 1,
"maxLength": 80
},
{
"type": "number",
"minimum": 0
}
],
"description": "board-and-batten: height of the top of the top rail from the floor. Default 32 in. Length with its unit, e.g. \"12 ft 6 in\", \"12'6\\\"\", \"150 in\", \"3m80\"; a bare number is read as inches."
},
"topRailWidth": {
"anyOf": [
{
"type": "string",
"minLength": 1,
"maxLength": 80
},
{
"type": "number",
"minimum": 0
}
],
"description": "board-and-batten top rail, or wainscoting stile-and-rail top rail width. Default 3 1/2 in. Length with its unit, e.g. \"12 ft 6 in\", \"12'6\\\"\", \"150 in\", \"3m80\"; a bare number is read as inches."
},
"style": {
"type": "string",
"enum": [
"applied-frames",
"stile-and-rail"
],
"description": "wainscoting: applied molding frames (default) or stiles and rails."
},
"wainscotHeight": {
"anyOf": [
{
"type": "string",
"minLength": 1,
"maxLength": 80
},
{
"type": "number",
"minimum": 0
}
],
"description": "wainscoting: overall height from the floor, chair rail included. Default 32 in. Length with its unit, e.g. \"12 ft 6 in\", \"12'6\\\"\", \"150 in\", \"3m80\"; a bare number is read as inches."
},
"chairRailWidth": {
"anyOf": [
{
"type": "string",
"minLength": 1,
"maxLength": 80
},
{
"type": "number",
"minimum": 0
}
],
"description": "wainscoting: chair rail height (board width). Default 2 1/2 in. Length with its unit, e.g. \"12 ft 6 in\", \"12'6\\\"\", \"150 in\", \"3m80\"; a bare number is read as inches."
},
"memberWidth": {
"anyOf": [
{
"type": "string",
"minLength": 1,
"maxLength": 80
},
{
"type": "number",
"minimum": 0
}
],
"description": "wainscoting: stile width, or side reveal between frames. Default 3 1/2 in. Length with its unit, e.g. \"12 ft 6 in\", \"12'6\\\"\", \"150 in\", \"3m80\"; a bare number is read as inches."
},
"panelCount": {
"type": "integer",
"minimum": 1,
"maximum": 60,
"description": "wainscoting: number of panels or frames. Omit to use panelWidth."
},
"panelWidth": {
"anyOf": [
{
"type": "string",
"minLength": 1,
"maxLength": 80
},
{
"type": "number",
"minimum": 0
}
],
"description": "wainscoting: target panel width, used when panelCount is omitted. Default 30 in. Length with its unit, e.g. \"12 ft 6 in\", \"12'6\\\"\", \"150 in\", \"3m80\"; a bare number is read as inches."
},
"revealVertical": {
"anyOf": [
{
"type": "string",
"minLength": 1,
"maxLength": 80
},
{
"type": "number",
"minimum": 0
}
],
"description": "wainscoting applied-frames: reveal above and below each frame. Default 3 1/2 in. Length with its unit, e.g. \"12 ft 6 in\", \"12'6\\\"\", \"150 in\", \"3m80\"; a bare number is read as inches."
},
"bottomRailWidth": {
"anyOf": [
{
"type": "string",
"minLength": 1,
"maxLength": 80
},
{
"type": "number",
"minimum": 0
}
],
"description": "wainscoting stile-and-rail: bottom rail width. Default 5 1/2 in. Length with its unit, e.g. \"12 ft 6 in\", \"12'6\\\"\", \"150 in\", \"3m80\"; a bare number is read as inches."
},
"moldingWidth": {
"anyOf": [
{
"type": "string",
"minLength": 1,
"maxLength": 80
},
{
"type": "number",
"minimum": 0
}
],
"description": "wainscoting applied-frames (default 1 1/4 in) or picture-frame-molding (default 1 in): molding face width. Length with its unit, e.g. \"12 ft 6 in\", \"12'6\\\"\", \"150 in\", \"3m80\"; a bare number is read as inches."
},
"hasCap": {
"type": "boolean",
"description": "picture-frame-molding: a chair rail caps the boxes (default true); false = boxes run to the ceiling."
},
"capHeight": {
"anyOf": [
{
"type": "string",
"minLength": 1,
"maxLength": 80
},
{
"type": "number",
"minimum": 0
}
],
"description": "picture-frame-molding: height of the underside of the chair rail. Default 36 in. Length with its unit, e.g. \"12 ft 6 in\", \"12'6\\\"\", \"150 in\", \"3m80\"; a bare number is read as inches."
},
"columns": {
"type": "integer",
"minimum": 1,
"maximum": 40,
"description": "picture-frame-molding: boxes across. Default 4."
},
"rows": {
"type": "integer",
"minimum": 1,
"maximum": 10,
"description": "picture-frame-molding: rows of boxes. Default 1."
},
"gapX": {
"anyOf": [
{
"type": "string",
"minLength": 1,
"maxLength": 80
},
{
"type": "number",
"minimum": 0
}
],
"description": "picture-frame-molding: gap between boxes. Default 4 in. Length with its unit, e.g. \"12 ft 6 in\", \"12'6\\\"\", \"150 in\", \"3m80\"; a bare number is read as inches."
},
"gapY": {
"anyOf": [
{
"type": "string",
"minLength": 1,
"maxLength": 80
},
{
"type": "number",
"minimum": 0
}
],
"description": "picture-frame-molding: gap between rows. Default 4 in. Length with its unit, e.g. \"12 ft 6 in\", \"12'6\\\"\", \"150 in\", \"3m80\"; a bare number is read as inches."
},
"edgeX": {
"anyOf": [
{
"type": "string",
"minLength": 1,
"maxLength": 80
},
{
"type": "number",
"minimum": 0
}
],
"description": "picture-frame-molding: side margin. Default 4 in. Length with its unit, e.g. \"12 ft 6 in\", \"12'6\\\"\", \"150 in\", \"3m80\"; a bare number is read as inches."
},
"edgeTop": {
"anyOf": [
{
"type": "string",
"minLength": 1,
"maxLength": 80
},
{
"type": "number",
"minimum": 0
}
],
"description": "picture-frame-molding: top margin. Default 4 in. Length with its unit, e.g. \"12 ft 6 in\", \"12'6\\\"\", \"150 in\", \"3m80\"; a bare number is read as inches."
},
"edgeBottom": {
"anyOf": [
{
"type": "string",
"minLength": 1,
"maxLength": 80
},
{
"type": "number",
"minimum": 0
}
],
"description": "picture-frame-molding: bottom margin. Default 4 in. Length with its unit, e.g. \"12 ft 6 in\", \"12'6\\\"\", \"150 in\", \"3m80\"; a bare number is read as inches."
}
},
"required": [
"project",
"wallWidth",
"wallHeight"
],
"additionalProperties": false,
"$schema": "http://json-schema.org/draft-07/schema#"
}Output Schema
{
"type": "object",
"properties": {
"project": {
"type": "string",
"enum": [
"board-and-batten",
"wainscoting",
"picture-frame-molding"
]
},
"buy": {
"anyOf": [
{
"type": "object",
"properties": {
"stockLengthFt": {
"type": "number"
},
"boardsToBuy": {
"type": "integer"
},
"boardsInPlan": {
"$ref": "#/properties/buy/anyOf/0/properties/boardsToBuy"
},
"extraBoards": {
"$ref": "#/properties/buy/anyOf/0/properties/boardsToBuy"
},
"boughtFt": {
"$ref": "#/properties/buy/anyOf/0/properties/stockLengthFt"
},
"offcutPercent": {
"$ref": "#/properties/buy/anyOf/0/properties/stockLengthFt"
}
},
"required": [
"stockLengthFt",
"boardsToBuy",
"boardsInPlan",
"extraBoards",
"boughtFt",
"offcutPercent"
],
"additionalProperties": false
},
{
"type": "null"
}
],
"description": "Boards to buy: the best stock length by comparisonRule; null when no length holds the longest piece."
},
"noStockFits": {
"anyOf": [
{
"type": "array",
"items": {
"type": "string"
}
},
{
"type": "null"
}
]
},
"stockComparison": {
"type": "array",
"items": {
"type": "object",
"properties": {
"stockLengthFt": {
"$ref": "#/properties/buy/anyOf/0/properties/stockLengthFt"
},
"feasible": {
"type": "boolean"
},
"boardsToBuy": {
"anyOf": [
{
"$ref": "#/properties/buy/anyOf/0/properties/boardsToBuy"
},
{
"type": "null"
}
]
},
"boughtFt": {
"type": [
"number",
"null"
]
},
"offcutPercent": {
"type": [
"number",
"null"
]
}
},
"required": [
"stockLengthFt",
"feasible",
"boardsToBuy",
"boughtFt",
"offcutPercent"
],
"additionalProperties": false
}
},
"comparisonRule": {
"type": "string",
"description": "The ranking used for every \"better\" statement in this result; a tie recommends nothing."
},
"cutList": {
"type": "array",
"items": {
"type": "object",
"properties": {
"label": {
"$ref": "#/properties/noStockFits/anyOf/0/items"
},
"qty": {
"$ref": "#/properties/buy/anyOf/0/properties/boardsToBuy"
},
"length": {
"$ref": "#/properties/noStockFits/anyOf/0/items"
}
},
"required": [
"label",
"qty",
"length"
],
"additionalProperties": false
}
},
"layout": {
"type": "object",
"properties": {
"battens": {
"$ref": "#/properties/buy/anyOf/0/properties/boardsToBuy"
},
"battensToInstall": {
"$ref": "#/properties/buy/anyOf/0/properties/boardsToBuy"
},
"battensOnOpenings": {
"$ref": "#/properties/buy/anyOf/0/properties/boardsToBuy"
},
"gap": {
"$ref": "#/properties/noStockFits/anyOf/0/items"
},
"spacerBlock": {
"$ref": "#/properties/noStockFits/anyOf/0/items"
},
"battenLength": {
"$ref": "#/properties/noStockFits/anyOf/0/items"
},
"horizontalRailsPerBay": {
"$ref": "#/properties/buy/anyOf/0/properties/boardsToBuy"
},
"railSpacing": {
"$ref": "#/properties/noStockFits/anyOf/0/items"
},
"style": {
"$ref": "#/properties/noStockFits/anyOf/0/items"
},
"panels": {
"$ref": "#/properties/buy/anyOf/0/properties/boardsToBuy"
},
"panelWidth": {
"$ref": "#/properties/noStockFits/anyOf/0/items"
},
"panelHeight": {
"$ref": "#/properties/noStockFits/anyOf/0/items"
},
"stiles": {
"$ref": "#/properties/buy/anyOf/0/properties/boardsToBuy"
},
"reveals": {
"$ref": "#/properties/buy/anyOf/0/properties/boardsToBuy"
},
"boxes": {
"$ref": "#/properties/buy/anyOf/0/properties/boardsToBuy"
},
"boxesOnObstacles": {
"$ref": "#/properties/buy/anyOf/0/properties/boardsToBuy"
},
"columns": {
"$ref": "#/properties/buy/anyOf/0/properties/boardsToBuy"
},
"rows": {
"$ref": "#/properties/buy/anyOf/0/properties/boardsToBuy"
},
"boxWidth": {
"$ref": "#/properties/noStockFits/anyOf/0/items"
},
"boxHeight": {
"$ref": "#/properties/noStockFits/anyOf/0/items"
}
},
"additionalProperties": false
},
"miter": {
"anyOf": [
{
"type": "object",
"properties": {
"frames": {
"$ref": "#/properties/buy/anyOf/0/properties/boardsToBuy"
},
"rail": {
"type": "object",
"properties": {
"perFrame": {
"$ref": "#/properties/buy/anyOf/0/properties/boardsToBuy"
},
"longPoint": {
"$ref": "#/properties/noStockFits/anyOf/0/items"
},
"shortPoint": {
"$ref": "#/properties/noStockFits/anyOf/0/items"
}
},
"required": [
"perFrame",
"longPoint",
"shortPoint"
],
"additionalProperties": false
},
"stile": {
"$ref": "#/properties/miter/anyOf/0/properties/rail"
}
},
"required": [
"frames",
"rail",
"stile"
],
"additionalProperties": false
},
{
"type": "null"
}
]
},
"linearFeet": {
"$ref": "#/properties/buy/anyOf/0/properties/stockLengthFt"
},
"wallAreaSqFt": {
"$ref": "#/properties/buy/anyOf/0/properties/stockLengthFt"
},
"kerf": {
"$ref": "#/properties/noStockFits/anyOf/0/items"
},
"extraPercent": {
"$ref": "#/properties/buy/anyOf/0/properties/stockLengthFt"
},
"optimal": {
"$ref": "#/properties/stockComparison/items/properties/feasible"
},
"method": {
"$ref": "#/properties/noStockFits/anyOf/0/items"
},
"warnings": {
"type": "array",
"items": {
"$ref": "#/properties/noStockFits/anyOf/0/items"
}
},
"shareUrl": {
"$ref": "#/properties/noStockFits/anyOf/0/items"
},
"shareUrlComplete": {
"$ref": "#/properties/stockComparison/items/properties/feasible"
}
},
"required": [
"project",
"buy",
"noStockFits",
"stockComparison",
"comparisonRule",
"cutList",
"layout",
"miter",
"linearFeet",
"wallAreaSqFt",
"kerf",
"extraPercent",
"optimal",
"method",
"warnings",
"shareUrl",
"shareUrlComplete"
],
"additionalProperties": false,
"$schema": "http://json-schema.org/draft-07/schema#"
}🟢plan_wallpaper_order(walls, openings, rollWidth, rollLength, repeat, ...)
Counts the wallpaper rolls to buy from the walls, doors and windows and the roll label (width, length, pattern repeat, match): drops per roll, every cut placed on its roll, match waste, and the straight / half-drop / random comparison. Lengths accept feet and inches. Returns a link to the full plan on calculiva.com.
Input Schema
{
"type": "object",
"properties": {
"walls": {
"type": "array",
"items": {
"type": "object",
"properties": {
"width": {
"anyOf": [
{
"type": "string",
"minLength": 1,
"maxLength": 80
},
{
"type": "number",
"minimum": 0
}
],
"description": "Wall width. Length with its unit, e.g. \"12 ft 6 in\", \"12'6\\\"\", \"150 in\", \"3m80\"; a bare number is read as inches."
},
"height": {
"anyOf": [
{
"type": "string",
"minLength": 1,
"maxLength": 80
},
{
"type": "number",
"minimum": 0
}
],
"description": "Wall height. Length with its unit, e.g. \"12 ft 6 in\", \"12'6\\\"\", \"150 in\", \"3m80\"; a bare number is read as inches."
}
},
"required": [
"width",
"height"
],
"additionalProperties": false
},
"minItems": 1,
"maxItems": 12,
"description": "Walls to paper, 1 to 12."
},
"openings": {
"type": "array",
"items": {
"type": "object",
"properties": {
"wall": {
"type": "integer",
"minimum": 1,
"maximum": 12,
"description": "Wall number (1 = first wall). Default 1."
},
"width": {
"anyOf": [
{
"type": "string",
"minLength": 1,
"maxLength": 80
},
{
"type": "number",
"minimum": 0
}
],
"description": "Opening width. Length with its unit, e.g. \"12 ft 6 in\", \"12'6\\\"\", \"150 in\", \"3m80\"; a bare number is read as inches."
},
"height": {
"anyOf": [
{
"type": "string",
"minLength": 1,
"maxLength": 80
},
{
"type": "number",
"minimum": 0
}
],
"description": "Opening height. Length with its unit, e.g. \"12 ft 6 in\", \"12'6\\\"\", \"150 in\", \"3m80\"; a bare number is read as inches."
},
"fromLeft": {
"anyOf": [
{
"type": "string",
"minLength": 1,
"maxLength": 80
},
{
"type": "number",
"minimum": 0
}
],
"description": "Distance from the left end of the wall to the opening. Length with its unit, e.g. \"12 ft 6 in\", \"12'6\\\"\", \"150 in\", \"3m80\"; a bare number is read as inches."
},
"sillHeight": {
"anyOf": [
{
"type": "string",
"minLength": 1,
"maxLength": 80
},
{
"type": "number",
"minimum": 0
}
],
"description": "Height of the bottom of the opening from the floor; \"0\" for a door. Default 0. Length with its unit, e.g. \"12 ft 6 in\", \"12'6\\\"\", \"150 in\", \"3m80\"; a bare number is read as inches."
}
},
"required": [
"width",
"height",
"fromLeft"
],
"additionalProperties": false
},
"maxItems": 12,
"description": "Doors and windows; only drops fully crossed by an opening are shortened."
},
"rollWidth": {
"anyOf": [
{
"type": "string",
"minLength": 1,
"maxLength": 80
},
{
"type": "number",
"minimum": 0
}
],
"description": "Roll width, from the label of the roll. Length with its unit, e.g. \"12 ft 6 in\", \"12'6\\\"\", \"150 in\", \"3m80\"; a bare number is read as inches."
},
"rollLength": {
"anyOf": [
{
"type": "string",
"minLength": 1,
"maxLength": 80
},
{
"type": "number",
"minimum": 0
}
],
"description": "Roll length, from the label (e.g. \"33 ft\"). Length with its unit, e.g. \"12 ft 6 in\", \"12'6\\\"\", \"150 in\", \"3m80\"; a bare number is read as inches."
},
"repeat": {
"anyOf": [
{
"type": "string",
"minLength": 1,
"maxLength": 80
},
{
"type": "number",
"minimum": 0
}
],
"description": "Vertical pattern repeat from the label; \"0\" for none. Length with its unit, e.g. \"12 ft 6 in\", \"12'6\\\"\", \"150 in\", \"3m80\"; a bare number is read as inches."
},
"match": {
"type": "string",
"enum": [
"straight",
"half-drop",
"random"
],
"description": "Pattern match from the label: straight (default), half-drop or random."
},
"trim": {
"anyOf": [
{
"type": "string",
"minLength": 1,
"maxLength": 80
},
{
"type": "number",
"minimum": 0
}
],
"description": "Trim allowance per drop, top and bottom together. Default 4 in. Length with its unit, e.g. \"12 ft 6 in\", \"12'6\\\"\", \"150 in\", \"3m80\"; a bare number is read as inches."
},
"deductOpenings": {
"type": "boolean",
"description": "Shorten drops over doors and windows (default true)."
}
},
"required": [
"walls",
"rollWidth",
"rollLength",
"repeat"
],
"additionalProperties": false,
"$schema": "http://json-schema.org/draft-07/schema#"
}Output Schema
{
"type": "object",
"properties": {
"rollsToBuy": {
"type": "integer"
},
"match": {
"type": "string",
"enum": [
"straight",
"half-drop",
"random"
]
},
"dropsPerRoll": {
"$ref": "#/properties/rollsToBuy"
},
"drops": {
"$ref": "#/properties/rollsToBuy"
},
"cuts": {
"$ref": "#/properties/rollsToBuy"
},
"longestCut": {
"type": "string"
},
"cutTotalFt": {
"type": "number"
},
"linearYards": {
"$ref": "#/properties/cutTotalFt"
},
"matchWasteFt": {
"$ref": "#/properties/cutTotalFt"
},
"wastePercent": {
"$ref": "#/properties/cutTotalFt"
},
"wallAreaSqFt": {
"$ref": "#/properties/cutTotalFt"
},
"openingAreaSqFt": {
"$ref": "#/properties/cutTotalFt"
},
"areaMethodRolls": {
"$ref": "#/properties/rollsToBuy"
},
"rolls": {
"type": "array",
"items": {
"type": "object",
"properties": {
"roll": {
"$ref": "#/properties/longestCut"
},
"cuts": {
"type": "array",
"items": {
"$ref": "#/properties/longestCut"
}
},
"leftover": {
"$ref": "#/properties/longestCut"
}
},
"required": [
"roll",
"cuts",
"leftover"
],
"additionalProperties": false
}
},
"matchComparison": {
"type": "array",
"items": {
"anyOf": [
{
"type": "object",
"properties": {
"match": {
"type": "string",
"enum": [
"straight",
"half-drop",
"random"
]
},
"rollsToBuy": {
"$ref": "#/properties/rollsToBuy"
},
"linearYards": {
"$ref": "#/properties/cutTotalFt"
},
"matchWasteFt": {
"$ref": "#/properties/cutTotalFt"
}
},
"required": [
"match",
"rollsToBuy",
"linearYards",
"matchWasteFt"
],
"additionalProperties": false
},
{
"type": "object",
"properties": {
"match": {
"type": "string",
"enum": [
"straight",
"half-drop",
"random"
]
},
"error": {
"$ref": "#/properties/longestCut"
}
},
"required": [
"match",
"error"
],
"additionalProperties": false
}
]
},
"description": "The same walls with each pattern match; the match is printed on the roll label, so this is not a choice."
},
"warnings": {
"type": "array",
"items": {
"$ref": "#/properties/longestCut"
}
},
"shareUrl": {
"$ref": "#/properties/longestCut"
},
"shareUrlComplete": {
"type": "boolean"
}
},
"required": [
"rollsToBuy",
"match",
"dropsPerRoll",
"drops",
"cuts",
"longestCut",
"cutTotalFt",
"linearYards",
"matchWasteFt",
"wastePercent",
"wallAreaSqFt",
"openingAreaSqFt",
"areaMethodRolls",
"rolls",
"matchComparison",
"warnings",
"shareUrl",
"shareUrlComplete"
],
"additionalProperties": false,
"$schema": "http://json-schema.org/draft-07/schema#"
}🟢plan_flooring_order(rooms, plankLength, plankWidth, planksPerBox, direction, ...)
Plans laminate, vinyl plank (LVP) or engineered plank flooring for 1 to 12 rooms, rectangles or L shapes, with the plank size and planks per carton from the carton: cartons to buy, every cut piece traced to its source plank, offcuts carried from one room to the next, the 8 scenarios (direction x offset 1/3 or 1/2 x reuse, plus aligned joints in the chosen direction when offset 0 is chosen) and the best one when no other ties it (fewest cartons, then least offcut, then fewest planks), and how many planks a flat waste allowance would miss. Up to 3,000 planks per call. Lengths accept feet and inches. Returns a link per room to the full plan on calculiva.com.
Input Schema
{
"type": "object",
"properties": {
"rooms": {
"type": "array",
"items": {
"type": "object",
"properties": {
"name": {
"type": "string",
"maxLength": 40,
"description": "Room name, e.g. \"living room\". Default \"room 1\", \"room 2\"…"
},
"width": {
"anyOf": [
{
"type": "string",
"minLength": 1,
"maxLength": 80
},
{
"type": "number",
"minimum": 0
}
],
"description": "Room width, wall to wall (overall outside dimension for an L). Length with its unit, e.g. \"12 ft 6 in\", \"12'6\\\"\", \"150 in\", \"3m80\"; a bare number is read as inches."
},
"length": {
"anyOf": [
{
"type": "string",
"minLength": 1,
"maxLength": 80
},
{
"type": "number",
"minimum": 0
}
],
"description": "Room length, wall to wall (overall outside dimension for an L). Length with its unit, e.g. \"12 ft 6 in\", \"12'6\\\"\", \"150 in\", \"3m80\"; a bare number is read as inches."
},
"notch": {
"type": "object",
"properties": {
"width": {
"anyOf": [
{
"type": "string",
"minLength": 1,
"maxLength": 80
},
{
"type": "number",
"minimum": 0
}
],
"description": "Width of the missing corner rectangle. Length with its unit, e.g. \"12 ft 6 in\", \"12'6\\\"\", \"150 in\", \"3m80\"; a bare number is read as inches."
},
"length": {
"anyOf": [
{
"type": "string",
"minLength": 1,
"maxLength": 80
},
{
"type": "number",
"minimum": 0
}
],
"description": "Length of the missing corner rectangle. Length with its unit, e.g. \"12 ft 6 in\", \"12'6\\\"\", \"150 in\", \"3m80\"; a bare number is read as inches."
},
"corner": {
"type": "string",
"enum": [
"top-right",
"top-left",
"bottom-right",
"bottom-left"
],
"description": "Missing corner on the plan. Default top-right."
}
},
"required": [
"width",
"length"
],
"additionalProperties": false,
"description": "L-shaped room: the rectangle missing from one corner of width x length."
}
},
"required": [
"width",
"length"
],
"additionalProperties": false
},
"minItems": 1,
"maxItems": 12,
"description": "Rooms to floor with the same plank, 1 to 12, in laying order unless order is given."
},
"plankLength": {
"anyOf": [
{
"type": "string",
"minLength": 1,
"maxLength": 80
},
{
"type": "number",
"minimum": 0
}
],
"description": "Installed plank length (face), from the carton. Length with its unit, e.g. \"12 ft 6 in\", \"12'6\\\"\", \"150 in\", \"3m80\"; a bare number is read as inches."
},
"plankWidth": {
"anyOf": [
{
"type": "string",
"minLength": 1,
"maxLength": 80
},
{
"type": "number",
"minimum": 0
}
],
"description": "Installed plank width (face), from the carton. Length with its unit, e.g. \"12 ft 6 in\", \"12'6\\\"\", \"150 in\", \"3m80\"; a bare number is read as inches."
},
"planksPerBox": {
"type": "integer",
"minimum": 1,
"maximum": 1000,
"description": "Planks per carton, from the carton label."
},
"direction": {
"type": "string",
"enum": [
"horizontal",
"vertical"
],
"description": "horizontal = planks run along the room width (default); vertical = along the room length."
},
"offset": {
"type": "string",
"enum": [
"0",
"1/3",
"1/2"
],
"description": "End-joint stagger between rows, as a fraction of the plank: 1/3 (default), 1/2 or 0 (aligned)."
},
"reuse": {
"type": "boolean",
"description": "Cut a row end from the offcut of a row start in the same room (default true)."
},
"carryBetweenRooms": {
"type": "boolean",
"description": "Offcuts of a room feed the next rooms (default true)."
},
"order": {
"type": "array",
"items": {
"type": "string",
"maxLength": 40
},
"maxItems": 12,
"description": "Laying order by room name; offcuts only flow forward. Default: the order of rooms."
},
"allowancePercent": {
"type": "number",
"minimum": 0,
"maximum": 100,
"description": "Flat waste allowance you would otherwise buy (e.g. 10): the answer says how many planks it misses."
},
"clearance": {
"anyOf": [
{
"type": "string",
"minLength": 1,
"maxLength": 80
},
{
"type": "number",
"minimum": 0
}
],
"description": "Expansion gap on every wall, from the product instructions. Default 0. Length with its unit, e.g. \"12 ft 6 in\", \"12'6\\\"\", \"150 in\", \"3m80\"; a bare number is read as inches."
},
"kerf": {
"anyOf": [
{
"type": "string",
"minLength": 1,
"maxLength": 80
},
{
"type": "number",
"minimum": 0
}
],
"description": "Saw kerf, charged on each cut. Default 1/8 in. Length with its unit, e.g. \"12 ft 6 in\", \"12'6\\\"\", \"150 in\", \"3m80\"; a bare number is read as inches."
},
"balancedRows": {
"type": "boolean",
"description": "Split the partial row width between the first and last rows (default true)."
},
"firstStarter": {
"anyOf": [
{
"type": "string",
"minLength": 1,
"maxLength": 80
},
{
"type": "number",
"minimum": 0
}
],
"description": "Length of the first row starter; 0 = full plank. Default 0. Length with its unit, e.g. \"12 ft 6 in\", \"12'6\\\"\", \"150 in\", \"3m80\"; a bare number is read as inches."
},
"minStarter": {
"anyOf": [
{
"type": "string",
"minLength": 1,
"maxLength": 80
},
{
"type": "number",
"minimum": 0
}
],
"description": "Minimum row starter length; 0 disables the check. Default 0. Length with its unit, e.g. \"12 ft 6 in\", \"12'6\\\"\", \"150 in\", \"3m80\"; a bare number is read as inches."
},
"minJointSpacing": {
"anyOf": [
{
"type": "string",
"minLength": 1,
"maxLength": 80
},
{
"type": "number",
"minimum": 0
}
],
"description": "Minimum distance between end joints of adjacent rows; 0 disables the check. Default 0. Length with its unit, e.g. \"12 ft 6 in\", \"12'6\\\"\", \"150 in\", \"3m80\"; a bare number is read as inches."
},
"minRowWidth": {
"anyOf": [
{
"type": "string",
"minLength": 1,
"maxLength": 80
},
{
"type": "number",
"minimum": 0
}
],
"description": "Minimum edge-row width; 0 disables the check. Default 0. Length with its unit, e.g. \"12 ft 6 in\", \"12'6\\\"\", \"150 in\", \"3m80\"; a bare number is read as inches."
},
"minReuse": {
"anyOf": [
{
"type": "string",
"minLength": 1,
"maxLength": 80
},
{
"type": "number",
"minimum": 0
}
],
"description": "Shortest offcut worth carrying to another room. Default 0 (any offcut long enough). Length with its unit, e.g. \"12 ft 6 in\", \"12'6\\\"\", \"150 in\", \"3m80\"; a bare number is read as inches."
}
},
"required": [
"rooms",
"plankLength",
"plankWidth",
"planksPerBox"
],
"additionalProperties": false,
"$schema": "http://json-schema.org/draft-07/schema#"
}Output Schema
{
"type": "object",
"properties": {
"boxesToBuy": {
"type": "integer"
},
"planksPerBox": {
"$ref": "#/properties/boxesToBuy"
},
"planksToBuy": {
"$ref": "#/properties/boxesToBuy"
},
"sourcePlanks": {
"$ref": "#/properties/boxesToBuy"
},
"sparePlanks": {
"$ref": "#/properties/boxesToBuy"
},
"floorAreaSqFt": {
"type": "number"
},
"wastePercent": {
"$ref": "#/properties/floorAreaSqFt"
},
"scenario": {
"type": "object",
"properties": {
"direction": {
"type": "string",
"enum": [
"horizontal",
"vertical"
]
},
"offset": {
"type": "string",
"enum": [
"0",
"1/3",
"1/2"
]
},
"reuse": {
"type": "boolean"
},
"carryBetweenRooms": {
"$ref": "#/properties/scenario/properties/reuse"
},
"layingOrder": {
"type": "array",
"items": {
"type": "string"
}
}
},
"required": [
"direction",
"offset",
"reuse",
"carryBetweenRooms",
"layingOrder"
],
"additionalProperties": false
},
"roomsAlonePlanks": {
"$ref": "#/properties/boxesToBuy"
},
"planksSavedBetweenRooms": {
"$ref": "#/properties/boxesToBuy"
},
"allowance": {
"anyOf": [
{
"type": "object",
"properties": {
"percent": {
"$ref": "#/properties/floorAreaSqFt"
},
"planksBought": {
"$ref": "#/properties/boxesToBuy"
},
"boxes": {
"$ref": "#/properties/floorAreaSqFt"
},
"missingPlanks": {
"$ref": "#/properties/boxesToBuy"
}
},
"required": [
"percent",
"planksBought",
"boxes",
"missingPlanks"
],
"additionalProperties": false
},
{
"type": "null"
}
]
},
"comparisonRule": {
"type": "string",
"description": "The ranking used for every \"better\" statement in this result; a tie recommends nothing."
},
"bestScenario": {
"type": [
"string",
"null"
],
"description": "The single best of the scenarios (8, or 10 when offset 0 is chosen) by comparisonRule; null when several tie."
},
"bestDecidedBy": {
"type": [
"string",
"null"
],
"description": "The first criterion of comparisonRule on which the two options differ."
},
"scenariosTiedAtBest": {
"$ref": "#/properties/boxesToBuy"
},
"scenarios": {
"type": "array",
"items": {
"type": "object",
"properties": {
"direction": {
"type": "string",
"enum": [
"horizontal",
"vertical"
]
},
"offset": {
"$ref": "#/properties/scenario/properties/offset"
},
"reuse": {
"$ref": "#/properties/scenario/properties/reuse"
},
"sourcePlanks": {
"$ref": "#/properties/boxesToBuy"
},
"boxes": {
"$ref": "#/properties/boxesToBuy"
},
"wastePercent": {
"$ref": "#/properties/floorAreaSqFt"
},
"roomsAlonePlanks": {
"$ref": "#/properties/boxesToBuy"
},
"missingPlanksAtAllowance": {
"anyOf": [
{
"$ref": "#/properties/boxesToBuy"
},
{
"type": "null"
}
]
}
},
"required": [
"direction",
"offset",
"reuse",
"sourcePlanks",
"boxes",
"wastePercent",
"roomsAlonePlanks",
"missingPlanksAtAllowance"
],
"additionalProperties": false
}
},
"rooms": {
"type": "array",
"items": {
"type": "object",
"properties": {
"name": {
"$ref": "#/properties/scenario/properties/layingOrder/items"
},
"shape": {
"type": "string",
"enum": [
"rectangle",
"L"
]
},
"areaSqFt": {
"$ref": "#/properties/floorAreaSqFt"
},
"sourcePlanks": {
"$ref": "#/properties/boxesToBuy"
},
"planksAlone": {
"$ref": "#/properties/boxesToBuy"
},
"boxesAlone": {
"$ref": "#/properties/boxesToBuy"
},
"piecesFromOffcuts": {
"$ref": "#/properties/boxesToBuy"
},
"bestScenario": {
"type": [
"string",
"null"
]
},
"scenarios": {
"type": "array",
"items": {
"type": "object",
"properties": {
"direction": {
"$ref": "#/properties/scenarios/items/properties/direction"
},
"offset": {
"$ref": "#/properties/scenario/properties/offset"
},
"reuse": {
"$ref": "#/properties/scenario/properties/reuse"
},
"sourcePlanks": {
"$ref": "#/properties/boxesToBuy"
},
"boxes": {
"$ref": "#/properties/boxesToBuy"
},
"wastePercent": {
"$ref": "#/properties/floorAreaSqFt"
}
},
"required": [
"direction",
"offset",
"reuse",
"sourcePlanks",
"boxes",
"wastePercent"
],
"additionalProperties": false
}
},
"shareUrl": {
"$ref": "#/properties/scenario/properties/layingOrder/items"
}
},
"required": [
"name",
"shape",
"areaSqFt",
"sourcePlanks",
"planksAlone",
"boxesAlone",
"piecesFromOffcuts",
"bestScenario",
"scenarios",
"shareUrl"
],
"additionalProperties": false
}
},
"transfers": {
"type": "array",
"items": {
"type": "object",
"properties": {
"fromRoom": {
"$ref": "#/properties/scenario/properties/layingOrder/items"
},
"toRoom": {
"$ref": "#/properties/scenario/properties/layingOrder/items"
},
"offcut": {
"$ref": "#/properties/scenario/properties/layingOrder/items"
},
"sourcePlank": {
"$ref": "#/properties/scenario/properties/layingOrder/items"
},
"piece": {
"$ref": "#/properties/scenario/properties/layingOrder/items"
},
"length": {
"$ref": "#/properties/scenario/properties/layingOrder/items"
}
},
"required": [
"fromRoom",
"toRoom",
"offcut",
"sourcePlank",
"piece",
"length"
],
"additionalProperties": false
}
},
"offcutsLeft": {
"$ref": "#/properties/boxesToBuy"
},
"method": {
"$ref": "#/properties/scenario/properties/layingOrder/items"
},
"warnings": {
"type": "array",
"items": {
"$ref": "#/properties/scenario/properties/layingOrder/items"
}
},
"shareUrl": {
"type": [
"string",
"null"
]
},
"shareUrlComplete": {
"$ref": "#/properties/scenario/properties/reuse"
}
},
"required": [
"boxesToBuy",
"planksPerBox",
"planksToBuy",
"sourcePlanks",
"sparePlanks",
"floorAreaSqFt",
"wastePercent",
"scenario",
"roomsAlonePlanks",
"planksSavedBetweenRooms",
"allowance",
"comparisonRule",
"bestScenario",
"bestDecidedBy",
"scenariosTiedAtBest",
"scenarios",
"rooms",
"transfers",
"offcutsLeft",
"method",
"warnings",
"shareUrl",
"shareUrlComplete"
],
"additionalProperties": false,
"$schema": "http://json-schema.org/draft-07/schema#"
}🟢build_order_sheet(flooring, trim, wallpaper, stockLengthsFt, kerf, ...)
Builds one consolidated order sheet from the flooring, trim and wallpaper plans of the same project (pass the same arguments as plan_flooring_order, plan_trim_order and plan_wallpaper_order): cartons, boards per stock length, rolls, total offcuts, the cut list by material and a CSV. Trim pieces of all walls and all types (battens, rails, chair rail, frames) are packed together on the stock boards, and the sheet compares that with one order per wall, each wall on its own best stock length (total length bought, then offcut, then boards).
Input Schema
{
"type": "object",
"properties": {
"flooring": {
"type": "array",
"items": {
"type": "object",
"properties": {
"name": {
"type": "string",
"maxLength": 40,
"description": "Name of this floor product, e.g. \"oak LVP\""
},
"rooms": {
"type": "array",
"items": {
"type": "object",
"properties": {
"name": {
"type": "string",
"maxLength": 40,
"description": "Room name, e.g. \"living room\". Default \"room 1\", \"room 2\"…"
},
"width": {
"anyOf": [
{
"type": "string",
"minLength": 1,
"maxLength": 80
},
{
"type": "number",
"minimum": 0
}
],
"description": "Room width, wall to wall (overall outside dimension for an L). Length with its unit, e.g. \"12 ft 6 in\", \"12'6\\\"\", \"150 in\", \"3m80\"; a bare number is read as inches."
},
"length": {
"anyOf": [
{
"type": "string",
"minLength": 1,
"maxLength": 80
},
{
"type": "number",
"minimum": 0
}
],
"description": "Room length, wall to wall (overall outside dimension for an L). Length with its unit, e.g. \"12 ft 6 in\", \"12'6\\\"\", \"150 in\", \"3m80\"; a bare number is read as inches."
},
"notch": {
"type": "object",
"properties": {
"width": {
"anyOf": [
{
"type": "string",
"minLength": 1,
"maxLength": 80
},
{
"type": "number",
"minimum": 0
}
],
"description": "Width of the missing corner rectangle. Length with its unit, e.g. \"12 ft 6 in\", \"12'6\\\"\", \"150 in\", \"3m80\"; a bare number is read as inches."
},
"length": {
"anyOf": [
{
"type": "string",
"minLength": 1,
"maxLength": 80
},
{
"type": "number",
"minimum": 0
}
],
"description": "Length of the missing corner rectangle. Length with its unit, e.g. \"12 ft 6 in\", \"12'6\\\"\", \"150 in\", \"3m80\"; a bare number is read as inches."
},
"corner": {
"type": "string",
"enum": [
"top-right",
"top-left",
"bottom-right",
"bottom-left"
],
"description": "Missing corner on the plan. Default top-right."
}
},
"required": [
"width",
"length"
],
"additionalProperties": false,
"description": "L-shaped room: the rectangle missing from one corner of width x length."
}
},
"required": [
"width",
"length"
],
"additionalProperties": false
},
"minItems": 1,
"maxItems": 12,
"description": "Rooms to floor with the same plank, 1 to 12, in laying order unless order is given."
},
"plankLength": {
"anyOf": [
{
"type": "string",
"minLength": 1,
"maxLength": 80
},
{
"type": "number",
"minimum": 0
}
],
"description": "Installed plank length (face), from the carton. Length with its unit, e.g. \"12 ft 6 in\", \"12'6\\\"\", \"150 in\", \"3m80\"; a bare number is read as inches."
},
"plankWidth": {
"anyOf": [
{
"type": "string",
"minLength": 1,
"maxLength": 80
},
{
"type": "number",
"minimum": 0
}
],
"description": "Installed plank width (face), from the carton. Length with its unit, e.g. \"12 ft 6 in\", \"12'6\\\"\", \"150 in\", \"3m80\"; a bare number is read as inches."
},
"planksPerBox": {
"type": "integer",
"minimum": 1,
"maximum": 1000,
"description": "Planks per carton, from the carton label."
},
"direction": {
"type": "string",
"enum": [
"horizontal",
"vertical"
],
"description": "horizontal = planks run along the room width (default); vertical = along the room length."
},
"offset": {
"type": "string",
"enum": [
"0",
"1/3",
"1/2"
],
"description": "End-joint stagger between rows, as a fraction of the plank: 1/3 (default), 1/2 or 0 (aligned)."
},
"reuse": {
"type": "boolean",
"description": "Cut a row end from the offcut of a row start in the same room (default true)."
},
"carryBetweenRooms": {
"type": "boolean",
"description": "Offcuts of a room feed the next rooms (default true)."
},
"order": {
"type": "array",
"items": {
"type": "string",
"maxLength": 40
},
"maxItems": 12,
"description": "Laying order by room name; offcuts only flow forward. Default: the order of rooms."
},
"allowancePercent": {
"type": "number",
"minimum": 0,
"maximum": 100,
"description": "Flat waste allowance you would otherwise buy (e.g. 10): the answer says how many planks it misses."
},
"clearance": {
"anyOf": [
{
"type": "string",
"minLength": 1,
"maxLength": 80
},
{
"type": "number",
"minimum": 0
}
],
"description": "Expansion gap on every wall, from the product instructions. Default 0. Length with its unit, e.g. \"12 ft 6 in\", \"12'6\\\"\", \"150 in\", \"3m80\"; a bare number is read as inches."
},
"kerf": {
"anyOf": [
{
"type": "string",
"minLength": 1,
"maxLength": 80
},
{
"type": "number",
"minimum": 0
}
],
"description": "Saw kerf, charged on each cut. Default 1/8 in. Length with its unit, e.g. \"12 ft 6 in\", \"12'6\\\"\", \"150 in\", \"3m80\"; a bare number is read as inches."
},
"balancedRows": {
"type": "boolean",
"description": "Split the partial row width between the first and last rows (default true)."
},
"firstStarter": {
"anyOf": [
{
"type": "string",
"minLength": 1,
"maxLength": 80
},
{
"type": "number",
"minimum": 0
}
],
"description": "Length of the first row starter; 0 = full plank. Default 0. Length with its unit, e.g. \"12 ft 6 in\", \"12'6\\\"\", \"150 in\", \"3m80\"; a bare number is read as inches."
},
"minStarter": {
"anyOf": [
{
"type": "string",
"minLength": 1,
"maxLength": 80
},
{
"type": "number",
"minimum": 0
}
],
"description": "Minimum row starter length; 0 disables the check. Default 0. Length with its unit, e.g. \"12 ft 6 in\", \"12'6\\\"\", \"150 in\", \"3m80\"; a bare number is read as inches."
},
"minJointSpacing": {
"anyOf": [
{
"type": "string",
"minLength": 1,
"maxLength": 80
},
{
"type": "number",
"minimum": 0
}
],
"description": "Minimum distance between end joints of adjacent rows; 0 disables the check. Default 0. Length with its unit, e.g. \"12 ft 6 in\", \"12'6\\\"\", \"150 in\", \"3m80\"; a bare number is read as inches."
},
"minRowWidth": {
"anyOf": [
{
"type": "string",
"minLength": 1,
"maxLength": 80
},
{
"type": "number",
"minimum": 0
}
],
"description": "Minimum edge-row width; 0 disables the check. Default 0. Length with its unit, e.g. \"12 ft 6 in\", \"12'6\\\"\", \"150 in\", \"3m80\"; a bare number is read as inches."
},
"minReuse": {
"anyOf": [
{
"type": "string",
"minLength": 1,
"maxLength": 80
},
{
"type": "number",
"minimum": 0
}
],
"description": "Shortest offcut worth carrying to another room. Default 0 (any offcut long enough). Length with its unit, e.g. \"12 ft 6 in\", \"12'6\\\"\", \"150 in\", \"3m80\"; a bare number is read as inches."
}
},
"required": [
"rooms",
"plankLength",
"plankWidth",
"planksPerBox"
],
"additionalProperties": false
},
"maxItems": 4,
"description": "Flooring orders, one per plank product, with the plan_flooring_order arguments."
},
"trim": {
"type": "array",
"items": {
"type": "object",
"properties": {
"name": {
"type": "string",
"maxLength": 40,
"description": "Wall name, e.g. \"dining north wall\". Default \"wall 1\"…"
},
"material": {
"type": "string",
"maxLength": 40,
"description": "Board or molding the pieces are cut from; walls with the same material are packed together. Default \"trim boards\" (all walls together)."
},
"project": {
"type": "string",
"enum": [
"board-and-batten",
"wainscoting",
"picture-frame-molding"
],
"description": "board-and-batten, wainscoting (applied frames or stile and rail) or picture-frame-molding (boxes of 45° mitered molding)."
},
"wallWidth": {
"anyOf": [
{
"type": "string",
"minLength": 1,
"maxLength": 80
},
{
"type": "number",
"minimum": 0
}
],
"description": "Wall width. Length with its unit, e.g. \"12 ft 6 in\", \"12'6\\\"\", \"150 in\", \"3m80\"; a bare number is read as inches."
},
"wallHeight": {
"anyOf": [
{
"type": "string",
"minLength": 1,
"maxLength": 80
},
{
"type": "number",
"minimum": 0
}
],
"description": "Wall height, floor to ceiling. Length with its unit, e.g. \"12 ft 6 in\", \"12'6\\\"\", \"150 in\", \"3m80\"; a bare number is read as inches."
},
"baseboardHeight": {
"anyOf": [
{
"type": "string",
"minLength": 1,
"maxLength": 80
},
{
"type": "number",
"minimum": 0
}
],
"description": "Existing baseboard height; \"0\" if none. Default 5 1/4 in. Length with its unit, e.g. \"12 ft 6 in\", \"12'6\\\"\", \"150 in\", \"3m80\"; a bare number is read as inches."
},
"openings": {
"type": "array",
"items": {
"type": "object",
"properties": {
"position": {
"anyOf": [
{
"type": "string",
"minLength": 1,
"maxLength": 80
},
{
"type": "number",
"minimum": 0
}
],
"description": "Distance from the left end of the wall to the left edge of the opening or obstacle. Length with its unit, e.g. \"12 ft 6 in\", \"12'6\\\"\", \"150 in\", \"3m80\"; a bare number is read as inches."
},
"width": {
"anyOf": [
{
"type": "string",
"minLength": 1,
"maxLength": 80
},
{
"type": "number",
"minimum": 0
}
],
"description": "Width of the opening or obstacle (window, door, outlet, switch). Length with its unit, e.g. \"12 ft 6 in\", \"12'6\\\"\", \"150 in\", \"3m80\"; a bare number is read as inches."
},
"label": {
"type": "string",
"maxLength": 40,
"description": "Name shown in the plan, e.g. \"window\""
}
},
"required": [
"position",
"width"
],
"additionalProperties": false
},
"maxItems": 4,
"description": "Up to 4 openings or obstacles on the wall; pieces that land on them are flagged and left out of the cut list."
},
"battenWidth": {
"anyOf": [
{
"type": "string",
"minLength": 1,
"maxLength": 80
},
{
"type": "number",
"minimum": 0
}
],
"description": "board-and-batten: actual batten width (a 1x3 is 2 1/2 in). Default 2 1/2 in. Length with its unit, e.g. \"12 ft 6 in\", \"12'6\\\"\", \"150 in\", \"3m80\"; a bare number is read as inches."
},
"battenCount": {
"type": "integer",
"minimum": 1,
"maximum": 400,
"description": "board-and-batten: number of battens. Omit to use battenSpacing."
},
"battenSpacing": {
"anyOf": [
{
"type": "string",
"minLength": 1,
"maxLength": 80
},
{
"type": "number",
"minimum": 0
}
],
"description": "board-and-batten: target gap between battens, used when battenCount is omitted. Default 12 in. Length with its unit, e.g. \"12 ft 6 in\", \"12'6\\\"\", \"150 in\", \"3m80\"; a bare number is read as inches."
},
"edge": {
"type": "string",
"enum": [
"space",
"batten"
],
"description": "board-and-batten: start and end the wall with a space (default) or with a batten."
},
"layout": {
"type": "string",
"enum": [
"vertical",
"grid"
],
"description": "board-and-batten: vertical battens (default) or a grid with horizontal rails."
},
"railCount": {
"type": "integer",
"minimum": 1,
"maximum": 20,
"description": "board-and-batten grid: horizontal rails per bay. Default 2."
},
"fullHeight": {
"type": "boolean",
"description": "board-and-batten: battens run to the ceiling. Default false."
},
"topRailHeight": {
"anyOf": [
{
"type": "string",
"minLength": 1,
"maxLength": 80
},
{
"type": "number",
"minimum": 0
}
],
"description": "board-and-batten: height of the top of the top rail from the floor. Default 32 in. Length with its unit, e.g. \"12 ft 6 in\", \"12'6\\\"\", \"150 in\", \"3m80\"; a bare number is read as inches."
},
"topRailWidth": {
"anyOf": [
{
"type": "string",
"minLength": 1,
"maxLength": 80
},
{
"type": "number",
"minimum": 0
}
],
"description": "board-and-batten top rail, or wainscoting stile-and-rail top rail width. Default 3 1/2 in. Length with its unit, e.g. \"12 ft 6 in\", \"12'6\\\"\", \"150 in\", \"3m80\"; a bare number is read as inches."
},
"style": {
"type": "string",
"enum": [
"applied-frames",
"stile-and-rail"
],
"description": "wainscoting: applied molding frames (default) or stiles and rails."
},
"wainscotHeight": {
"anyOf": [
{
"type": "string",
"minLength": 1,
"maxLength": 80
},
{
"type": "number",
"minimum": 0
}
],
"description": "wainscoting: overall height from the floor, chair rail included. Default 32 in. Length with its unit, e.g. \"12 ft 6 in\", \"12'6\\\"\", \"150 in\", \"3m80\"; a bare number is read as inches."
},
"chairRailWidth": {
"anyOf": [
{
"type": "string",
"minLength": 1,
"maxLength": 80
},
{
"type": "number",
"minimum": 0
}
],
"description": "wainscoting: chair rail height (board width). Default 2 1/2 in. Length with its unit, e.g. \"12 ft 6 in\", \"12'6\\\"\", \"150 in\", \"3m80\"; a bare number is read as inches."
},
"memberWidth": {
"anyOf": [
{
"type": "string",
"minLength": 1,
"maxLength": 80
},
{
"type": "number",
"minimum": 0
}
],
"description": "wainscoting: stile width, or side reveal between frames. Default 3 1/2 in. Length with its unit, e.g. \"12 ft 6 in\", \"12'6\\\"\", \"150 in\", \"3m80\"; a bare number is read as inches."
},
"panelCount": {
"type": "integer",
"minimum": 1,
"maximum": 60,
"description": "wainscoting: number of panels or frames. Omit to use panelWidth."
},
"panelWidth": {
"anyOf": [
{
"type": "string",
"minLength": 1,
"maxLength": 80
},
{
"type": "number",
"minimum": 0
}
],
"description": "wainscoting: target panel width, used when panelCount is omitted. Default 30 in. Length with its unit, e.g. \"12 ft 6 in\", \"12'6\\\"\", \"150 in\", \"3m80\"; a bare number is read as inches."
},
"revealVertical": {
"anyOf": [
{
"type": "string",
"minLength": 1,
"maxLength": 80
},
{
"type": "number",
"minimum": 0
}
],
"description": "wainscoting applied-frames: reveal above and below each frame. Default 3 1/2 in. Length with its unit, e.g. \"12 ft 6 in\", \"12'6\\\"\", \"150 in\", \"3m80\"; a bare number is read as inches."
},
"bottomRailWidth": {
"anyOf": [
{
"type": "string",
"minLength": 1,
"maxLength": 80
},
{
"type": "number",
"minimum": 0
}
],
"description": "wainscoting stile-and-rail: bottom rail width. Default 5 1/2 in. Length with its unit, e.g. \"12 ft 6 in\", \"12'6\\\"\", \"150 in\", \"3m80\"; a bare number is read as inches."
},
"moldingWidth": {
"anyOf": [
{
"type": "string",
"minLength": 1,
"maxLength": 80
},
{
"type": "number",
"minimum": 0
}
],
"description": "wainscoting applied-frames (default 1 1/4 in) or picture-frame-molding (default 1 in): molding face width. Length with its unit, e.g. \"12 ft 6 in\", \"12'6\\\"\", \"150 in\", \"3m80\"; a bare number is read as inches."
},
"hasCap": {
"type": "boolean",
"description": "picture-frame-molding: a chair rail caps the boxes (default true); false = boxes run to the ceiling."
},
"capHeight": {
"anyOf": [
{
"type": "string",
"minLength": 1,
"maxLength": 80
},
{
"type": "number",
"minimum": 0
}
],
"description": "picture-frame-molding: height of the underside of the chair rail. Default 36 in. Length with its unit, e.g. \"12 ft 6 in\", \"12'6\\\"\", \"150 in\", \"3m80\"; a bare number is read as inches."
},
"columns": {
"type": "integer",
"minimum": 1,
"maximum": 40,
"description": "picture-frame-molding: boxes across. Default 4."
},
"rows": {
"type": "integer",
"minimum": 1,
"maximum": 10,
"description": "picture-frame-molding: rows of boxes. Default 1."
},
"gapX": {
"anyOf": [
{
"type": "string",
"minLength": 1,
"maxLength": 80
},
{
"type": "number",
"minimum": 0
}
],
"description": "picture-frame-molding: gap between boxes. Default 4 in. Length with its unit, e.g. \"12 ft 6 in\", \"12'6\\\"\", \"150 in\", \"3m80\"; a bare number is read as inches."
},
"gapY": {
"anyOf": [
{
"type": "string",
"minLength": 1,
"maxLength": 80
},
{
"type": "number",
"minimum": 0
}
],
"description": "picture-frame-molding: gap between rows. Default 4 in. Length with its unit, e.g. \"12 ft 6 in\", \"12'6\\\"\", \"150 in\", \"3m80\"; a bare number is read as inches."
},
"edgeX": {
"anyOf": [
{
"type": "string",
"minLength": 1,
"maxLength": 80
},
{
"type": "number",
"minimum": 0
}
],
"description": "picture-frame-molding: side margin. Default 4 in. Length with its unit, e.g. \"12 ft 6 in\", \"12'6\\\"\", \"150 in\", \"3m80\"; a bare number is read as inches."
},
"edgeTop": {
"anyOf": [
{
"type": "string",
"minLength": 1,
"maxLength": 80
},
{
"type": "number",
"minimum": 0
}
],
"description": "picture-frame-molding: top margin. Default 4 in. Length with its unit, e.g. \"12 ft 6 in\", \"12'6\\\"\", \"150 in\", \"3m80\"; a bare number is read as inches."
},
"edgeBottom": {
"anyOf": [
{
"type": "string",
"minLength": 1,
"maxLength": 80
},
{
"type": "number",
"minimum": 0
}
],
"description": "picture-frame-molding: bottom margin. Default 4 in. Length with its unit, e.g. \"12 ft 6 in\", \"12'6\\\"\", \"150 in\", \"3m80\"; a bare number is read as inches."
}
},
"required": [
"project",
"wallWidth",
"wallHeight"
],
"additionalProperties": false
},
"maxItems": 12,
"description": "Trim walls, one per wall, with the plan_trim_order arguments (stock, kerf and extra are set once below)."
},
"wallpaper": {
"type": "array",
"items": {
"type": "object",
"properties": {
"name": {
"type": "string",
"maxLength": 40,
"description": "Name of this paper, e.g. \"bedroom paper\""
},
"walls": {
"type": "array",
"items": {
"type": "object",
"properties": {
"width": {
"anyOf": [
{
"type": "string",
"minLength": 1,
"maxLength": 80
},
{
"type": "number",
"minimum": 0
}
],
"description": "Wall width. Length with its unit, e.g. \"12 ft 6 in\", \"12'6\\\"\", \"150 in\", \"3m80\"; a bare number is read as inches."
},
"height": {
"anyOf": [
{
"type": "string",
"minLength": 1,
"maxLength": 80
},
{
"type": "number",
"minimum": 0
}
],
"description": "Wall height. Length with its unit, e.g. \"12 ft 6 in\", \"12'6\\\"\", \"150 in\", \"3m80\"; a bare number is read as inches."
}
},
"required": [
"width",
"height"
],
"additionalProperties": false
},
"minItems": 1,
"maxItems": 12,
"description": "Walls to paper, 1 to 12."
},
"openings": {
"type": "array",
"items": {
"type": "object",
"properties": {
"wall": {
"type": "integer",
"minimum": 1,
"maximum": 12,
"description": "Wall number (1 = first wall). Default 1."
},
"width": {
"anyOf": [
{
"type": "string",
"minLength": 1,
"maxLength": 80
},
{
"type": "number",
"minimum": 0
}
],
"description": "Opening width. Length with its unit, e.g. \"12 ft 6 in\", \"12'6\\\"\", \"150 in\", \"3m80\"; a bare number is read as inches."
},
"height": {
"anyOf": [
{
"type": "string",
"minLength": 1,
"maxLength": 80
},
{
"type": "number",
"minimum": 0
}
],
"description": "Opening height. Length with its unit, e.g. \"12 ft 6 in\", \"12'6\\\"\", \"150 in\", \"3m80\"; a bare number is read as inches."
},
"fromLeft": {
"anyOf": [
{
"type": "string",
"minLength": 1,
"maxLength": 80
},
{
"type": "number",
"minimum": 0
}
],
"description": "Distance from the left end of the wall to the opening. Length with its unit, e.g. \"12 ft 6 in\", \"12'6\\\"\", \"150 in\", \"3m80\"; a bare number is read as inches."
},
"sillHeight": {
"anyOf": [
{
"type": "string",
"minLength": 1,
"maxLength": 80
},
{
"type": "number",
"minimum": 0
}
],
"description": "Height of the bottom of the opening from the floor; \"0\" for a door. Default 0. Length with its unit, e.g. \"12 ft 6 in\", \"12'6\\\"\", \"150 in\", \"3m80\"; a bare number is read as inches."
}
},
"required": [
"width",
"height",
"fromLeft"
],
"additionalProperties": false
},
"maxItems": 12,
"description": "Doors and windows; only drops fully crossed by an opening are shortened."
},
"rollWidth": {
"anyOf": [
{
"type": "string",
"minLength": 1,
"maxLength": 80
},
{
"type": "number",
"minimum": 0
}
],
"description": "Roll width, from the label of the roll. Length with its unit, e.g. \"12 ft 6 in\", \"12'6\\\"\", \"150 in\", \"3m80\"; a bare number is read as inches."
},
"rollLength": {
"anyOf": [
{
"type": "string",
"minLength": 1,
"maxLength": 80
},
{
"type": "number",
"minimum": 0
}
],
"description": "Roll length, from the label (e.g. \"33 ft\"). Length with its unit, e.g. \"12 ft 6 in\", \"12'6\\\"\", \"150 in\", \"3m80\"; a bare number is read as inches."
},
"repeat": {
"anyOf": [
{
"type": "string",
"minLength": 1,
"maxLength": 80
},
{
"type": "number",
"minimum": 0
}
],
"description": "Vertical pattern repeat from the label; \"0\" for none. Length with its unit, e.g. \"12 ft 6 in\", \"12'6\\\"\", \"150 in\", \"3m80\"; a bare number is read as inches."
},
"match": {
"type": "string",
"enum": [
"straight",
"half-drop",
"random"
],
"description": "Pattern match from the label: straight (default), half-drop or random."
},
"trim": {
"anyOf": [
{
"type": "string",
"minLength": 1,
"maxLength": 80
},
{
"type": "number",
"minimum": 0
}
],
"description": "Trim allowance per drop, top and bottom together. Default 4 in. Length with its unit, e.g. \"12 ft 6 in\", \"12'6\\\"\", \"150 in\", \"3m80\"; a bare number is read as inches."
},
"deductOpenings": {
"type": "boolean",
"description": "Shorten drops over doors and windows (default true)."
}
},
"required": [
"walls",
"rollWidth",
"rollLength",
"repeat"
],
"additionalProperties": false
},
"maxItems": 6,
"description": "Wallpaper orders, one per paper, with the plan_wallpaper_order arguments."
},
"stockLengthsFt": {
"type": "array",
"items": {
"type": "number",
"exclusiveMinimum": 0,
"maximum": 24
},
"minItems": 1,
"maxItems": 8,
"description": "Board lengths you can buy, in feet (1 to 8 values, each up to 24). Default: 8, 10, 12 and 16 ft are compared and any of them can be recommended; pass the lengths your store sells to plan on those."
},
"kerf": {
"anyOf": [
{
"type": "string",
"minLength": 1,
"maxLength": 80
},
{
"type": "number",
"minimum": 0
}
],
"description": "Saw kerf, charged between two cuts on the same board. Default 1/8 in. Length with its unit, e.g. \"12 ft 6 in\", \"12'6\\\"\", \"150 in\", \"3m80\"; a bare number is read as inches."
},
"extraPercent": {
"type": "number",
"minimum": 0,
"maximum": 100,
"description": "Extra boards to buy, % of the boards in the cut plan. Default 10."
}
},
"additionalProperties": false,
"$schema": "http://json-schema.org/draft-07/schema#"
}Output Schema
{
"type": "object",
"properties": {
"order": {
"type": "array",
"items": {
"type": "object",
"properties": {
"material": {
"type": "string",
"enum": [
"flooring",
"trim",
"wallpaper"
]
},
"item": {
"type": "string"
},
"quantity": {
"type": "integer"
},
"unit": {
"$ref": "#/properties/order/items/properties/item"
}
},
"required": [
"material",
"item",
"quantity",
"unit"
],
"additionalProperties": false
}
},
"flooring": {
"type": "array",
"items": {
"type": "object",
"properties": {
"name": {
"$ref": "#/properties/order/items/properties/item"
},
"boxes": {
"$ref": "#/properties/order/items/properties/quantity"
},
"planks": {
"$ref": "#/properties/order/items/properties/quantity"
},
"sourcePlanks": {
"$ref": "#/properties/order/items/properties/quantity"
},
"sparePlanks": {
"$ref": "#/properties/order/items/properties/quantity"
},
"offcutSqFt": {
"type": "number"
},
"wastePercent": {
"$ref": "#/properties/flooring/items/properties/offcutSqFt"
},
"piecesFromOtherRooms": {
"$ref": "#/properties/order/items/properties/quantity"
},
"bestScenario": {
"type": [
"string",
"null"
]
},
"missingPlanksAtAllowance": {
"anyOf": [
{
"$ref": "#/properties/order/items/properties/quantity"
},
{
"type": "null"
}
]
}
},
"required": [
"name",
"boxes",
"planks",
"sourcePlanks",
"sparePlanks",
"offcutSqFt",
"wastePercent",
"piecesFromOtherRooms",
"bestScenario",
"missingPlanksAtAllowance"
],
"additionalProperties": false
}
},
"trim": {
"type": "array",
"items": {
"type": "object",
"properties": {
"material": {
"$ref": "#/properties/order/items/properties/item"
},
"walls": {
"type": "array",
"items": {
"$ref": "#/properties/order/items/properties/item"
}
},
"buy": {
"anyOf": [
{
"type": "object",
"properties": {
"boards": {
"$ref": "#/properties/order/items/properties/quantity"
},
"boardsInPlan": {
"$ref": "#/properties/order/items/properties/quantity"
},
"linearFt": {
"$ref": "#/properties/flooring/items/properties/offcutSqFt"
},
"stockLengthFt": {
"$ref": "#/properties/flooring/items/properties/offcutSqFt"
}
},
"required": [
"boards",
"boardsInPlan",
"linearFt",
"stockLengthFt"
],
"additionalProperties": false
},
{
"type": "null"
}
]
},
"noStockFits": {
"anyOf": [
{
"type": "array",
"items": {
"$ref": "#/properties/order/items/properties/item"
}
},
{
"type": "null"
}
]
},
"offcutFt": {
"type": [
"number",
"null"
]
},
"offcutPercent": {
"type": [
"number",
"null"
]
},
"separateOrders": {
"anyOf": [
{
"type": "object",
"properties": {
"boards": {
"$ref": "#/properties/order/items/properties/quantity"
},
"boardsInPlan": {
"$ref": "#/properties/order/items/properties/quantity"
},
"linearFt": {
"$ref": "#/properties/flooring/items/properties/offcutSqFt"
},
"offcutPercent": {
"$ref": "#/properties/flooring/items/properties/offcutSqFt"
},
"byWall": {
"type": "array",
"items": {
"type": "object",
"properties": {
"wall": {
"$ref": "#/properties/order/items/properties/item"
},
"boards": {
"$ref": "#/properties/order/items/properties/quantity"
},
"boardsInPlan": {
"$ref": "#/properties/order/items/properties/quantity"
},
"stockLengthFt": {
"$ref": "#/properties/flooring/items/properties/offcutSqFt"
}
},
"required": [
"wall",
"boards",
"boardsInPlan",
"stockLengthFt"
],
"additionalProperties": false
}
}
},
"required": [
"boards",
"boardsInPlan",
"linearFt",
"offcutPercent",
"byWall"
],
"additionalProperties": false
},
{
"type": "null"
}
],
"description": "One order per wall, each wall on its own best stock length (what plan_trim_order answers for it)."
},
"boardsSaved": {
"anyOf": [
{
"$ref": "#/properties/order/items/properties/quantity"
},
{
"type": "null"
}
]
},
"linearFtSaved": {
"type": [
"number",
"null"
]
},
"packing": {
"anyOf": [
{
"type": "object",
"properties": {
"better": {
"anyOf": [
{
"type": "string",
"enum": [
"together",
"one order per wall"
]
},
{
"type": "null"
}
]
},
"decidedBy": {
"type": [
"string",
"null"
],
"description": "The first criterion of comparisonRule on which the two options differ."
}
},
"required": [
"better",
"decidedBy"
],
"additionalProperties": false
},
{
"type": "null"
}
],
"description": "Packed together vs one order per wall by comparisonRule; better is null on a tie."
},
"cutPatterns": {
"type": "array",
"items": {
"type": "object",
"properties": {
"boards": {
"$ref": "#/properties/order/items/properties/quantity"
},
"stockLengthFt": {
"$ref": "#/properties/flooring/items/properties/offcutSqFt"
},
"cuts": {
"$ref": "#/properties/order/items/properties/item"
},
"offcut": {
"$ref": "#/properties/order/items/properties/item"
}
},
"required": [
"boards",
"stockLengthFt",
"cuts",
"offcut"
],
"additionalProperties": false
}
},
"stockComparison": {
"type": "array",
"items": {
"type": "object",
"properties": {
"stockLengthFt": {
"$ref": "#/properties/flooring/items/properties/offcutSqFt"
},
"boardsToBuy": {
"anyOf": [
{
"$ref": "#/properties/order/items/properties/quantity"
},
{
"type": "null"
}
]
}
},
"required": [
"stockLengthFt",
"boardsToBuy"
],
"additionalProperties": false
}
}
},
"required": [
"material",
"walls",
"buy",
"noStockFits",
"offcutFt",
"offcutPercent",
"separateOrders",
"boardsSaved",
"linearFtSaved",
"packing",
"cutPatterns",
"stockComparison"
],
"additionalProperties": false
}
},
"wallpaper": {
"type": "array",
"items": {
"type": "object",
"properties": {
"name": {
"$ref": "#/properties/order/items/properties/item"
},
"rolls": {
"$ref": "#/properties/order/items/properties/quantity"
},
"drops": {
"$ref": "#/properties/order/items/properties/quantity"
},
"dropsPerRoll": {
"$ref": "#/properties/order/items/properties/quantity"
},
"leftoverFt": {
"$ref": "#/properties/flooring/items/properties/offcutSqFt"
},
"matchWasteFt": {
"$ref": "#/properties/flooring/items/properties/offcutSqFt"
},
"wastePercent": {
"$ref": "#/properties/flooring/items/properties/offcutSqFt"
}
},
"required": [
"name",
"rolls",
"drops",
"dropsPerRoll",
"leftoverFt",
"matchWasteFt",
"wastePercent"
],
"additionalProperties": false
}
},
"offcuts": {
"type": "object",
"properties": {
"flooringSqFt": {
"type": [
"number",
"null"
]
},
"trimFt": {
"type": [
"number",
"null"
]
},
"wallpaperLeftoverFt": {
"type": [
"number",
"null"
]
}
},
"required": [
"flooringSqFt",
"trimFt",
"wallpaperLeftoverFt"
],
"additionalProperties": false
},
"cutList": {
"type": "object",
"properties": {
"flooring": {
"type": "array",
"items": {
"type": "object",
"properties": {
"item": {
"$ref": "#/properties/order/items/properties/item"
},
"where": {
"$ref": "#/properties/order/items/properties/item"
},
"piece": {
"$ref": "#/properties/order/items/properties/item"
},
"length": {
"$ref": "#/properties/order/items/properties/item"
},
"width": {
"$ref": "#/properties/order/items/properties/item"
},
"qty": {
"$ref": "#/properties/order/items/properties/quantity"
}
},
"required": [
"item",
"where",
"piece",
"length",
"width",
"qty"
],
"additionalProperties": false
}
},
"trim": {
"type": "array",
"items": {
"$ref": "#/properties/cutList/properties/flooring/items"
}
},
"wallpaper": {
"type": "array",
"items": {
"$ref": "#/properties/cutList/properties/flooring/items"
}
}
},
"required": [
"flooring",
"trim",
"wallpaper"
],
"additionalProperties": false
},
"stockLengthsFt": {
"type": "array",
"items": {
"$ref": "#/properties/flooring/items/properties/offcutSqFt"
}
},
"comparisonRule": {
"type": "string",
"description": "The ranking used for every \"better\" statement in this result; a tie recommends nothing."
},
"optimal": {
"type": "boolean"
},
"method": {
"$ref": "#/properties/order/items/properties/item"
},
"links": {
"type": "array",
"items": {
"type": "object",
"properties": {
"what": {
"$ref": "#/properties/order/items/properties/item"
},
"url": {
"$ref": "#/properties/order/items/properties/item"
}
},
"required": [
"what",
"url"
],
"additionalProperties": false
}
},
"warnings": {
"type": "array",
"items": {
"$ref": "#/properties/order/items/properties/item"
}
},
"csv": {
"$ref": "#/properties/order/items/properties/item"
}
},
"required": [
"order",
"flooring",
"trim",
"wallpaper",
"offcuts",
"cutList",
"stockLengthsFt",
"comparisonRule",
"optimal",
"method",
"links",
"warnings",
"csv"
],
"additionalProperties": false,
"$schema": "http://json-schema.org/draft-07/schema#"
}Community
Evidence