# WP21 — LLM-assisted coefficient extraction protocol (Phase C) Input per paper: `data/extracted/dumps/.txt` (metadata header, abstract, candidate table pages with page numbers). Output per paper: `data/extracted/json/.json` conforming to the schema below. One extractor agent per batch of papers; an independent second extractor re-does a random 15 % sample (`data/validated/`). Rules: 1. Extract ONLY what is printed. Never infer a standard error; if only stars are given, record `se: null`, `p_stars: "***"` and the star legend in `notes`. If t-statistics are in parentheses (check the table note), record `t`, not `se`. 2. One row per coefficient of a hedonic variable (taxonomy in `scripts/harmonization/taxonomy.yaml`) per model (column). Record the exact printed variable name and the table/column/page. Do not extract constants, fixed-effect dummies, or variables that are not property/neighbourhood/environment/location/market/AI characteristics. 3. Record the dependent variable and its transformation (`log`, `level`, `boxcox`, `per_m2`, `other`) and the regressor transformation (`level`, `log`, `binary`, `dummy`, `squared`, `other`) and unit (`m2`, `sqft`, `km`, `miles`, `m`, `years`, `count`, `index`, `share`, `db`, `currency`, ...). If a variable enters as log, say so. 4. Study-level fields: country, region/city, sample period (start/end years of the transactions), property type (single_family / condo_apartment / multifamily / rental / mixed / unknown), price type (transaction / listing / appraisal / rent), n_obs (per model if it varies), estimator (OLS / WLS / spatial_lag / spatial_error / SAC / GWR / FE_panel / IV / quantile / ML_marginal / other), fixed effects (time, location), SE type (OLS / robust / clustered / unknown), R² if printed. 5. `confidence`: `high` when the number was read from a clear table with an explicit SE/t legend; `medium` when the legend is ambiguous or the table is partly garbled; `low` when a value had to be guessed from context (then it must not be used). 6. If the paper is not a hedonic price study after all (no residential price outcome or no characteristic coefficients), return `{"record_id": ..., "eligible": false, "exclusion_reason": "..."}`. ## JSON schema (per paper) ```json { "record_id": "string", "eligible": true, "exclusion_reason": null, "study": {"title": "", "year": 0, "doi": "", "country": "", "region_city": "", "sample_start": 0, "sample_end": 0, "property_type": "", "price_type": "", "data_source": "", "document_type": "journal|working_paper|thesis|conference|chapter", "estimators": [""], "spatial_method": "", "time_fe": true, "location_fe": true, "se_type": "", "n_obs_total": 0, "ai_methods": [""], "notes": ""}, "models": [{"model_id": "T2-c1", "table": "2", "column": "1", "page": 12, "dep_var": "", "dep_transform": "log", "estimator": "OLS", "n_obs": 0, "r2": null, "se_or_t_in_parentheses": "se|t|p|none", "sample_subset": ""}], "coefficients": [{"model_id": "T2-c1", "var_name_printed": "", "taxonomy_id": "living_area", "x_transform": "log", "x_unit": "m2", "beta": 0.0, "se": null, "t": null, "p": null, "p_stars": "", "ci_lo": null, "ci_hi": null, "page": 12, "confidence": "high", "notes": ""}] } ```