{
    "_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. It also carries a UNIT SIZE, because the default basis is the MIDPOINT of the set's median rent and its median rental PSF x this layout's own area (2026-09-04; it was PSF x size alone before that, and the psf figures are kept so the halves stay covered) — a fixture with no size can only ever exercise the fallback. The dual key carries a SPLIT too (dual_key_sizes): with one, each key is priced at its own bedroom market's rent PSF x its own area; without one, at that market's median rent.",
    "expected_median": 3500,
    "unit_size": 800,
    "expected_psf_rent": 3448,
    "expected_average_rent": 3474,
    "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,
    "dual_key_sizes": [
        300,
        500
    ],
    "expected_dual_key_psf_rent": 3857,
    "expected_dual_key_average_rent": 4454,
    "widen_bedrooms": 4,
    "unreachable_bedrooms": 5,
    "expected_widened_median": 5200
}
