{
    "_comment": "The rent contract between projectInvestment.js (draws it on the project page) and Src\\Analysis\\Support\\RentalPrediction (writes it into the Layout Analysis table). Both read this file and must reach the same numbers. Shaped to exercise the WHOLE rule, because a harness that covers half of it stays green while the halves disagree — which is exactly what happened twice: a wrong bedroom count, listings past the 1 km radius, an undersized unit, an outlier beyond two standard deviations, four projects so the ten-nearest selection has something to choose, a STUDIO pool (bedrooms 0) containing a listing whose bedrooms is NULL — which JS reads as 0 via Number(null) and PHP must too — and a DUAL-KEY layout, whose rent is the sum of each key's own bedroom market rather than one prediction for the combined count.",
    "expected_median": 3500,
    "median_rent": 9999,
    "default_bedrooms": 2,
    "sale_median_size": {
        "2": 800,
        "3": 1200,
        "0": 420,
        "1": 600,
        "4": 1500,
        "5": 2000
    },
    "listings": [
        {
            "project_name": "Near One",
            "bedrooms": 2,
            "rent": 3300,
            "size": 800,
            "distance_km": 0.2
        },
        {
            "project_name": "Near One",
            "bedrooms": 2,
            "rent": 3400,
            "size": 810,
            "distance_km": 0.2
        },
        {
            "project_name": "Near One",
            "bedrooms": 2,
            "rent": 3500,
            "size": 820,
            "distance_km": 0.2
        },
        {
            "project_name": "Near Two",
            "bedrooms": 2,
            "rent": 3500,
            "size": 790,
            "distance_km": 0.5
        },
        {
            "project_name": "Near Two",
            "bedrooms": 2,
            "rent": 3600,
            "size": 805,
            "distance_km": 0.5
        },
        {
            "project_name": "Near Two",
            "bedrooms": 2,
            "rent": 3700,
            "size": 815,
            "distance_km": 0.5
        },
        {
            "project_name": "Edge",
            "bedrooms": 2,
            "rent": 3450,
            "size": 800,
            "distance_km": 1.0
        },
        {
            "project_name": "Far",
            "bedrooms": 2,
            "rent": 1200,
            "size": 800,
            "distance_km": 4.5
        },
        {
            "project_name": "Far",
            "bedrooms": 2,
            "rent": 1250,
            "size": 805,
            "distance_km": 4.5
        },
        {
            "project_name": "Wrong Beds",
            "bedrooms": 3,
            "rent": 9000,
            "size": 1200,
            "distance_km": 0.1
        },
        {
            "project_name": "Tiny",
            "bedrooms": 2,
            "rent": 900,
            "size": 300,
            "distance_km": 0.3
        },
        {
            "project_name": "Near One",
            "bedrooms": 0,
            "rent": 2000,
            "size": 420,
            "distance_km": 0.2
        },
        {
            "project_name": "Near One",
            "bedrooms": 0,
            "rent": 2100,
            "size": 430,
            "distance_km": 0.2
        },
        {
            "project_name": "Near Two",
            "bedrooms": 0,
            "rent": 2200,
            "size": 440,
            "distance_km": 0.5
        },
        {
            "project_name": "Near Two",
            "bedrooms": null,
            "rent": 2400,
            "size": 450,
            "distance_km": 0.5
        },
        {
            "project_name": "Near One",
            "bedrooms": 1,
            "rent": 2800,
            "size": 600,
            "distance_km": 0.2
        },
        {
            "project_name": "Near Two",
            "bedrooms": 1,
            "rent": 2900,
            "size": 610,
            "distance_km": 0.5
        },
        {
            "project_name": "Edge",
            "bedrooms": 1,
            "rent": 3000,
            "size": 620,
            "distance_km": 1.0
        },
        {
            "project_name": "Ring Two A",
            "bedrooms": 4,
            "rent": 5000,
            "size": 1500,
            "distance_km": 1.5
        },
        {
            "project_name": "Ring Two B",
            "bedrooms": 4,
            "rent": 5200,
            "size": 1520,
            "distance_km": 1.6
        },
        {
            "project_name": "Ring Two C",
            "bedrooms": 4,
            "rent": 5400,
            "size": 1540,
            "distance_km": 1.7
        },
        {
            "project_name": "Too Far",
            "bedrooms": 5,
            "rent": 9000,
            "size": 2000,
            "distance_km": 3.2
        }
    ],
    "studio_bedrooms": 0,
    "dual_key_bedrooms": [
        0,
        1
    ],
    "expected_studio_median": 2150,
    "expected_dual_key_median": 5050,
    "widen_bedrooms": 4,
    "unreachable_bedrooms": 5,
    "expected_widened_median": 5200
}