From 9edfd1b9f54ac35dda005acc8d8109023c1f8dc4 Mon Sep 17 00:00:00 2001 From: Vahid Ahmadi Date: Fri, 17 Jul 2026 11:08:44 +0100 Subject: [PATCH 01/17] Add J2J sex-x-age and J2JOD origin-x-destination firm-size extracts Second-wave external references for workstream B (flagged in PR #223's method findings), ahead of the C3 lock: - data/external/j2j_us_sexage_2015on.csv (gate E2): national J2J flows by sex x age group, LEHD R2026Q1 flat file (the sa tabulation -- LEHD's "se" is sex x education), oslp ownership, 2015Q1-2025Q1. All-industry margin only: the full sector detail would breach the 1 MB extract cap. - data/external/j2jod_us_firmsize_od_2015on.csv (gate E11): national J2J flows by origin x destination firm size via the LED Extraction Tool query API (the flat J2JOD files publish only the one-sided margins; the Census data API still requires a key). Full 5 x 5 detail is published for 2015Q1-2016Q1 only -- later quarters are suppressed (status flag 11, a state coverage gap blocks the national aggregate) and carry the margins only. The fetch script pins the new raw sha256s and the LED query + response digest; provenance entries 5-6 document release (R2026Q1, V4.14.0), scope, and the jobs-not-persons / ownership / margin caveats. Loaders with label/flag validation and pinning tests follow the existing extract pattern; existing extracts rebuild byte-identically. Co-Authored-By: Claude Fable 5 --- data/external/employer_firm_target_sources.md | 85 +- data/external/j2j_us_sexage_2015on.csv | 1108 +++++++++++++ data/external/j2jod_us_firmsize_od_2015on.csv | 1477 +++++++++++++++++ scripts/fetch_employer_firm_targets.py | 215 +++ src/populace_dynamics/firms/targets.py | 151 +- tests/test_firms_targets.py | 132 ++ 6 files changed, 3157 insertions(+), 11 deletions(-) create mode 100644 data/external/j2j_us_sexage_2015on.csv create mode 100644 data/external/j2jod_us_firmsize_od_2015on.csv diff --git a/data/external/employer_firm_target_sources.md b/data/external/employer_firm_target_sources.md index 5b2d1c76..66f9cdce 100644 --- a/data/external/employer_firm_target_sources.md +++ b/data/external/employer_firm_target_sources.md @@ -1,6 +1,6 @@ # Employer-firm target extract provenance -Provenance sidecar for the four committed aggregate extracts that +Provenance sidecar for the committed aggregate extracts that feed the employer-firm extension's calibration targets and gate references (E1/E2/E7/E11/E12; issue #192, ADR 0003, workstream B). All are small, tidy derivatives of published public aggregate files — @@ -92,5 +92,84 @@ are keyless and authoritative. firm-size-coded contribution as published. 2025Q1 firm-size cells are suppressed in this release (status flag 5) and load as NaN. - **Unit caveat:** job counts, as for QWI. Origin-x-destination - size-ladder flows (E11's J2JOD reference) are a later, separate - extract. + size-ladder flows are in `j2jod_us_firmsize_od_2015on.csv` (entry + 6 below). + +## 5. `j2j_us_sexage_2015on.csv` — J2J flows by sex x age group + +Fetched on **2026-07-17** (extracts 5 and 6 are the second wave, +flagged in PR #223's method findings; same fetch script). + +- **Source URL:** https://lehd.ces.census.gov/data/j2j/R2026Q1/us/j2j/j2j_us_sa_f_gn_ns_oslp_u.csv.gz + (release-stamped, not `latest_release`; see the QWI note above) +- **Release:** R2026Q1, V4.14.0 (`version_j2j.txt`: J2J US + 2000:2-2025:1, `j2jpu_us_20260312_1118`); sex x age worker detail + (`sa`), no firm characteristics (`f`), not seasonally adjusted, + state/local/private ownership (`oslp`) +- **Raw sha256:** `0e043fc8796bd3e11231ff6d174fdfebed926c9d40da4f069a3ad31eed55aba0` +- **Transformation:** pure row/column filter, no re-aggregation: + the all-industry margin (`industry == "00"`) only, the full + sex (0/1/2) x age (A00-A08) grid margins included, 2015Q1 onward; + 12 flow measures with status flags. The full NAICS-sector detail + would breach the 1 MB extract cap, so it is not committed; the + raw sector file stays available at the pinned URL. Sex and + age-group labels joined from the LEHD schema + (https://lehd.ces.census.gov/data/schema/latest/label_agegrp.csv, + sha256 `eb478c6eda6c12a57609afaf89bbb42dd4d9fb2ee883f6dd0399fb717b27889b`). +- **Naming caveat:** the age x sex tabulation is LEHD's `sa` + crossing; LEHD's `se` crossing is sex x *education* (the gate-E2 + registration's "se" shorthand refers to sex x age, i.e. `sa`). +- **Unit caveats:** job counts, not persons (see the QWI entry); + ownership is `oslp` here versus `op` for the QWI extract, so + levels are not directly comparable across the two. 2025Q1 + separation-side measures carry status flag -1 (not computable + until the next quarter is released) and load as NaN. + +## 6. `j2jod_us_firmsize_od_2015on.csv` — J2J flows by origin x destination firm size + +- **Source:** LED Extraction Tool query API, + https://ledextract.ces.census.gov (POST the pinned JSON request in + `scripts/fetch_employer_firm_targets.py` to `/j2j/download`, then + GET `/j2j/download.csv?` from the 303 redirect). + The LEHD flat J2JOD files (`j2jod_us_d_fs_*`) publish only the + one-sided firm-size margins — the full origin x destination cross + is not in any flat file — and the Census data API + (`api.census.gov`) still requires a key (probed 2026-07-17), so + the LED Extraction Tool is the pinned keyless source. +- **Release:** R2026Q1, V4.14.0 (the tool's `/j2j/schema` reports + V4.14.0; matches `version_j2jod.txt` for R2026Q1: J2JOD US + 2000:2-2025:1, `j2jodpu_us_20260312_1118`); national, all + industries, not + seasonally adjusted, ownership A00 (state/local government plus + private — the tool's reported `ownercode`; equivalent to `oslp`) +- **Fetched-CSV sha256:** `adbd16e2c23ee3a87a22c5f6520eca37b09f8036131d4147c081c89d6a5a867f` + (the query was repeated at fetch time and is byte-stable). The + tool serves the *current* release only, so this pin breaks loudly + when LEHD rotates to R2026Q2; re-pin deliberately and update this + entry. +- **Transformation:** column subset and sort only, no + re-aggregation: the full 6 x 6 firm-size grid (codes 0-5 on both + origin and destination sides), 2015Q1-2025Q1 (ordinal quarters + 8060-8100), six flow measures (EE, AQHire, J2J = EE + AQHire, and + their stable variants) with status flags. +- **Detail-window caveat (important for E11):** the full 5 x 5 + origin x destination detail is released only for + **2015Q1-2016Q1**; from 2016Q2 on every national detail cell + carries status flag 11 ("aggregate of cells not released because + component cells do not meet publication standards") and loads as + NaN. The tool aggregates the state-level OD tabulations to the + national level, and a state coverage gap from 2016Q2 blocks the + aggregate; the same suppression governs the J2J Explorer, so no + keyless public source carries the later cross. The one-sided + margins (code 0 on either axis) remain published through 2025Q1. + E11's origin x destination shape reference is therefore the + 2015Q1-2016Q1 window; later quarters constrain the margins only. +- **Margin caveat:** the code-0 margins are the tool's aggregates of + the firm-size-coded tabulation (status flag 10/12), so they sit + slightly below the flat-file `d_fs` margins, which include + public-sector flows (firm size "N"): e.g. 2015Q1 all-size EE is + 3,985,308 here versus 3,988,566 in `j2jod_us_d_fs_gn_n_oslp_u`. + Detail cells that fail publication standards (status flag 11) + load as NaN — common in the small-x-large corners. +- **Unit caveat:** job counts, as for QWI/J2J; firm size is + administrative national March employment on both sides. diff --git a/data/external/j2j_us_sexage_2015on.csv b/data/external/j2j_us_sexage_2015on.csv new file mode 100644 index 00000000..2d7e685f --- /dev/null +++ b/data/external/j2j_us_sexage_2015on.csv @@ -0,0 +1,1108 @@ +year,quarter,sex,sex_label,agegrp,agegrp_label,MainB,MainE,MHire,MSep,EEHire,EESep,AQHire,AQSep,J2JHire,J2JSep,NEHire,ENSep,sMainB,sMainE,sMHire,sMSep,sEEHire,sEESep,sAQHire,sAQSep,sJ2JHire,sJ2JSep,sNEHire,sENSep +2015,1,0,All Sexes,A00,All Ages (14-99),124416927,124811536,12057838,11382638,3988566,3988775,1940867,2000330,5929433,5984392,7354230,6967042,1,1,1,1,1,1,1,1,1,1,1,1 +2015,1,0,All Sexes,A01,14-18,2418446,2708674,803857,498244,125835,125836,69571,111019,195405,237630,652005,362195,1,1,1,1,1,1,1,1,1,1,1,1 +2015,1,0,All Sexes,A02,19-21,5428713,5547322,1361219,1199800,415690,415720,202154,283825,617844,699582,862805,744992,1,1,1,1,1,1,1,1,1,1,1,1 +2015,1,0,All Sexes,A03,22-24,7459783,7555110,1413374,1269417,509608,509636,236218,262074,745827,771388,807513,712703,1,1,1,1,1,1,1,1,1,1,1,1 +2015,1,0,All Sexes,A04,25-34,27382001,27472706,3187552,3015405,1217370,1217439,539381,554603,1756752,1770826,1774127,1685338,1,1,1,1,1,1,1,1,1,1,1,1 +2015,1,0,All Sexes,A05,35-44,26554573,26649869,2146050,2004296,775670,775696,365989,342868,1141658,1117698,1242179,1147893,1,1,1,1,1,1,1,1,1,1,1,1 +2015,1,0,All Sexes,A06,45-54,27520148,27566951,1721033,1641703,580367,580417,304012,264308,884379,842793,1036693,991121,1,1,1,1,1,1,1,1,1,1,1,1 +2015,1,0,All Sexes,A07,55-64,20859090,20689387,1015156,1174179,287519,287540,173110,140944,460629,427478,667345,838271,1,1,1,1,1,1,1,1,1,1,1,1 +2015,1,0,All Sexes,A08,65-99,6794173,6621516,409597,579593,76506,76492,50433,40690,126939,116997,311563,484529,1,1,1,1,1,1,1,1,1,1,1,1 +2015,1,1,Male,A00,All Ages (14-99),62895777,63149879,6336804,5965112,2133477,2133602,1077565,1091846,3211043,3222119,3881726,3628906,1,1,1,1,1,1,1,1,1,1,1,1 +2015,1,1,Male,A01,14-18,1095711,1244379,386187,231602,54872,54875,32904,51267,87776,106483,321270,172767,1,1,1,1,1,1,1,1,1,1,1,1 +2015,1,1,Male,A02,19-21,2621485,2697078,690300,597728,206030,206052,106825,145142,312855,351344,450568,375293,1,1,1,1,1,1,1,1,1,1,1,1 +2015,1,1,Male,A03,22-24,3669530,3729404,723240,644772,256526,256545,127258,140023,383783,396461,426986,367241,1,1,1,1,1,1,1,1,1,1,1,1 +2015,1,1,Male,A04,25-34,13984934,14053390,1705473,1600796,662469,662525,303473,309222,965943,970919,951765,883726,1,1,1,1,1,1,1,1,1,1,1,1 +2015,1,1,Male,A05,35-44,13661887,13707903,1148546,1082304,432326,432327,208360,193305,640686,624870,656350,610265,1,1,1,1,1,1,1,1,1,1,1,1 +2015,1,1,Male,A06,45-54,13945346,13967550,914839,879347,318431,318454,171490,148826,489920,465930,549260,527167,1,1,1,1,1,1,1,1,1,1,1,1 +2015,1,1,Male,A07,55-64,10403974,10321350,545840,623532,160301,160308,98604,81033,258905,240702,357024,439787,1,1,1,1,1,1,1,1,1,1,1,1 +2015,1,1,Male,A08,65-99,3512909,3428824,222379,305030,42523,42516,28651,23027,71174,65410,168503,252660,1,1,1,1,1,1,1,1,1,1,1,1 +2015,1,2,Female,A00,All Ages (14-99),61521150,61661657,5721034,5417527,1855089,1855174,863302,908485,2718391,2762273,3472504,3338136,1,1,1,1,1,1,1,1,1,1,1,1 +2015,1,2,Female,A01,14-18,1322735,1464295,417670,266642,70963,70961,36666,59752,107629,131146,330736,189428,1,1,1,1,1,1,1,1,1,1,1,1 +2015,1,2,Female,A02,19-21,2807228,2850244,670919,602072,209661,209668,95329,138683,304989,348239,412237,369700,1,1,1,1,1,1,1,1,1,1,1,1 +2015,1,2,Female,A03,22-24,3790253,3825706,690135,624646,253083,253090,108960,122051,362043,374928,380526,345462,1,1,1,1,1,1,1,1,1,1,1,1 +2015,1,2,Female,A04,25-34,13397067,13419316,1482079,1414609,554901,554914,235908,245381,790809,799907,822362,801612,1,1,1,1,1,1,1,1,1,1,1,1 +2015,1,2,Female,A05,35-44,12892686,12941966,997504,921992,343344,343368,157629,149563,500972,492828,585828,537628,1,1,1,1,1,1,1,1,1,1,1,1 +2015,1,2,Female,A06,45-54,13574801,13599402,806194,762356,261936,261964,132523,115482,394459,376863,487433,463954,1,1,1,1,1,1,1,1,1,1,1,1 +2015,1,2,Female,A07,55-64,10455116,10368037,469316,550646,127218,127232,74505,59911,201723,186776,310322,398483,1,1,1,1,1,1,1,1,1,1,1,1 +2015,1,2,Female,A08,65-99,3281264,3192691,187218,274563,33983,33976,21782,17663,55765,51587,143060,231869,1,1,1,1,1,1,1,1,1,1,1,1 +2015,2,0,All Sexes,A00,All Ages (14-99),124730876,126976005,15767486,13080629,4862972,4863034,2001044,2163685,6864571,7016092,10004720,7750413,1,1,1,1,1,1,1,1,1,1,1,1 +2015,2,0,All Sexes,A01,14-18,2374533,3404242,1668647,601759,194253,194162,91133,106271,285389,301189,1419276,397319,1,1,1,1,1,1,1,1,1,1,1,1 +2015,2,0,All Sexes,A02,19-21,5372113,6303797,2355851,1308078,566195,566231,281201,242567,847409,808126,1631816,704020,1,1,1,1,1,1,1,1,1,1,1,1 +2015,2,0,All Sexes,A03,22-24,7398107,7699771,1846428,1473053,643992,644022,265598,293754,909681,936232,1081510,779238,1,1,1,1,1,1,1,1,1,1,1,1 +2015,2,0,All Sexes,A04,25-34,27482646,27759609,3799584,3415632,1453506,1453548,563815,622933,2017532,2073378,2122062,1840671,1,1,1,1,1,1,1,1,1,1,1,1 +2015,2,0,All Sexes,A05,35-44,26633463,26735883,2439555,2281371,902053,902129,345891,392764,1248079,1293281,1398889,1291659,1,1,1,1,1,1,1,1,1,1,1,1 +2015,2,0,All Sexes,A06,45-54,27548190,27589243,1947278,1868107,671143,671220,266312,296310,937549,964838,1165011,1118863,1,1,1,1,1,1,1,1,1,1,1,1 +2015,2,0,All Sexes,A07,55-64,21025501,20788911,1170934,1395160,336299,336242,144985,161530,481295,496464,768982,1001226,1,1,1,1,1,1,1,1,1,1,1,1 +2015,2,0,All Sexes,A08,65-99,6896322,6694548,539208,737471,95531,95478,42109,47556,137637,142584,417175,617417,1,1,1,1,1,1,1,1,1,1,1,1 +2015,2,1,Male,A00,All Ages (14-99),63085477,64682213,8507229,6699767,2628731,2629216,1092402,1103764,3721683,3726499,5461758,3859451,1,1,1,1,1,1,1,1,1,1,1,1 +2015,2,1,Male,A01,14-18,1084140,1615652,836840,289699,92317,92319,41596,48909,133919,141635,720694,193259,1,1,1,1,1,1,1,1,1,1,1,1 +2015,2,1,Male,A02,19-21,2605540,3113866,1209259,651677,282266,282402,143008,121282,425305,403484,860179,354069,1,1,1,1,1,1,1,1,1,1,1,1 +2015,2,1,Male,A03,22-24,3645762,3850101,973619,735607,328569,328648,141529,144321,470166,472274,590815,386376,1,1,1,1,1,1,1,1,1,1,1,1 +2015,2,1,Male,A04,25-34,14042941,14284940,2085654,1790551,801602,801715,314015,323793,1115805,1123616,1176896,932237,1,1,1,1,1,1,1,1,1,1,1,1 +2015,2,1,Male,A05,35-44,13699275,13820414,1348001,1199226,509057,509156,195127,203244,704315,711145,772829,648760,1,1,1,1,1,1,1,1,1,1,1,1 +2015,2,1,Male,A06,45-54,13956060,14045784,1074567,965301,371932,372027,149819,152457,521845,522729,651044,558170,1,1,1,1,1,1,1,1,1,1,1,1 +2015,2,1,Male,A07,55-64,10485250,10439699,662749,699583,189552,189538,83430,84643,273011,273358,441072,484131,1,1,1,1,1,1,1,1,1,1,1,1 +2015,2,1,Male,A08,65-99,3566509,3511757,316540,368123,53437,53412,23879,25115,77317,78257,248230,302448,1,1,1,1,1,1,1,1,1,1,1,1 +2015,2,2,Female,A00,All Ages (14-99),61645399,62293792,7260257,6380862,2234242,2233818,908642,1059922,3142888,3289594,4542963,3890962,1,1,1,1,1,1,1,1,1,1,1,1 +2015,2,2,Female,A01,14-18,1290393,1788591,831807,312060,101937,101843,49537,57362,151471,159554,698582,204060,1,1,1,1,1,1,1,1,1,1,1,1 +2015,2,2,Female,A02,19-21,2766573,3189931,1146592,656401,283929,283830,138193,121286,422104,404642,771637,349951,1,1,1,1,1,1,1,1,1,1,1,1 +2015,2,2,Female,A03,22-24,3752345,3849669,872809,737445,315424,315375,124069,149433,439515,463958,490695,392862,1,1,1,1,1,1,1,1,1,1,1,1 +2015,2,2,Female,A04,25-34,13439705,13474669,1713931,1625080,651904,651833,249800,299140,901727,949763,945166,908433,1,1,1,1,1,1,1,1,1,1,1,1 +2015,2,2,Female,A05,35-44,12934188,12915469,1091554,1082145,392996,392973,150764,189520,543764,582136,626060,642899,1,1,1,1,1,1,1,1,1,1,1,1 +2015,2,2,Female,A06,45-54,13592131,13543460,872710,902806,299211,299193,116493,143853,415704,442109,513967,560693,1,1,1,1,1,1,1,1,1,1,1,1 +2015,2,2,Female,A07,55-64,10540251,10349212,508185,695578,146747,146705,61555,76887,208284,223106,327910,517095,1,1,1,1,1,1,1,1,1,1,1,1 +2015,2,2,Female,A08,65-99,3329813,3182791,222668,369348,42094,42066,18230,22441,60319,64327,168946,314969,1,1,1,1,1,1,1,1,1,1,1,1 +2015,3,0,All Sexes,A00,All Ages (14-99),126965293,126802087,14821557,14692435,5298212,5297818,2163668,2100936,7462027,7391894,8671908,8836314,1,1,1,1,1,1,1,1,1,1,1,1 +2015,3,0,All Sexes,A01,14-18,2964731,3032623,1241635,1160982,216049,215918,87987,149730,303949,366392,992944,920348,1,1,1,1,1,1,1,1,1,1,1,1 +2015,3,0,All Sexes,A02,19-21,6169201,5707866,1623248,2085974,584121,583550,234959,306108,819011,889346,950684,1405530,1,1,1,1,1,1,1,1,1,1,1,1 +2015,3,0,All Sexes,A03,22-24,7576387,7688363,1836985,1677079,690938,691155,296161,275392,986988,965677,1033388,920742,1,1,1,1,1,1,1,1,1,1,1,1 +2015,3,0,All Sexes,A04,25-34,27757899,28002628,4014857,3658074,1631598,1631834,633199,571729,2264965,2200969,2137775,1896632,1,1,1,1,1,1,1,1,1,1,1,1 +2015,3,0,All Sexes,A05,35-44,26728689,26909231,2570067,2324392,1000788,1000762,396356,346775,1397302,1346475,1411405,1235061,1,1,1,1,1,1,1,1,1,1,1,1 +2015,3,0,All Sexes,A06,45-54,27571674,27639383,1946615,1838234,719496,719501,299115,262228,1018714,979925,1106103,1042323,1,1,1,1,1,1,1,1,1,1,1,1 +2015,3,0,All Sexes,A07,55-64,21188511,21000119,1125732,1300835,356857,356772,166484,144593,523351,500463,700008,890084,1,1,1,1,1,1,1,1,1,1,1,1 +2015,3,0,All Sexes,A08,65-99,7008201,6821874,462418,646865,98366,98327,49407,44382,147747,142646,339600,525596,1,1,1,1,1,1,1,1,1,1,1,1 +2015,3,1,Male,A00,All Ages (14-99),64666860,64436494,7496354,7609439,2743975,2743176,1104075,1084923,3848048,3824149,4377195,4607612,1,1,1,1,1,1,1,1,1,1,1,1 +2015,3,1,Male,A01,14-18,1405029,1409822,582594,573291,97195,97162,39835,68909,136991,166464,472543,465210,1,1,1,1,1,1,1,1,1,1,1,1 +2015,3,1,Male,A02,19-21,3037057,2781531,801510,1058522,285393,285182,118181,151840,403522,437065,480897,732566,1,1,1,1,1,1,1,1,1,1,1,1 +2015,3,1,Male,A03,22-24,3785647,3811318,892905,851831,336939,336882,144693,140233,481544,476885,510918,484761,1,1,1,1,1,1,1,1,1,1,1,1 +2015,3,1,Male,A04,25-34,14271940,14370347,2057918,1912578,856870,856712,328839,303190,1185739,1158529,1090620,994134,1,1,1,1,1,1,1,1,1,1,1,1 +2015,3,1,Male,A05,35-44,13819710,13878296,1319641,1233285,537810,537640,205401,183386,743284,720148,709810,653446,1,1,1,1,1,1,1,1,1,1,1,1 +2015,3,1,Male,A06,45-54,14039660,14057911,1000641,965725,382631,382600,153860,137241,536556,518606,563893,547565,1,1,1,1,1,1,1,1,1,1,1,1 +2015,3,1,Male,A07,55-64,10637473,10549130,591653,673731,193310,193197,87152,76260,280481,268845,365958,455313,1,1,1,1,1,1,1,1,1,1,1,1 +2015,3,1,Male,A08,65-99,3670343,3578139,249492,340476,53826,53801,26112,23864,79930,77609,182555,274616,1,1,1,1,1,1,1,1,1,1,1,1 +2015,3,2,Female,A00,All Ages (14-99),62298433,62365593,7325202,7082996,2554237,2554642,1059593,1016013,3613979,3567744,4294713,4228702,1,1,1,1,1,1,1,1,1,1,1,1 +2015,3,2,Female,A01,14-18,1559702,1622801,659041,587691,118854,118756,48152,80821,166958,199928,520402,455137,1,1,1,1,1,1,1,1,1,1,1,1 +2015,3,2,Female,A02,19-21,3132144,2926335,821738,1027452,298727,298367,116777,154268,415489,452281,469787,672964,1,1,1,1,1,1,1,1,1,1,1,1 +2015,3,2,Female,A03,22-24,3790740,3877046,944080,825248,353999,354273,151468,135159,505444,488792,522470,435981,1,1,1,1,1,1,1,1,1,1,1,1 +2015,3,2,Female,A04,25-34,13485958,13632281,1956938,1745496,774727,775122,304359,268539,1079225,1042440,1047156,902498,1,1,1,1,1,1,1,1,1,1,1,1 +2015,3,2,Female,A05,35-44,12908979,13030935,1250426,1091106,462978,463121,190955,163389,654018,626328,701595,581614,1,1,1,1,1,1,1,1,1,1,1,1 +2015,3,2,Female,A06,45-54,13532014,13581472,945975,872509,336865,336901,145255,124987,482158,461319,542210,494758,1,1,1,1,1,1,1,1,1,1,1,1 +2015,3,2,Female,A07,55-64,10551038,10450989,534080,627104,163547,163575,79332,68333,242870,231619,334050,434770,1,1,1,1,1,1,1,1,1,1,1,1 +2015,3,2,Female,A08,65-99,3337858,3243734,212926,306389,44539,44526,23294,20518,67816,65037,157045,250980,1,1,1,1,1,1,1,1,1,1,1,1 +2015,4,0,All Sexes,A00,All Ages (14-99),126842623,126585492,13474583,13490444,4669965,4664732,2101054,2074282,6770246,6733424,8079115,8331916,1,1,1,1,1,1,1,1,1,1,1,1 +2015,4,0,All Sexes,A01,14-18,2692863,3007531,1021203,689626,179841,179658,126311,99200,306101,279516,810606,495403,1,1,1,1,1,1,1,1,1,1,1,1 +2015,4,0,All Sexes,A02,19-21,5530294,5675475,1499920,1313553,483883,483286,305374,223638,789207,706986,933104,786334,1,1,1,1,1,1,1,1,1,1,1,1 +2015,4,0,All Sexes,A03,22-24,7546860,7626490,1549410,1423189,589826,589236,278277,250128,868015,839016,866414,784622,1,1,1,1,1,1,1,1,1,1,1,1 +2015,4,0,All Sexes,A04,25-34,27998092,28013794,3590297,3495983,1436190,1434854,581399,571967,2017441,2005187,1955057,1937912,1,1,1,1,1,1,1,1,1,1,1,1 +2015,4,0,All Sexes,A05,35-44,26897701,26845492,2354981,2369132,895208,893958,350164,382133,1245247,1275242,1330527,1383840,1,1,1,1,1,1,1,1,1,1,1,1 +2015,4,0,All Sexes,A06,45-54,27656092,27482790,1827550,1982484,657814,656904,264933,312384,922581,967401,1066898,1242901,1,1,1,1,1,1,1,1,1,1,1,1 +2015,4,0,All Sexes,A07,55-64,21392420,21062173,1119224,1448132,332941,332629,148628,181623,481454,513034,723569,1054207,1,1,1,1,1,1,1,1,1,1,1,1 +2015,4,0,All Sexes,A08,65-99,7128303,6871746,512000,768345,94262,94207,45967,53208,140200,147042,392940,646698,1,1,1,1,1,1,1,1,1,1,1,1 +2015,4,1,Male,A00,All Ages (14-99),64430764,63830916,6709443,7237942,2430077,2427537,1085508,1145615,3515222,3569240,3971132,4568712,1,1,1,1,1,1,1,1,1,1,1,1 +2015,4,1,Male,A01,14-18,1247307,1375894,471054,336322,79448,79399,57872,46935,137307,126637,380053,250660,1,1,1,1,1,1,1,1,1,1,1,1 +2015,4,1,Male,A02,19-21,2690305,2734816,729742,670112,235447,235242,150599,117098,386012,352381,462321,415908,1,1,1,1,1,1,1,1,1,1,1,1 +2015,4,1,Male,A03,22-24,3733882,3740821,760115,736439,290866,290558,141611,133673,432451,424161,432131,423513,1,1,1,1,1,1,1,1,1,1,1,1 +2015,4,1,Male,A04,25-34,14352531,14274113,1834860,1885392,761523,760875,308202,320585,1069639,1080416,985874,1063584,1,1,1,1,1,1,1,1,1,1,1,1 +2015,4,1,Male,A05,35-44,13871774,13747448,1186781,1301856,482640,481965,185397,216392,667993,697584,648011,773650,1,1,1,1,1,1,1,1,1,1,1,1 +2015,4,1,Male,A06,45-54,14063891,13889370,911235,1084745,348510,348065,138750,176671,487163,523405,519124,696064,1,1,1,1,1,1,1,1,1,1,1,1 +2015,4,1,Male,A07,55-64,10739152,10510351,560335,793028,180187,180010,78339,104060,258476,283263,352256,582207,1,1,1,1,1,1,1,1,1,1,1,1 +2015,4,1,Male,A08,65-99,3731923,3558102,255322,430048,51455,51423,24740,30201,76181,81395,191362,363125,1,1,1,1,1,1,1,1,1,1,1,1 +2015,4,2,Female,A00,All Ages (14-99),62411859,62754576,6765140,6252502,2239889,2237195,1015546,928667,3255024,3164183,4107983,3763204,1,1,1,1,1,1,1,1,1,1,1,1 +2015,4,2,Female,A01,14-18,1445556,1631637,550148,353303,100393,100259,68439,52265,168794,152879,430554,244742,1,1,1,1,1,1,1,1,1,1,1,1 +2015,4,2,Female,A02,19-21,2839989,2940660,770178,643442,248436,248044,154775,106540,403196,354605,470783,370426,1,1,1,1,1,1,1,1,1,1,1,1 +2015,4,2,Female,A03,22-24,3812977,3885668,789294,686750,298960,298678,136666,116455,435564,414856,434283,361109,1,1,1,1,1,1,1,1,1,1,1,1 +2015,4,2,Female,A04,25-34,13645561,13739681,1755437,1610591,674667,673979,273197,251383,947801,924772,969183,874328,1,1,1,1,1,1,1,1,1,1,1,1 +2015,4,2,Female,A05,35-44,13025927,13098044,1168200,1067276,412567,411993,164768,165741,577254,577658,682515,610190,1,1,1,1,1,1,1,1,1,1,1,1 +2015,4,2,Female,A06,45-54,13592201,13593420,916315,897738,309304,308839,126184,135712,435418,443996,547774,546838,1,1,1,1,1,1,1,1,1,1,1,1 +2015,4,2,Female,A07,55-64,10653268,10551822,558889,655105,152754,152619,70289,77563,222977,229771,371314,472000,1,1,1,1,1,1,1,1,1,1,1,1 +2015,4,2,Female,A08,65-99,3396380,3313644,256678,338297,42807,42785,21227,23007,64020,65647,201578,283573,1,1,1,1,1,1,1,1,1,1,1,1 +2016,1,0,All Sexes,A00,All Ages (14-99),126628788,127107812,12421916,11654192,4089042,4081146,2077257,2046046,6163830,6113632,7607280,7131553,1,1,1,1,1,1,1,1,1,1,1,1 +2016,1,0,All Sexes,A01,14-18,2675499,2986371,883375,555169,143315,142795,84502,124688,227705,267302,710127,399810,1,1,1,1,1,1,1,1,1,1,1,1 +2016,1,0,All Sexes,A02,19-21,5514085,5643301,1377444,1203083,420341,419259,219865,285418,639694,703011,874696,744146,1,1,1,1,1,1,1,1,1,1,1,1 +2016,1,0,All Sexes,A03,22-24,7487101,7598793,1422820,1261946,511333,510284,250574,257970,761358,766295,818236,706119,1,1,1,1,1,1,1,1,1,1,1,1 +2016,1,0,All Sexes,A04,25-34,28019856,28117657,3286384,3103653,1252709,1250880,580485,567108,1832286,1814047,1836850,1738905,1,1,1,1,1,1,1,1,1,1,1,1 +2016,1,0,All Sexes,A05,35-44,26845576,26936310,2194404,2055632,791358,789861,384921,351385,1175933,1139484,1273544,1182943,1,1,1,1,1,1,1,1,1,1,1,1 +2016,1,0,All Sexes,A06,45-54,27489653,27542223,1740900,1656314,586213,585218,314893,265677,900983,848327,1049846,998937,1,1,1,1,1,1,1,1,1,1,1,1 +2016,1,0,All Sexes,A07,55-64,21422643,21267320,1065258,1210038,300140,299495,186733,148633,486943,446884,701059,858095,1,1,1,1,1,1,1,1,1,1,1,1 +2016,1,0,All Sexes,A08,65-99,7174375,7015838,451332,608358,83632,83353,55284,45168,138927,128282,342922,502598,1,1,1,1,1,1,1,1,1,1,1,1 +2016,1,1,Male,A00,All Ages (14-99),63833184,64135231,6488409,6068244,2149598,2145189,1148233,1100189,3296306,3237548,4015255,3719963,1,1,1,1,1,1,1,1,1,1,1,1 +2016,1,1,Male,A01,14-18,1217982,1375182,423145,259526,62555,62348,39394,58049,101912,120365,348981,192065,1,1,1,1,1,1,1,1,1,1,1,1 +2016,1,1,Male,A02,19-21,2651715,2732760,691786,592603,204559,204176,115101,143408,319374,346957,453820,372165,1,1,1,1,1,1,1,1,1,1,1,1 +2016,1,1,Male,A03,22-24,3666186,3735964,724412,635493,254100,253598,133608,135805,387374,388589,431889,362234,1,1,1,1,1,1,1,1,1,1,1,1 +2016,1,1,Male,A04,25-34,14262404,14340252,1750374,1635081,671408,670303,325208,312355,995982,980296,988130,911501,1,1,1,1,1,1,1,1,1,1,1,1 +2016,1,1,Male,A05,35-44,13748750,13794156,1166543,1101318,431666,430584,218206,194978,649656,624215,675415,631490,1,1,1,1,1,1,1,1,1,1,1,1 +2016,1,1,Male,A06,45-54,13891118,13919046,920181,880190,315344,314746,178155,146268,493404,459332,557981,532059,1,1,1,1,1,1,1,1,1,1,1,1 +2016,1,1,Male,A07,55-64,10686032,10608557,570128,643377,164189,163832,107104,84226,271355,247276,375861,454976,1,1,1,1,1,1,1,1,1,1,1,1 +2016,1,1,Male,A08,65-99,3708996,3629315,241841,320657,45779,45602,31455,25101,77248,70516,183179,263473,1,1,1,1,1,1,1,1,1,1,1,1 +2016,1,2,Female,A00,All Ages (14-99),62795604,62972581,5933507,5585948,1939445,1935957,929024,945856,2867524,2876084,3592025,3411590,1,1,1,1,1,1,1,1,1,1,1,1 +2016,1,2,Female,A01,14-18,1457517,1611189,460230,295642,80760,80447,45107,66639,125793,146938,361145,207745,1,1,1,1,1,1,1,1,1,1,1,1 +2016,1,2,Female,A02,19-21,2862370,2910540,685658,610480,215782,215083,104764,142009,320320,356054,420876,371981,1,1,1,1,1,1,1,1,1,1,1,1 +2016,1,2,Female,A03,22-24,3820915,3862829,698408,626453,257233,256686,116966,122164,373983,377706,386347,343886,1,1,1,1,1,1,1,1,1,1,1,1 +2016,1,2,Female,A04,25-34,13757452,13777406,1536010,1468573,581302,580578,255276,254753,836304,833750,848720,827403,1,1,1,1,1,1,1,1,1,1,1,1 +2016,1,2,Female,A05,35-44,13096826,13142154,1027861,954314,359693,359277,166714,156407,526277,515270,598130,551453,1,1,1,1,1,1,1,1,1,1,1,1 +2016,1,2,Female,A06,45-54,13598535,13623177,820719,776124,270869,270472,136738,119409,407579,388994,491866,466877,1,1,1,1,1,1,1,1,1,1,1,1 +2016,1,2,Female,A07,55-64,10736611,10658763,495130,566661,135952,135663,79629,64407,215589,199607,325197,403119,1,1,1,1,1,1,1,1,1,1,1,1 +2016,1,2,Female,A08,65-99,3465378,3386524,209491,287701,37854,37752,23829,20068,61679,57765,159743,239125,1,1,1,1,1,1,1,1,1,1,1,1 +2016,2,0,All Sexes,A00,All Ages (14-99),127090290,129101817,15772982,13239911,4899050,4894272,2045565,2255990,6947664,7151586,9963490,7885277,1,1,1,1,1,1,1,1,1,1,1,1 +2016,2,0,All Sexes,A01,14-18,2630188,3676212,1726624,660446,213433,213288,103308,121729,316666,335215,1445506,436861,1,1,1,1,1,1,1,1,1,1,1,1 +2016,2,0,All Sexes,A02,19-21,5496226,6397084,2335717,1323953,569617,569163,284262,254561,853826,823671,1602487,720028,1,1,1,1,1,1,1,1,1,1,1,1 +2016,2,0,All Sexes,A03,22-24,7448530,7700951,1796129,1471255,636631,636237,261129,301554,898255,937693,1044007,788400,1,1,1,1,1,1,1,1,1,1,1,1 +2016,2,0,All Sexes,A04,25-34,28125384,28308715,3788765,3476317,1464539,1463086,576020,649376,2041820,2113152,2107646,1896877,1,1,1,1,1,1,1,1,1,1,1,1 +2016,2,0,All Sexes,A05,35-44,26960844,27020934,2435908,2296143,901103,900170,354185,403496,1255977,1304070,1396706,1309517,1,1,1,1,1,1,1,1,1,1,1,1 +2016,2,0,All Sexes,A06,45-54,27513292,27514911,1917127,1851243,665668,664974,267639,302432,933816,967577,1141527,1110311,1,1,1,1,1,1,1,1,1,1,1,1 +2016,2,0,All Sexes,A07,55-64,21594131,21355347,1199255,1403856,346107,345622,152346,170127,498674,515764,784511,997316,1,1,1,1,1,1,1,1,1,1,1,1 +2016,2,0,All Sexes,A08,65-99,7321696,7127664,573457,756699,101952,101733,46675,52716,148630,154443,441100,625967,1,1,1,1,1,1,1,1,1,1,1,1 +2016,2,1,Male,A00,All Ages (14-99),64138871,65541799,8412994,6760029,2602433,2601818,1100033,1142755,3704034,3744904,5395627,3955840,1,1,1,1,1,1,1,1,1,1,1,1 +2016,2,1,Male,A01,14-18,1204362,1743416,863881,317911,100575,100646,47555,56006,148095,156785,733437,213442,1,1,1,1,1,1,1,1,1,1,1,1 +2016,2,1,Male,A02,19-21,2657065,3145512,1186211,654332,279785,279922,142053,125948,421818,405822,838345,360773,1,1,1,1,1,1,1,1,1,1,1,1 +2016,2,1,Male,A03,22-24,3657767,3834707,938526,728654,319219,319402,137065,146444,456486,465730,568272,390724,1,1,1,1,1,1,1,1,1,1,1,1 +2016,2,1,Male,A04,25-34,14334613,14514653,2058446,1814238,795527,795298,316980,335778,1113142,1131323,1161410,966283,1,1,1,1,1,1,1,1,1,1,1,1 +2016,2,1,Male,A05,35-44,13815688,13900364,1328709,1202952,498339,498037,196682,207315,695423,705490,766260,665415,1,1,1,1,1,1,1,1,1,1,1,1 +2016,2,1,Male,A06,45-54,13910966,13961004,1038903,954839,361331,361109,147386,154445,508959,515568,627579,560187,1,1,1,1,1,1,1,1,1,1,1,1 +2016,2,1,Male,A07,55-64,10774512,10712954,668569,709164,191406,191257,86327,89022,277869,280259,443875,491353,1,1,1,1,1,1,1,1,1,1,1,1 +2016,2,1,Male,A08,65-99,3783900,3729187,329749,377938,56252,56147,25984,27798,82242,83927,256449,307663,1,1,1,1,1,1,1,1,1,1,1,1 +2016,2,2,Female,A00,All Ages (14-99),62951419,63560019,7359988,6479883,2296617,2292454,945532,1113236,3243630,3406682,4567863,3929437,1,1,1,1,1,1,1,1,1,1,1,1 +2016,2,2,Female,A01,14-18,1425826,1932795,862744,342535,112858,112643,55753,65723,168571,178430,712069,223419,1,1,1,1,1,1,1,1,1,1,1,1 +2016,2,2,Female,A02,19-21,2839161,3251572,1149505,669621,289832,289241,142209,128613,432008,417849,764142,359255,1,1,1,1,1,1,1,1,1,1,1,1 +2016,2,2,Female,A03,22-24,3790763,3866243,857603,742602,317412,316835,124064,155110,441769,471963,475736,397676,1,1,1,1,1,1,1,1,1,1,1,1 +2016,2,2,Female,A04,25-34,13790771,13794062,1730320,1662079,669012,667788,259039,313599,928678,981829,946236,930594,1,1,1,1,1,1,1,1,1,1,1,1 +2016,2,2,Female,A05,35-44,13145156,13120570,1107199,1093191,402765,402133,157503,196182,560554,598580,630446,644101,1,1,1,1,1,1,1,1,1,1,1,1 +2016,2,2,Female,A06,45-54,13602325,13553907,878223,896403,304337,303865,120254,147988,424857,452009,513948,550124,1,1,1,1,1,1,1,1,1,1,1,1 +2016,2,2,Female,A07,55-64,10819619,10642393,530686,694692,154701,154365,66019,81105,220805,235505,340636,505963,1,1,1,1,1,1,1,1,1,1,1,1 +2016,2,2,Female,A08,65-99,3537796,3398477,243708,378761,45700,45586,20691,24917,66389,70516,184651,318305,1,1,1,1,1,1,1,1,1,1,1,1 +2016,3,0,All Sexes,A00,All Ages (14-99),129142698,128988856,15256111,15181976,5515833,5513336,2254645,2125889,7771997,7652003,8933989,9098700,1,1,1,1,1,1,1,1,1,1,1,1 +2016,3,0,All Sexes,A01,14-18,3211258,3239573,1302624,1257877,241425,241343,101663,161677,343197,403037,1028730,985685,1,1,1,1,1,1,1,1,1,1,1,1 +2016,3,0,All Sexes,A02,19-21,6267244,5791537,1660040,2136514,611980,610989,247860,303311,860247,915236,966425,1422575,1,1,1,1,1,1,1,1,1,1,1,1 +2016,3,0,All Sexes,A03,22-24,7573014,7696830,1851133,1684632,705110,705969,303071,268045,1008230,975663,1043203,915834,1,1,1,1,1,1,1,1,1,1,1,1 +2016,3,0,All Sexes,A04,25-34,28285738,28554374,4133031,3771708,1691147,1690847,659679,577976,2351370,2273377,2213155,1954853,1,1,1,1,1,1,1,1,1,1,1,1 +2016,3,0,All Sexes,A05,35-44,27066868,27259310,2646973,2404983,1037834,1037143,407648,351533,1445761,1391420,1458621,1280272,1,1,1,1,1,1,1,1,1,1,1,1 +2016,3,0,All Sexes,A06,45-54,27524789,27603560,1975899,1871486,737690,737123,304897,264199,1042746,1003194,1122951,1058754,1,1,1,1,1,1,1,1,1,1,1,1 +2016,3,0,All Sexes,A07,55-64,21753689,21572858,1179958,1358137,380442,379886,175166,150543,555584,531252,730423,920767,1,1,1,1,1,1,1,1,1,1,1,1 +2016,3,0,All Sexes,A08,65-99,7460099,7270814,506452,696639,110204,110036,54662,48604,164862,158824,370481,559958,1,1,1,1,1,1,1,1,1,1,1,1 +2016,3,1,Male,A00,All Ages (14-99),65568799,65346916,7682395,7818571,2821338,2819359,1142909,1099274,3964882,3924629,4511734,4736016,1,1,1,1,1,1,1,1,1,1,1,1 +2016,3,1,Male,A01,14-18,1521262,1506960,610497,617566,108148,108125,45993,74337,154192,182417,489275,495526,1,1,1,1,1,1,1,1,1,1,1,1 +2016,3,1,Male,A02,19-21,3072290,2810984,814365,1074751,295133,294782,123579,150647,418873,445840,486845,736974,1,1,1,1,1,1,1,1,1,1,1,1 +2016,3,1,Male,A03,22-24,3769302,3802156,896713,849924,340419,340632,146275,136723,486666,478016,515665,480279,1,1,1,1,1,1,1,1,1,1,1,1 +2016,3,1,Male,A04,25-34,14491723,14606124,2111985,1959971,879719,879196,341002,306766,1220896,1188118,1131382,1021117,1,1,1,1,1,1,1,1,1,1,1,1 +2016,3,1,Male,A05,35-44,13931497,13998484,1352610,1267110,549151,548646,209793,186327,759103,736346,736584,676652,1,1,1,1,1,1,1,1,1,1,1,1 +2016,3,1,Male,A06,45-54,13972131,13995959,1007812,975838,385105,384759,155711,138407,540907,524054,572500,556356,1,1,1,1,1,1,1,1,1,1,1,1 +2016,3,1,Male,A07,55-64,10912704,10825608,618431,705482,203752,203397,91730,80045,295499,283878,382870,475059,1,1,1,1,1,1,1,1,1,1,1,1 +2016,3,1,Male,A08,65-99,3897890,3800641,269983,367930,59913,59823,28825,26023,88746,85960,196611,294054,1,1,1,1,1,1,1,1,1,1,1,1 +2016,3,2,Female,A00,All Ages (14-99),63573900,63641941,7573716,7363405,2694494,2693977,1111736,1026615,3807116,3727374,4422255,4362684,1,1,1,1,1,1,1,1,1,1,1,1 +2016,3,2,Female,A01,14-18,1689996,1732613,692127,640312,133277,133218,55669,87340,189005,220620,539455,490159,1,1,1,1,1,1,1,1,1,1,1,1 +2016,3,2,Female,A02,19-21,3194954,2980553,845675,1061763,316847,316207,124281,152664,441374,469396,479580,685602,1,1,1,1,1,1,1,1,1,1,1,1 +2016,3,2,Female,A03,22-24,3803712,3894674,954420,834708,364691,365338,156796,131322,521564,497647,527537,435556,1,1,1,1,1,1,1,1,1,1,1,1 +2016,3,2,Female,A04,25-34,13794016,13948250,2021046,1811737,811428,811652,318677,271210,1130474,1085259,1081773,933736,1,1,1,1,1,1,1,1,1,1,1,1 +2016,3,2,Female,A05,35-44,13135372,13260826,1294363,1137873,488683,488497,197855,165206,686658,655075,722037,603620,1,1,1,1,1,1,1,1,1,1,1,1 +2016,3,2,Female,A06,45-54,13552658,13607601,968087,895648,352586,352364,149186,125792,501839,479140,550451,502398,1,1,1,1,1,1,1,1,1,1,1,1 +2016,3,2,Female,A07,55-64,10840984,10747250,561528,652655,176690,176489,83436,70498,260085,247374,347553,445709,1,1,1,1,1,1,1,1,1,1,1,1 +2016,3,2,Female,A08,65-99,3562209,3470174,236470,328709,50291,50214,25836,22581,76116,72864,173870,265904,1,1,1,1,1,1,1,1,1,1,1,1 +2016,4,0,All Sexes,A00,All Ages (14-99),129029215,128534127,13078956,13372268,4498313,4497221,2126750,2152293,6626295,6647705,7867153,8355059,1,1,1,1,1,1,1,1,1,1,1,1 +2016,4,0,All Sexes,A01,14-18,2878532,3175252,1031601,715446,186374,186236,138237,107416,324482,293333,811830,512590,1,1,1,1,1,1,1,1,1,1,1,1 +2016,4,0,All Sexes,A02,19-21,5607872,5712687,1435693,1290389,467132,466402,303512,230146,770538,696097,888509,778453,1,1,1,1,1,1,1,1,1,1,1,1 +2016,4,0,All Sexes,A03,22-24,7550149,7593220,1460731,1373717,555197,555094,270970,253564,826205,808314,817737,769274,1,1,1,1,1,1,1,1,1,1,1,1 +2016,4,0,All Sexes,A04,25-34,28526470,28485901,3488950,3459497,1385055,1384758,587594,591938,1973096,1976221,1909951,1948146,1,1,1,1,1,1,1,1,1,1,1,1 +2016,4,0,All Sexes,A05,35-44,27296190,27218712,2293396,2343747,858786,858520,355491,395663,1214804,1254026,1307099,1389058,1,1,1,1,1,1,1,1,1,1,1,1 +2016,4,0,All Sexes,A06,45-54,27618313,27430999,1751596,1930621,621539,621783,265961,320808,887810,942525,1029748,1222429,1,1,1,1,1,1,1,1,1,1,1,1 +2016,4,0,All Sexes,A07,55-64,21956302,21612829,1102459,1452584,327053,327229,154775,194227,481935,521472,711859,1058181,1,1,1,1,1,1,1,1,1,1,1,1 +2016,4,0,All Sexes,A08,65-99,7595388,7304526,514531,806268,97177,97199,50210,58531,147424,155718,390420,676928,1,1,1,1,1,1,1,1,1,1,1,1 +2016,4,1,Male,A00,All Ages (14-99),65346196,64705107,6558663,7133130,2335614,2335081,1100804,1177519,3436436,3511874,3920024,4547955,1,1,1,1,1,1,1,1,1,1,1,1 +2016,4,1,Male,A01,14-18,1334161,1457586,479768,348551,82601,82565,63174,50976,145713,133408,384233,258745,1,1,1,1,1,1,1,1,1,1,1,1 +2016,4,1,Male,A02,19-21,2718403,2751147,702904,654151,227580,227363,150144,119637,377626,346785,444216,407656,1,1,1,1,1,1,1,1,1,1,1,1 +2016,4,1,Male,A03,22-24,3723329,3719054,720852,708056,274679,274614,138137,134737,412761,409194,411293,411514,1,1,1,1,1,1,1,1,1,1,1,1 +2016,4,1,Male,A04,25-34,14574499,14484080,1793855,1856593,733417,733250,311864,329351,1045277,1062412,975694,1062268,1,1,1,1,1,1,1,1,1,1,1,1 +2016,4,1,Male,A05,35-44,14018599,13898031,1163302,1277147,459878,459696,188788,221247,648806,680890,648202,770173,1,1,1,1,1,1,1,1,1,1,1,1 +2016,4,1,Male,A06,45-54,14001266,13833956,880182,1049185,328221,328297,139499,178785,467799,507073,509520,678841,1,1,1,1,1,1,1,1,1,1,1,1 +2016,4,1,Male,A07,55-64,11012221,10785462,558762,791909,176367,176432,82341,109740,258715,286208,354264,581787,1,1,1,1,1,1,1,1,1,1,1,1 +2016,4,1,Male,A08,65-99,3963716,3775792,259038,447539,52870,52864,26856,33046,79739,85903,192602,376971,1,1,1,1,1,1,1,1,1,1,1,1 +2016,4,2,Female,A00,All Ages (14-99),63683019,63829020,6520293,6239138,2162699,2162140,1025945,974774,3189859,3135831,3947129,3807103,1,1,1,1,1,1,1,1,1,1,1,1 +2016,4,2,Female,A01,14-18,1544371,1717666,551833,366896,103772,103671,75063,56441,178769,159925,427598,253845,1,1,1,1,1,1,1,1,1,1,1,1 +2016,4,2,Female,A02,19-21,2889468,2961540,732789,636238,239551,239039,153367,110509,392911,349311,444293,370797,1,1,1,1,1,1,1,1,1,1,1,1 +2016,4,2,Female,A03,22-24,3826820,3874166,739879,665661,280518,280480,132833,118827,413445,399120,406445,357759,1,1,1,1,1,1,1,1,1,1,1,1 +2016,4,2,Female,A04,25-34,13951971,14001821,1695094,1602904,651639,651508,275730,262587,927820,913809,934257,885879,1,1,1,1,1,1,1,1,1,1,1,1 +2016,4,2,Female,A05,35-44,13277590,13320682,1130095,1066599,398908,398824,166702,174415,565998,573137,658897,618885,1,1,1,1,1,1,1,1,1,1,1,1 +2016,4,2,Female,A06,45-54,13617047,13597044,871414,881436,293318,293486,126461,142024,420011,435452,520228,543588,1,1,1,1,1,1,1,1,1,1,1,1 +2016,4,2,Female,A07,55-64,10944081,10827367,543697,660675,150685,150797,72434,84487,223220,235264,357595,476394,1,1,1,1,1,1,1,1,1,1,1,1 +2016,4,2,Female,A08,65-99,3631672,3528734,255493,358729,44307,44335,23354,25485,67685,69814,197817,299956,1,1,1,1,1,1,1,1,1,1,1,1 +2017,1,0,All Sexes,A00,All Ages (14-99),128509336,129031114,12966158,12109179,4372695,4368491,2148599,2122688,6528089,6488859,7844845,7311848,1,1,1,1,1,1,1,1,1,1,1,1 +2017,1,0,All Sexes,A01,14-18,2818348,3128066,933343,602231,160019,159314,91764,136383,252111,296094,738332,429134,1,1,1,1,1,1,1,1,1,1,1,1 +2017,1,0,All Sexes,A02,19-21,5560592,5702728,1432056,1238135,449313,447862,225852,293420,675862,741369,896797,752290,1,1,1,1,1,1,1,1,1,1,1,1 +2017,1,0,All Sexes,A03,22-24,7434680,7550256,1446414,1277740,532126,531553,252835,260019,785657,791268,821217,703589,1,1,1,1,1,1,1,1,1,1,1,1 +2017,1,0,All Sexes,A04,25-34,28446794,28556319,3439813,3234638,1342525,1342603,598727,590715,1942986,1932308,1896860,1782398,1,1,1,1,1,1,1,1,1,1,1,1 +2017,1,0,All Sexes,A05,35-44,27253732,27361735,2304177,2140677,846026,845959,397968,363447,1245195,1208685,1324909,1214652,1,1,1,1,1,1,1,1,1,1,1,1 +2017,1,0,All Sexes,A06,45-54,27421293,27489074,1800603,1693412,621113,620682,321827,271846,944098,892064,1072455,1003990,1,1,1,1,1,1,1,1,1,1,1,1 +2017,1,0,All Sexes,A07,55-64,21951909,21803764,1129320,1262284,327501,326680,198884,156344,527146,482763,734941,883430,1,1,1,1,1,1,1,1,1,1,1,1 +2017,1,0,All Sexes,A08,65-99,7621986,7439173,480431,660062,94073,93838,60742,50514,155034,144308,359334,542364,1,1,1,1,1,1,1,1,1,1,1,1 +2017,1,1,Male,A00,All Ages (14-99),64691981,65039706,6777400,6288570,2304454,2303302,1176862,1137083,3484594,3439535,4141972,3788427,1,1,1,1,1,1,1,1,1,1,1,1 +2017,1,1,Male,A01,14-18,1287266,1444619,448157,282541,70556,70298,42939,63537,113636,134035,363456,206488,1,1,1,1,1,1,1,1,1,1,1,1 +2017,1,1,Male,A02,19-21,2673771,2761884,717841,608722,219679,219201,117504,147561,337500,366854,463563,374099,1,1,1,1,1,1,1,1,1,1,1,1 +2017,1,1,Male,A03,22-24,3634848,3710106,737769,641312,265569,265448,134053,136388,399923,401701,434076,357820,1,1,1,1,1,1,1,1,1,1,1,1 +2017,1,1,Male,A04,25-34,14452506,14543665,1832671,1698994,721736,722239,333137,323301,1055683,1045099,1020190,926261,1,1,1,1,1,1,1,1,1,1,1,1 +2017,1,1,Male,A05,35-44,13921844,13980869,1226513,1143555,462781,462891,222866,200579,686213,663173,703008,642704,1,1,1,1,1,1,1,1,1,1,1,1 +2017,1,1,Male,A06,45-54,13831278,13870159,951172,896113,333595,333342,179416,149603,513613,482769,569828,530889,1,1,1,1,1,1,1,1,1,1,1,1 +2017,1,1,Male,A07,55-64,10955312,10883913,605001,670216,179544,179054,112582,87832,292542,266805,394518,466171,1,1,1,1,1,1,1,1,1,1,1,1 +2017,1,1,Male,A08,65-99,3935156,3844490,258276,347117,50994,50830,34364,28282,85484,79098,193332,283995,1,1,1,1,1,1,1,1,1,1,1,1 +2017,1,2,Female,A00,All Ages (14-99),63817354,63991408,6188758,5820609,2068241,2065189,971738,985605,3043495,3049324,3702873,3523421,1,1,1,1,1,1,1,1,1,1,1,1 +2017,1,2,Female,A01,14-18,1531083,1683447,485186,319689,89463,89016,48825,72846,138475,162059,374876,222646,1,1,1,1,1,1,1,1,1,1,1,1 +2017,1,2,Female,A02,19-21,2886821,2940844,714215,629413,229634,228661,108349,145858,338363,374516,433233,378191,1,1,1,1,1,1,1,1,1,1,1,1 +2017,1,2,Female,A03,22-24,3799832,3840149,708645,636428,266556,266105,118782,123631,385734,389567,387141,345770,1,1,1,1,1,1,1,1,1,1,1,1 +2017,1,2,Female,A04,25-34,13994288,14012654,1607142,1535644,620789,620365,265590,267414,887304,887209,876670,856137,1,1,1,1,1,1,1,1,1,1,1,1 +2017,1,2,Female,A05,35-44,13331888,13380867,1077664,997122,383246,383068,175102,162868,558982,545512,621901,571947,1,1,1,1,1,1,1,1,1,1,1,1 +2017,1,2,Female,A06,45-54,13590015,13618914,849432,797299,287518,287340,142411,122243,430485,409295,502627,473101,1,1,1,1,1,1,1,1,1,1,1,1 +2017,1,2,Female,A07,55-64,10996597,10919851,524319,592069,147957,147625,86302,68512,234605,215957,340422,417260,1,1,1,1,1,1,1,1,1,1,1,1 +2017,1,2,Female,A08,65-99,3686829,3594683,222155,312945,43079,43008,26378,22233,69549,65210,166002,258369,1,1,1,1,1,1,1,1,1,1,1,1 +2017,2,0,All Sexes,A00,All Ages (14-99),128973187,131045122,16202163,13685082,5156879,5147135,2122577,2282159,7274495,7429656,10170956,8060905,1,1,1,1,1,1,1,1,1,1,1,1 +2017,2,0,All Sexes,A01,14-18,2748544,3858767,1839362,709973,237626,236439,114094,128290,351312,363966,1534563,462531,1,1,1,1,1,1,1,1,1,1,1,1 +2017,2,0,All Sexes,A02,19-21,5553795,6486006,2400814,1361474,600134,598486,293555,255010,892754,852997,1638547,726639,1,1,1,1,1,1,1,1,1,1,1,1 +2017,2,0,All Sexes,A03,22-24,7397099,7652834,1796275,1478120,651427,650226,263089,295175,913999,945102,1038216,780919,1,1,1,1,1,1,1,1,1,1,1,1 +2017,2,0,All Sexes,A04,25-34,28513833,28704836,3878586,3579234,1535912,1533735,598746,655844,2133533,2190165,2138303,1924636,1,1,1,1,1,1,1,1,1,1,1,1 +2017,2,0,All Sexes,A05,35-44,27422674,27473163,2498124,2383564,949581,948582,366961,410866,1315784,1360013,1417141,1344460,1,1,1,1,1,1,1,1,1,1,1,1 +2017,2,0,All Sexes,A06,45-54,27458803,27457846,1936842,1888995,693240,692233,273522,302693,966226,995384,1139220,1118330,1,1,1,1,1,1,1,1,1,1,1,1 +2017,2,0,All Sexes,A07,55-64,22129339,21880863,1245031,1466702,374608,373653,160360,177106,534459,551024,803284,1030776,1,1,1,1,1,1,1,1,1,1,1,1 +2017,2,0,All Sexes,A08,65-99,7749100,7530807,607128,817018,114351,113781,52250,57175,166427,171005,461683,672613,1,1,1,1,1,1,1,1,1,1,1,1 +2017,2,1,Male,A00,All Ages (14-99),65036807,66536318,8689542,6977161,2769362,2767155,1136823,1149970,3903482,3917964,5525154,4000566,1,1,1,1,1,1,1,1,1,1,1,1 +2017,2,1,Male,A01,14-18,1262164,1837894,924906,343486,113818,113482,52638,59345,166247,172500,781835,225713,1,1,1,1,1,1,1,1,1,1,1,1 +2017,2,1,Male,A02,19-21,2686641,3193000,1221563,673889,297340,297075,146777,125955,443596,422842,857230,362419,1,1,1,1,1,1,1,1,1,1,1,1 +2017,2,1,Male,A03,22-24,3629875,3812243,943759,733096,331260,331128,137617,142902,468542,473936,565651,383179,1,1,1,1,1,1,1,1,1,1,1,1 +2017,2,1,Male,A04,25-34,14513230,14710149,2120080,1869126,843948,843444,327245,337676,1170557,1181573,1181624,971241,1,1,1,1,1,1,1,1,1,1,1,1 +2017,2,1,Male,A05,35-44,14024675,14116387,1371557,1245414,530122,529961,202603,209454,732362,739873,780579,674481,1,1,1,1,1,1,1,1,1,1,1,1 +2017,2,1,Male,A06,45-54,13866077,13926486,1057948,970664,380036,379850,150534,153096,530293,533270,630632,556142,1,1,1,1,1,1,1,1,1,1,1,1 +2017,2,1,Male,A07,55-64,11051937,10996259,697686,735974,209482,209178,90156,91417,299378,300770,456083,499702,1,1,1,1,1,1,1,1,1,1,1,1 +2017,2,1,Male,A08,65-99,4002208,3943899,352044,405512,63356,63038,29254,30126,92506,93199,271521,327689,1,1,1,1,1,1,1,1,1,1,1,1 +2017,2,2,Female,A00,All Ages (14-99),63936380,64508804,7512620,6707921,2387517,2379980,985754,1132188,3371013,3511692,4645802,4060339,1,1,1,1,1,1,1,1,1,1,1,1 +2017,2,2,Female,A01,14-18,1486381,2020873,914456,366488,123808,122957,61456,68944,185065,191467,752728,236818,1,1,1,1,1,1,1,1,1,1,1,1 +2017,2,2,Female,A02,19-21,2867155,3293005,1179252,687585,302794,301411,146777,129055,449158,430155,781317,364220,1,1,1,1,1,1,1,1,1,1,1,1 +2017,2,2,Female,A03,22-24,3767224,3840591,852516,745024,320167,319099,125472,152273,445457,471166,472565,397740,1,1,1,1,1,1,1,1,1,1,1,1 +2017,2,2,Female,A04,25-34,14000603,13994687,1758506,1710108,691965,690292,271501,318168,962976,1008592,956679,953395,1,1,1,1,1,1,1,1,1,1,1,1 +2017,2,2,Female,A05,35-44,13397998,13356776,1126567,1138150,419459,418621,164358,201412,583422,620139,636562,669978,1,1,1,1,1,1,1,1,1,1,1,1 +2017,2,2,Female,A06,45-54,13592726,13531360,878894,918331,313204,312383,122989,149597,435934,462114,508588,562189,1,1,1,1,1,1,1,1,1,1,1,1 +2017,2,2,Female,A07,55-64,11077402,10884604,547346,730728,165126,164475,70204,85689,235081,250253,347201,531075,1,1,1,1,1,1,1,1,1,1,1,1 +2017,2,2,Female,A08,65-99,3746892,3586908,255084,411507,50994,50743,22996,27049,73921,77805,190162,344924,1,1,1,1,1,1,1,1,1,1,1,1 +2017,3,0,All Sexes,A00,All Ages (14-99),131024559,130681125,15097027,15191413,5494952,5491882,2276753,2190605,7775399,7690720,8784899,9122526,1,1,1,1,1,1,1,1,1,1,1,1 +2017,3,0,All Sexes,A01,14-18,3376624,3340754,1306585,1324805,250189,249147,107688,175881,357488,424850,1021548,1042062,1,1,1,1,1,1,1,1,1,1,1,1 +2017,3,0,All Sexes,A02,19-21,6358071,5818054,1621420,2165120,607276,605100,248804,313882,855933,919020,931699,1452038,1,1,1,1,1,1,1,1,1,1,1,1 +2017,3,0,All Sexes,A03,22-24,7543669,7631196,1780188,1649715,681850,682061,297093,270927,979191,953852,995999,905133,1,1,1,1,1,1,1,1,1,1,1,1 +2017,3,0,All Sexes,A04,25-34,28645281,28875569,4069433,3739676,1676917,1677505,663777,593892,2342532,2274488,2161217,1936410,1,1,1,1,1,1,1,1,1,1,1,1 +2017,3,0,All Sexes,A05,35-44,27556628,27739318,2638106,2400463,1035747,1035866,414566,361416,1451456,1399413,1449499,1276230,1,1,1,1,1,1,1,1,1,1,1,1 +2017,3,0,All Sexes,A06,45-54,27415333,27494998,1947434,1836959,732860,732704,303808,266175,1037421,1000386,1098800,1029746,1,1,1,1,1,1,1,1,1,1,1,1 +2017,3,0,All Sexes,A07,55-64,22246216,22084321,1201988,1357802,391735,391371,181653,156292,573673,548326,740175,909325,1,1,1,1,1,1,1,1,1,1,1,1 +2017,3,0,All Sexes,A08,65-99,7882737,7696916,531872,716873,118377,118127,59363,52138,177704,170386,385963,571582,1,1,1,1,1,1,1,1,1,1,1,1 +2017,3,1,Male,A00,All Ages (14-99),66525024,66202795,7615402,7846447,2839587,2838461,1147465,1134419,3988353,3977553,4420251,4742384,1,1,1,1,1,1,1,1,1,1,1,1 +2017,3,1,Male,A01,14-18,1607041,1558139,612856,653968,112681,112342,49200,81504,161681,193771,485891,526409,1,1,1,1,1,1,1,1,1,1,1,1 +2017,3,1,Male,A02,19-21,3119982,2826179,795128,1089773,294835,294077,123637,156224,418366,450369,467675,750486,1,1,1,1,1,1,1,1,1,1,1,1 +2017,3,1,Male,A03,22-24,3755439,3769473,862502,834508,332386,332410,142922,138470,475301,471269,489794,473475,1,1,1,1,1,1,1,1,1,1,1,1 +2017,3,1,Male,A04,25-34,14667924,14761126,2085946,1952841,882878,883249,341395,315376,1224956,1200303,1100485,1010524,1,1,1,1,1,1,1,1,1,1,1,1 +2017,3,1,Male,A05,35-44,14165361,14226774,1351456,1269638,553750,553822,211677,191901,765960,746925,729221,674047,1,1,1,1,1,1,1,1,1,1,1,1 +2017,3,1,Male,A06,45-54,13908804,13933385,995522,961465,387416,387238,153643,139583,541406,527712,557290,539592,1,1,1,1,1,1,1,1,1,1,1,1 +2017,3,1,Male,A07,55-64,11178013,11099482,628566,706571,211372,211232,93761,83576,305213,295248,385063,468481,1,1,1,1,1,1,1,1,1,1,1,1 +2017,3,1,Male,A08,65-99,4122461,4028237,283427,377682,64270,64091,31230,27785,95470,91957,204831,299370,1,1,1,1,1,1,1,1,1,1,1,1 +2017,3,2,Female,A00,All Ages (14-99),64499535,64478330,7481625,7344966,2655366,2653422,1129288,1056186,3787047,3713167,4364648,4380142,1,1,1,1,1,1,1,1,1,1,1,1 +2017,3,2,Female,A01,14-18,1769583,1782615,693730,670837,137509,136805,58487,94378,195807,231080,535656,515653,1,1,1,1,1,1,1,1,1,1,1,1 +2017,3,2,Female,A02,19-21,3238088,2991875,826293,1075346,312441,311023,125167,157658,437567,468651,464024,701552,1,1,1,1,1,1,1,1,1,1,1,1 +2017,3,2,Female,A03,22-24,3788231,3861722,917686,815208,349464,349651,154171,132458,503890,482583,506204,431658,1,1,1,1,1,1,1,1,1,1,1,1 +2017,3,2,Female,A04,25-34,13977358,14114443,1983487,1786835,794039,794256,322382,278516,1117576,1074185,1060732,925885,1,1,1,1,1,1,1,1,1,1,1,1 +2017,3,2,Female,A05,35-44,13391267,13512544,1286650,1130824,481997,482044,202890,169516,685497,652488,720278,602183,1,1,1,1,1,1,1,1,1,1,1,1 +2017,3,2,Female,A06,45-54,13506530,13561612,951913,875494,345444,345466,150165,126593,496015,472674,541510,490154,1,1,1,1,1,1,1,1,1,1,1,1 +2017,3,2,Female,A07,55-64,11068203,10984839,573422,651232,180364,180139,87892,72716,268460,253078,355112,440844,1,1,1,1,1,1,1,1,1,1,1,1 +2017,3,2,Female,A08,65-99,3760276,3668679,248445,339191,54108,54036,28134,24353,82235,78429,181132,272212,1,1,1,1,1,1,1,1,1,1,1,1 +2017,4,0,All Sexes,A00,All Ages (14-99),130683186,130385152,13562608,13642991,4752837,4754337,2187870,2143332,6945851,6902422,8080566,8393205,1,1,1,1,1,1,1,1,1,1,1,1 +2017,4,0,All Sexes,A01,14-18,2973671,3285549,1087452,756874,203302,203045,151009,115000,354284,318632,849922,536587,1,1,1,1,1,1,1,1,1,1,1,1 +2017,4,0,All Sexes,A02,19-21,5642702,5769090,1477695,1311622,490096,489796,314869,233507,805371,723671,906485,778054,1,1,1,1,1,1,1,1,1,1,1,1 +2017,4,0,All Sexes,A03,22-24,7484688,7557548,1478116,1361595,569611,570022,273386,247705,843538,818158,821640,746447,1,1,1,1,1,1,1,1,1,1,1,1 +2017,4,0,All Sexes,A04,25-34,28822074,28834390,3603487,3517579,1457916,1458972,602007,589899,2061611,2050284,1949071,1940124,1,1,1,1,1,1,1,1,1,1,1,1 +2017,4,0,All Sexes,A05,35-44,27802156,27756265,2390869,2405207,911284,911471,365020,392930,1277474,1305296,1346837,1401462,1,1,1,1,1,1,1,1,1,1,1,1 +2017,4,0,All Sexes,A06,45-54,27469335,27311986,1796447,1940693,653251,653701,267392,310735,921469,965110,1040869,1205716,1,1,1,1,1,1,1,1,1,1,1,1 +2017,4,0,All Sexes,A07,55-64,22447897,22112088,1164572,1503289,357993,357941,160381,192535,518824,550789,740089,1080293,1,1,1,1,1,1,1,1,1,1,1,1 +2017,4,0,All Sexes,A08,65-99,8040662,7758237,563971,846131,109385,109389,53805,61022,163279,170482,425654,704522,1,1,1,1,1,1,1,1,1,1,1,1 +2017,4,1,Male,A00,All Ages (14-99),66178561,65632027,6815674,7294224,2490275,2492892,1132904,1174319,3626492,3670537,4013794,4564996,1,1,1,1,1,1,1,1,1,1,1,1 +2017,4,1,Male,A01,14-18,1382039,1513391,508134,369729,90721,90663,69555,54584,160279,145486,404303,271457,1,1,1,1,1,1,1,1,1,1,1,1 +2017,4,1,Male,A02,19-21,2737134,2782592,726684,666216,241458,241642,155840,120800,397584,362610,453683,406090,1,1,1,1,1,1,1,1,1,1,1,1 +2017,4,1,Male,A03,22-24,3690188,3702004,731551,703833,283864,284251,139401,131853,423607,416343,413033,399419,1,1,1,1,1,1,1,1,1,1,1,1 +2017,4,1,Male,A04,25-34,14716459,14653041,1857489,1893096,779653,780853,319366,329062,1100109,1110867,991417,1055865,1,1,1,1,1,1,1,1,1,1,1,1 +2017,4,1,Male,A05,35-44,14259397,14154674,1214795,1311846,491812,492154,194043,220432,686599,713313,664997,774637,1,1,1,1,1,1,1,1,1,1,1,1 +2017,4,1,Male,A06,45-54,13917658,13768156,904346,1053803,348283,348758,140216,173317,489013,522685,512192,666176,1,1,1,1,1,1,1,1,1,1,1,1 +2017,4,1,Male,A07,55-64,11275485,11049034,590669,822133,194871,194967,85835,109848,280990,305150,366126,595201,1,1,1,1,1,1,1,1,1,1,1,1 +2017,4,1,Male,A08,65-99,4200202,4009134,282005,473568,59613,59605,28648,34421,88310,94084,208043,396151,1,1,1,1,1,1,1,1,1,1,1,1 +2017,4,2,Female,A00,All Ages (14-99),64504625,64753126,6746934,6348767,2262562,2261445,1054966,969013,3319359,3231884,4066771,3828209,1,1,1,1,1,1,1,1,1,1,1,1 +2017,4,2,Female,A01,14-18,1591632,1772157,579318,387146,112581,112383,81453,60415,194005,173146,445619,265130,1,1,1,1,1,1,1,1,1,1,1,1 +2017,4,2,Female,A02,19-21,2905569,2986499,751011,645406,248638,248154,159029,112707,407787,361061,452802,371965,1,1,1,1,1,1,1,1,1,1,1,1 +2017,4,2,Female,A03,22-24,3794500,3855543,746565,657762,285746,285771,133985,115852,419931,401815,408606,347028,1,1,1,1,1,1,1,1,1,1,1,1 +2017,4,2,Female,A04,25-34,14105615,14181349,1745997,1624483,678262,678119,282641,260837,961502,939416,957654,884258,1,1,1,1,1,1,1,1,1,1,1,1 +2017,4,2,Female,A05,35-44,13542759,13601591,1176074,1093361,419472,419316,170978,172498,590874,591984,681840,626825,1,1,1,1,1,1,1,1,1,1,1,1 +2017,4,2,Female,A06,45-54,13551677,13543830,892100,886889,304969,304943,127176,137417,432456,442425,528677,539540,1,1,1,1,1,1,1,1,1,1,1,1 +2017,4,2,Female,A07,55-64,11172412,11063054,573902,681157,163122,162974,74546,82687,237834,245639,373963,485092,1,1,1,1,1,1,1,1,1,1,1,1 +2017,4,2,Female,A08,65-99,3840461,3749103,281967,372563,49772,49784,25157,26601,74969,76398,217611,308370,1,1,1,1,1,1,1,1,1,1,1,1 +2018,1,0,All Sexes,A00,All Ages (14-99),130414891,130875442,13237333,12444828,4605203,4598155,2146571,2191558,6751863,6792579,7899096,7403981,1,1,1,1,1,1,1,1,1,1,1,1 +2018,1,0,All Sexes,A01,14-18,2925015,3244232,969418,629264,172015,171340,99646,143911,271838,315681,764637,444094,1,1,1,1,1,1,1,1,1,1,1,1 +2018,1,0,All Sexes,A02,19-21,5616780,5765941,1454880,1254370,466681,465055,230308,298291,697162,763598,905239,751162,1,1,1,1,1,1,1,1,1,1,1,1 +2018,1,0,All Sexes,A03,22-24,7416577,7527772,1441815,1278171,545775,544986,248585,259174,794354,804282,806970,691175,1,1,1,1,1,1,1,1,1,1,1,1 +2018,1,0,All Sexes,A04,25-34,28795879,28878742,3497303,3318677,1411852,1410522,598021,610175,2009673,2021383,1888683,1795199,1,1,1,1,1,1,1,1,1,1,1,1 +2018,1,0,All Sexes,A05,35-44,27827707,27918001,2368446,2221049,896623,895471,396728,380005,1293364,1275991,1338923,1241703,1,1,1,1,1,1,1,1,1,1,1,1 +2018,1,0,All Sexes,A06,45-54,27295024,27352178,1815443,1720481,647373,646622,312370,277641,959705,924742,1063510,1002775,1,1,1,1,1,1,1,1,1,1,1,1 +2018,1,0,All Sexes,A07,55-64,22448151,22286694,1171030,1318374,357504,356954,197499,166859,554984,524151,746963,906474,1,1,1,1,1,1,1,1,1,1,1,1 +2018,1,0,All Sexes,A08,65-99,8089759,7901883,518997,704441,107380,107205,63414,55503,170783,162752,384170,571400,1,1,1,1,1,1,1,1,1,1,1,1 +2018,1,1,Male,A00,All Ages (14-99),65643285,65968186,6916068,6459927,2440020,2437801,1176678,1169861,3616832,3609364,4155166,3819423,1,1,1,1,1,1,1,1,1,1,1,1 +2018,1,1,Male,A01,14-18,1340896,1498859,463198,297301,75772,75600,46508,67344,122357,143133,374717,216044,1,1,1,1,1,1,1,1,1,1,1,1 +2018,1,1,Male,A02,19-21,2704603,2793843,728069,619029,229902,229425,119188,149477,349200,379069,465306,373750,1,1,1,1,1,1,1,1,1,1,1,1 +2018,1,1,Male,A03,22-24,3627837,3700844,736617,643472,274399,274242,131958,136223,406382,410576,426282,351201,1,1,1,1,1,1,1,1,1,1,1,1 +2018,1,1,Male,A04,25-34,14620955,14703103,1865934,1743253,763808,763580,333429,332603,1097166,1096623,1013409,927331,1,1,1,1,1,1,1,1,1,1,1,1 +2018,1,1,Male,A05,35-44,14196748,14252195,1261303,1182395,492445,491814,222819,207949,715269,700054,708747,651530,1,1,1,1,1,1,1,1,1,1,1,1 +2018,1,1,Male,A06,45-54,13760682,13797265,957646,907060,348915,348670,174255,151965,523152,500910,562389,525668,1,1,1,1,1,1,1,1,1,1,1,1 +2018,1,1,Male,A07,55-64,11216020,11141279,625670,695867,196051,195833,112692,93721,308758,289756,399379,474321,1,1,1,1,1,1,1,1,1,1,1,1 +2018,1,1,Male,A08,65-99,4175544,4080797,277632,371550,58729,58637,35827,30579,94548,89243,204938,299578,1,1,1,1,1,1,1,1,1,1,1,1 +2018,1,2,Female,A00,All Ages (14-99),64771606,64907256,6321265,5984900,2165183,2160354,969894,1021697,3135032,3183216,3743930,3584558,1,1,1,1,1,1,1,1,1,1,1,1 +2018,1,2,Female,A01,14-18,1584119,1745373,506220,331963,96243,95740,53138,76567,149481,172548,389920,228051,1,1,1,1,1,1,1,1,1,1,1,1 +2018,1,2,Female,A02,19-21,2912176,2972098,726811,635341,236779,235630,111119,148814,347963,384530,439933,377411,1,1,1,1,1,1,1,1,1,1,1,1 +2018,1,2,Female,A03,22-24,3788740,3826928,705199,634699,271376,270744,116627,122950,387972,393706,380689,339973,1,1,1,1,1,1,1,1,1,1,1,1 +2018,1,2,Female,A04,25-34,14174924,14175639,1631369,1575424,648044,646942,264592,277572,912507,924759,875274,867868,1,1,1,1,1,1,1,1,1,1,1,1 +2018,1,2,Female,A05,35-44,13630958,13665805,1107143,1038655,404178,403657,173909,172057,578095,575937,630176,590173,1,1,1,1,1,1,1,1,1,1,1,1 +2018,1,2,Female,A06,45-54,13534341,13554913,857798,813421,298458,297952,138116,125676,436553,423832,501121,477108,1,1,1,1,1,1,1,1,1,1,1,1 +2018,1,2,Female,A07,55-64,11232131,11145415,545361,622507,161454,161122,84807,73138,246226,234396,347584,432153,1,1,1,1,1,1,1,1,1,1,1,1 +2018,1,2,Female,A08,65-99,3914216,3821086,241365,332891,48651,48568,27586,24924,76235,73509,179232,271821,1,1,1,1,1,1,1,1,1,1,1,1 +2018,2,0,All Sexes,A00,All Ages (14-99),130832813,133024141,16625974,13962561,5380675,5385299,2191270,2353416,7577395,7737484,10331828,8107411,1,1,1,1,1,1,1,1,1,1,1,1 +2018,2,0,All Sexes,A01,14-18,2862348,3988851,1893499,747997,253174,253377,121041,136515,374288,388936,1570286,482930,1,1,1,1,1,1,1,1,1,1,1,1 +2018,2,0,All Sexes,A02,19-21,5636710,6569772,2423968,1381385,614676,615495,298872,261393,913709,875879,1643416,730386,1,1,1,1,1,1,1,1,1,1,1,1 +2018,2,0,All Sexes,A03,22-24,7368643,7623275,1788801,1469680,658508,659817,261942,296411,921137,955701,1021856,765106,1,1,1,1,1,1,1,1,1,1,1,1 +2018,2,0,All Sexes,A04,25-34,28835359,29040550,3964965,3646955,1602681,1604420,618158,672070,2222697,2276979,2148353,1923656,1,1,1,1,1,1,1,1,1,1,1,1 +2018,2,0,All Sexes,A05,35-44,27990601,28066722,2602422,2455070,1003273,1003821,384007,426727,1388544,1430952,1458511,1361692,1,1,1,1,1,1,1,1,1,1,1,1 +2018,2,0,All Sexes,A06,45-54,27305150,27326554,1973662,1898681,719906,720342,278886,309483,999730,1030150,1144738,1102434,1,1,1,1,1,1,1,1,1,1,1,1 +2018,2,0,All Sexes,A07,55-64,22608299,22389678,1315509,1502487,401640,401396,171025,186874,573027,588329,841781,1038813,1,1,1,1,1,1,1,1,1,1,1,1 +2018,2,0,All Sexes,A08,65-99,8225703,8018738,663149,860306,126818,126632,57338,63944,184263,190558,502886,702394,1,1,1,1,1,1,1,1,1,1,1,1 +2018,2,1,Male,A00,All Ages (14-99),65970025,67491510,8871293,7124653,2883898,2889127,1169759,1185303,4056493,4073328,5574154,4031244,1,1,1,1,1,1,1,1,1,1,1,1 +2018,2,1,Male,A01,14-18,1315038,1890664,945152,363442,120579,120900,56141,63529,176779,184001,793719,237928,1,1,1,1,1,1,1,1,1,1,1,1 +2018,2,1,Male,A02,19-21,2728811,3232916,1230246,683915,304862,305763,148799,129024,453778,434300,856731,364248,1,1,1,1,1,1,1,1,1,1,1,1 +2018,2,1,Male,A03,22-24,3616430,3796583,937850,729161,335499,336540,137326,143904,473166,480134,555025,375054,1,1,1,1,1,1,1,1,1,1,1,1 +2018,2,1,Male,A04,25-34,14672262,14865910,2156699,1907166,879682,881615,336852,345910,1217577,1227619,1177613,972514,1,1,1,1,1,1,1,1,1,1,1,1 +2018,2,1,Male,A05,35-44,14302210,14399880,1417337,1282089,556540,557038,210128,217270,767327,774385,795819,684847,1,1,1,1,1,1,1,1,1,1,1,1 +2018,2,1,Male,A06,45-54,13782348,13849364,1070368,974171,392873,393485,152721,155429,546024,548939,628181,547629,1,1,1,1,1,1,1,1,1,1,1,1 +2018,2,1,Male,A07,55-64,11307470,11263541,732748,756709,223686,223705,96134,96711,319970,320371,474645,506138,1,1,1,1,1,1,1,1,1,1,1,1 +2018,2,1,Male,A08,65-99,4245457,4192652,380893,428001,70177,70080,31659,33526,101872,103579,292421,342887,1,1,1,1,1,1,1,1,1,1,1,1 +2018,2,2,Female,A00,All Ages (14-99),64862787,65532631,7754680,6837908,2496777,2496172,1021511,1168113,3520902,3664156,4757674,4076166,1,1,1,1,1,1,1,1,1,1,1,1 +2018,2,2,Female,A01,14-18,1547311,2098187,948347,384556,132595,132476,64901,72986,197509,204935,776567,245002,1,1,1,1,1,1,1,1,1,1,1,1 +2018,2,2,Female,A02,19-21,2907899,3336856,1193722,697469,309814,309732,150073,132369,459931,441579,786685,366138,1,1,1,1,1,1,1,1,1,1,1,1 +2018,2,2,Female,A03,22-24,3752213,3826692,850952,740520,323009,323276,124616,152507,447970,475567,466831,390052,1,1,1,1,1,1,1,1,1,1,1,1 +2018,2,2,Female,A04,25-34,14163096,14174640,1808266,1739789,722999,722805,281306,326160,1005120,1049360,970740,951143,1,1,1,1,1,1,1,1,1,1,1,1 +2018,2,2,Female,A05,35-44,13688391,13666842,1185084,1172981,446733,446783,173879,209457,621217,656567,662692,676845,1,1,1,1,1,1,1,1,1,1,1,1 +2018,2,2,Female,A06,45-54,13522803,13477190,903293,924510,327033,326857,126165,154054,453707,481211,516557,554805,1,1,1,1,1,1,1,1,1,1,1,1 +2018,2,2,Female,A07,55-64,11300828,11126137,582760,745778,177954,177691,74892,90162,253057,267958,367136,532675,1,1,1,1,1,1,1,1,1,1,1,1 +2018,2,2,Female,A08,65-99,3980246,3826086,282256,432305,56641,56553,25679,30418,82391,86979,210465,359506,1,1,1,1,1,1,1,1,1,1,1,1 +2018,3,0,All Sexes,A00,All Ages (14-99),133030374,132739599,15623616,15653852,5775543,5769488,2348941,2270798,8123070,8055636,9003352,9297486,1,1,1,1,1,1,1,1,1,1,1,1 +2018,3,0,All Sexes,A01,14-18,3499068,3471411,1358364,1367264,265018,264702,114773,185225,379900,450199,1056918,1069482,1,1,1,1,1,1,1,1,1,1,1,1 +2018,3,0,All Sexes,A02,19-21,6452853,5919586,1649954,2187889,624045,622276,255325,320383,879345,943778,942444,1457008,1,1,1,1,1,1,1,1,1,1,1,1 +2018,3,0,All Sexes,A03,22-24,7516779,7614253,1785951,1645502,695599,695731,298693,269773,994074,967429,989598,888323,1,1,1,1,1,1,1,1,1,1,1,1 +2018,3,0,All Sexes,A04,25-34,29002375,29225829,4180154,3854632,1758649,1757670,680982,614720,2439514,2377529,2185581,1969762,1,1,1,1,1,1,1,1,1,1,1,1 +2018,3,0,All Sexes,A05,35-44,28142825,28331982,2765513,2517122,1103942,1102756,430593,379285,1534231,1485230,1499647,1322762,1,1,1,1,1,1,1,1,1,1,1,1 +2018,3,0,All Sexes,A06,45-54,27282026,27378698,2011484,1881177,769515,768397,310831,275174,1079959,1045913,1121480,1037182,1,1,1,1,1,1,1,1,1,1,1,1 +2018,3,0,All Sexes,A07,55-64,22745677,22595036,1281673,1424071,425543,424909,191498,167285,616667,593320,780657,939444,1,1,1,1,1,1,1,1,1,1,1,1 +2018,3,0,All Sexes,A08,65-99,8388772,8202804,590523,776194,133232,133046,66246,58953,199379,192238,427026,613523,1,1,1,1,1,1,1,1,1,1,1,1 +2018,3,1,Male,A00,All Ages (14-99),67500959,67192711,7856315,8067604,2981671,2978220,1183297,1171320,4162555,4157856,4511169,4822725,1,1,1,1,1,1,1,1,1,1,1,1 +2018,3,1,Male,A01,14-18,1655582,1614579,638099,671077,118567,118569,52742,85481,171302,204117,504945,537827,1,1,1,1,1,1,1,1,1,1,1,1 +2018,3,1,Male,A02,19-21,3166581,2878758,809950,1098378,303469,302820,126925,159133,430188,462497,473690,751250,1,1,1,1,1,1,1,1,1,1,1,1 +2018,3,1,Male,A03,22-24,3741249,3763289,866146,830370,340161,339990,144080,137618,483956,478548,486709,462508,1,1,1,1,1,1,1,1,1,1,1,1 +2018,3,1,Male,A04,25-34,14835351,14916711,2135289,2013084,925738,925008,350228,326241,1275369,1254055,1106185,1028948,1,1,1,1,1,1,1,1,1,1,1,1 +2018,3,1,Male,A05,35-44,14447581,14504575,1408213,1328987,587637,586740,219443,200023,806603,788570,749378,699154,1,1,1,1,1,1,1,1,1,1,1,1 +2018,3,1,Male,A06,45-54,13830991,13860609,1020301,980010,404512,404012,156149,143024,560218,548356,563521,541221,1,1,1,1,1,1,1,1,1,1,1,1 +2018,3,1,Male,A07,55-64,11443151,11369065,665933,738028,229330,228951,99001,88263,327998,317890,402262,481547,1,1,1,1,1,1,1,1,1,1,1,1 +2018,3,1,Male,A08,65-99,4380471,4285127,312385,407670,72258,72129,34730,31537,106921,103823,224478,320270,1,1,1,1,1,1,1,1,1,1,1,1 +2018,3,2,Female,A00,All Ages (14-99),65529416,65546887,7767301,7586248,2793872,2791268,1165644,1099478,3960515,3897780,4492183,4474762,1,1,1,1,1,1,1,1,1,1,1,1 +2018,3,2,Female,A01,14-18,1843485,1856832,720266,696187,146451,146133,62031,99744,208599,246082,551973,531655,1,1,1,1,1,1,1,1,1,1,1,1 +2018,3,2,Female,A02,19-21,3286272,3040828,840004,1089511,320576,319456,128401,161250,449157,481281,468754,705758,1,1,1,1,1,1,1,1,1,1,1,1 +2018,3,2,Female,A03,22-24,3775530,3850964,919805,815132,355438,355741,154613,132155,510118,488881,502889,425815,1,1,1,1,1,1,1,1,1,1,1,1 +2018,3,2,Female,A04,25-34,14167024,14309119,2044865,1841548,832911,832662,330754,288479,1164144,1123474,1079396,940814,1,1,1,1,1,1,1,1,1,1,1,1 +2018,3,2,Female,A05,35-44,13695244,13827407,1357300,1188135,516305,516016,211150,179262,727628,696660,750269,623609,1,1,1,1,1,1,1,1,1,1,1,1 +2018,3,2,Female,A06,45-54,13451035,13518090,991183,901167,365003,364386,154682,132151,519741,497557,557959,495961,1,1,1,1,1,1,1,1,1,1,1,1 +2018,3,2,Female,A07,55-64,11302526,11225972,615740,686044,196213,195958,92497,79022,288669,275430,378396,457897,1,1,1,1,1,1,1,1,1,1,1,1 +2018,3,2,Female,A08,65-99,4008301,3917677,278138,368523,60974,60917,31516,27416,92458,88415,202548,293253,1,1,1,1,1,1,1,1,1,1,1,1 +2018,4,0,All Sexes,A00,All Ages (14-99),132774181,132511992,13999301,14035601,5010303,5007216,2268358,2170919,7278557,7180508,8238484,8507994,1,1,1,1,1,1,1,1,1,1,1,1 +2018,4,0,All Sexes,A01,14-18,3095131,3417341,1129317,786650,216922,216545,159527,117625,376405,333941,876110,552965,1,1,1,1,1,1,1,1,1,1,1,1 +2018,4,0,All Sexes,A02,19-21,5738785,5868223,1501140,1330890,504442,503706,321083,233796,825384,737528,913957,782139,1,1,1,1,1,1,1,1,1,1,1,1 +2018,4,0,All Sexes,A03,22-24,7489727,7560094,1475304,1362054,580290,580061,273219,245348,853368,825638,808662,735226,1,1,1,1,1,1,1,1,1,1,1,1 +2018,4,0,All Sexes,A04,25-34,29183827,29196124,3699347,3611816,1535334,1534855,622717,597207,2158130,2133154,1963761,1951393,1,1,1,1,1,1,1,1,1,1,1,1 +2018,4,0,All Sexes,A05,35-44,28403746,28370446,2504377,2503903,974073,973283,382841,401434,1357085,1375372,1391290,1431730,1,1,1,1,1,1,1,1,1,1,1,1 +2018,4,0,All Sexes,A06,45-54,27353186,27217882,1844767,1966201,684951,684842,276778,309646,961813,994953,1054903,1196892,1,1,1,1,1,1,1,1,1,1,1,1 +2018,4,0,All Sexes,A07,55-64,22946855,22617935,1229271,1560051,388395,388206,171413,199584,559771,587941,771077,1104105,1,1,1,1,1,1,1,1,1,1,1,1 +2018,4,0,All Sexes,A08,65-99,8562925,8263947,615778,914035,125896,125718,60780,66279,186601,191982,458722,753545,1,1,1,1,1,1,1,1,1,1,1,1 +2018,4,1,Male,A00,All Ages (14-99),67180964,66678203,7017167,7456707,2614493,2613530,1170915,1178561,3784872,3793189,4087817,4598027,1,1,1,1,1,1,1,1,1,1,1,1 +2018,4,1,Male,A01,14-18,1433418,1570783,527574,382673,96727,96645,73236,55263,169897,151782,417214,278714,1,1,1,1,1,1,1,1,1,1,1,1 +2018,4,1,Male,A02,19-21,2788118,2834361,736305,674494,247644,247461,158883,120741,406363,368160,456780,408453,1,1,1,1,1,1,1,1,1,1,1,1 +2018,4,1,Male,A03,22-24,3693867,3706219,730838,703443,290586,290591,139281,129960,429733,420589,406494,392407,1,1,1,1,1,1,1,1,1,1,1,1 +2018,4,1,Male,A04,25-34,14877594,14816927,1900515,1935438,816808,816769,330292,330380,1146974,1147686,997797,1058929,1,1,1,1,1,1,1,1,1,1,1,1 +2018,4,1,Male,A05,35-44,14539603,14446740,1269097,1355403,522971,522571,202108,222502,725105,745440,686531,785182,1,1,1,1,1,1,1,1,1,1,1,1 +2018,4,1,Male,A06,45-54,13843205,13711995,923498,1056214,361854,361746,144026,170634,505878,532633,517769,654766,1,1,1,1,1,1,1,1,1,1,1,1 +2018,4,1,Male,A07,55-64,11539309,11323266,621430,842742,209767,209665,90568,111842,300311,321600,380753,600418,1,1,1,1,1,1,1,1,1,1,1,1 +2018,4,1,Male,A08,65-99,4465851,4267911,307909,506301,68135,68084,32520,37238,100611,105298,224479,419158,1,1,1,1,1,1,1,1,1,1,1,1 +2018,4,2,Female,A00,All Ages (14-99),65593217,65833789,6982134,6578894,2395810,2393685,1097443,992357,3493685,3387319,4150666,3909967,1,1,1,1,1,1,1,1,1,1,1,1 +2018,4,2,Female,A01,14-18,1661713,1846558,601742,403977,120195,119900,86291,62362,206509,182159,458896,274251,1,1,1,1,1,1,1,1,1,1,1,1 +2018,4,2,Female,A02,19-21,2950667,3033862,764835,656396,256798,256244,162200,113054,419020,369368,457177,373686,1,1,1,1,1,1,1,1,1,1,1,1 +2018,4,2,Female,A03,22-24,3795860,3853874,744466,658611,289704,289471,133938,115389,423635,405048,402168,342819,1,1,1,1,1,1,1,1,1,1,1,1 +2018,4,2,Female,A04,25-34,14306232,14379197,1798832,1676379,718526,718086,292424,266827,1011155,985468,965964,892463,1,1,1,1,1,1,1,1,1,1,1,1 +2018,4,2,Female,A05,35-44,13864143,13923705,1235279,1148501,451102,450712,180732,178932,631981,629932,704759,646548,1,1,1,1,1,1,1,1,1,1,1,1 +2018,4,2,Female,A06,45-54,13509980,13505887,921269,909988,323097,323096,132752,139012,455934,462321,537134,542126,1,1,1,1,1,1,1,1,1,1,1,1 +2018,4,2,Female,A07,55-64,11407546,11294669,607841,717309,178627,178541,80845,87742,259460,266340,390324,503688,1,1,1,1,1,1,1,1,1,1,1,1 +2018,4,2,Female,A08,65-99,4097075,3996036,307870,407734,57761,57634,28260,29040,85990,86684,234243,334387,1,1,1,1,1,1,1,1,1,1,1,1 +2019,1,0,All Sexes,A00,All Ages (14-99),132482769,132813183,13192994,12561889,4641281,4633128,2169033,2236052,6811409,6864104,7810365,7472123,1,1,1,1,1,1,1,1,1,1,1,1 +2019,1,0,All Sexes,A01,14-18,3036907,3340620,974368,648306,174898,174135,101371,148345,275765,321802,766597,459287,1,1,1,1,1,1,1,1,1,1,1,1 +2019,1,0,All Sexes,A02,19-21,5732895,5862064,1443154,1262366,463386,461832,230786,304129,693591,764772,896264,760356,1,1,1,1,1,1,1,1,1,1,1,1 +2019,1,0,All Sexes,A03,22-24,7418254,7520942,1401218,1249076,532370,531740,246124,256719,778473,787622,781664,674982,1,1,1,1,1,1,1,1,1,1,1,1 +2019,1,0,All Sexes,A04,25-34,29141241,29190471,3458537,3322871,1415395,1413739,603422,620031,2019318,2032515,1846200,1793466,1,1,1,1,1,1,1,1,1,1,1,1 +2019,1,0,All Sexes,A05,35-44,28428891,28503836,2381728,2258467,912619,911242,404229,389823,1317420,1300554,1331653,1259021,1,1,1,1,1,1,1,1,1,1,1,1 +2019,1,0,All Sexes,A06,45-54,27179310,27221852,1790665,1717212,652756,651961,310788,280679,964199,932359,1032668,993548,1,1,1,1,1,1,1,1,1,1,1,1 +2019,1,0,All Sexes,A07,55-64,22933832,22768000,1195361,1350788,373589,372580,203757,174895,577752,547248,752805,922138,1,1,1,1,1,1,1,1,1,1,1,1 +2019,1,0,All Sexes,A08,65-99,8611439,8405398,547963,752803,116268,115901,68556,61429,184892,177232,402513,609325,1,1,1,1,1,1,1,1,1,1,1,1 +2019,1,1,Male,A00,All Ages (14-99),66654381,66862296,6839390,6507049,2436550,2432630,1178613,1189678,3615240,3620186,4080336,3867254,1,1,1,1,1,1,1,1,1,1,1,1 +2019,1,1,Male,A01,14-18,1388245,1540020,464557,304130,76317,76105,47009,68715,123126,144547,375511,221844,1,1,1,1,1,1,1,1,1,1,1,1 +2019,1,1,Male,A02,19-21,2764970,2840133,716502,620969,226332,225865,119189,152277,345193,377678,457368,378820,1,1,1,1,1,1,1,1,1,1,1,1 +2019,1,1,Male,A03,22-24,3630768,3694455,710508,627069,266047,265825,129986,134807,395969,400249,409236,343440,1,1,1,1,1,1,1,1,1,1,1,1 +2019,1,1,Male,A04,25-34,14774879,14825264,1826239,1738295,756931,755950,333838,337221,1090775,1092583,981299,929563,1,1,1,1,1,1,1,1,1,1,1,1 +2019,1,1,Male,A05,35-44,14480530,14514864,1254923,1199670,494281,493559,224361,212156,718862,705521,699002,665496,1,1,1,1,1,1,1,1,1,1,1,1 +2019,1,1,Male,A06,45-54,13691499,13711088,936402,904569,348567,348046,171396,152498,520216,500455,541960,523499,1,1,1,1,1,1,1,1,1,1,1,1 +2019,1,1,Male,A07,55-64,11481424,11397711,635997,715595,204178,203613,114286,97591,318627,301121,400544,485662,1,1,1,1,1,1,1,1,1,1,1,1 +2019,1,1,Male,A08,65-99,4442066,4338760,294262,396752,63897,63666,38548,34413,102474,98031,215416,318930,1,1,1,1,1,1,1,1,1,1,1,1 +2019,1,2,Female,A00,All Ages (14-99),65828387,65950887,6353603,6054841,2204731,2200499,990420,1046374,3196169,3243918,3730029,3604869,1,1,1,1,1,1,1,1,1,1,1,1 +2019,1,2,Female,A01,14-18,1648662,1800600,509811,344176,98582,98030,54362,79630,152638,177255,391086,237443,1,1,1,1,1,1,1,1,1,1,1,1 +2019,1,2,Female,A02,19-21,2967925,3021931,726652,641396,237053,235966,111597,151852,348399,387093,438897,381535,1,1,1,1,1,1,1,1,1,1,1,1 +2019,1,2,Female,A03,22-24,3787487,3826487,690710,622007,266323,265914,116137,121913,382504,387372,372428,331542,1,1,1,1,1,1,1,1,1,1,1,1 +2019,1,2,Female,A04,25-34,14366362,14365207,1632297,1584577,658465,657789,269584,282810,928543,939932,864901,863903,1,1,1,1,1,1,1,1,1,1,1,1 +2019,1,2,Female,A05,35-44,13948360,13988972,1126805,1058797,418338,417683,179868,177667,598558,595034,632651,593525,1,1,1,1,1,1,1,1,1,1,1,1 +2019,1,2,Female,A06,45-54,13487811,13510763,854263,812642,304189,303914,139393,128182,443984,431904,490708,470049,1,1,1,1,1,1,1,1,1,1,1,1 +2019,1,2,Female,A07,55-64,11452407,11370289,559364,635193,169410,168967,89471,77304,259125,246127,352261,436476,1,1,1,1,1,1,1,1,1,1,1,1 +2019,1,2,Female,A08,65-99,4169373,4066638,253701,356052,52371,52236,30008,27016,82418,79201,187098,290395,1,1,1,1,1,1,1,1,1,1,1,1 +2019,2,0,All Sexes,A00,All Ages (14-99),132705380,134862114,16776513,14121261,5469486,5463554,2235205,2387679,7703894,7855557,10392983,8186350,1,1,1,1,1,1,1,1,1,1,1,1 +2019,2,0,All Sexes,A01,14-18,2951547,4075427,1913392,769761,262036,261275,124981,140958,386743,402206,1579889,497928,1,1,1,1,1,1,1,1,1,1,1,1 +2019,2,0,All Sexes,A02,19-21,5714232,6636910,2422153,1387534,620571,619555,304258,262815,924225,882657,1635439,733679,1,1,1,1,1,1,1,1,1,1,1,1 +2019,2,0,All Sexes,A03,22-24,7384683,7625913,1764047,1458610,656229,655728,260164,296048,916321,952160,1002206,759166,1,1,1,1,1,1,1,1,1,1,1,1 +2019,2,0,All Sexes,A04,25-34,29131512,29351775,3987662,3650725,1621696,1620066,628073,678126,2249939,2299829,2156077,1913327,1,1,1,1,1,1,1,1,1,1,1,1 +2019,2,0,All Sexes,A05,35-44,28540444,28617663,2656357,2500822,1025436,1024769,393040,436029,1418545,1461766,1488072,1384551,1,1,1,1,1,1,1,1,1,1,1,1 +2019,2,0,All Sexes,A06,45-54,27175913,27188134,1973191,1902587,725469,724921,282187,311386,1007719,1036988,1139295,1100778,1,1,1,1,1,1,1,1,1,1,1,1 +2019,2,0,All Sexes,A07,55-64,23061297,22838813,1351178,1537006,418864,418373,179055,193684,597831,612373,858968,1055066,1,1,1,1,1,1,1,1,1,1,1,1 +2019,2,0,All Sexes,A08,65-99,8745752,8527480,708532,914216,139184,138867,63447,68634,202572,207578,533036,741856,1,1,1,1,1,1,1,1,1,1,1,1 +2019,2,1,Male,A00,All Ages (14-99),66840239,68334655,8894936,7164169,2891521,2890923,1189949,1191145,4081522,4084103,5594652,4070530,1,1,1,1,1,1,1,1,1,1,1,1 +2019,2,1,Male,A01,14-18,1353061,1924489,948591,371100,123492,123392,57391,65143,180805,188522,793948,243683,1,1,1,1,1,1,1,1,1,1,1,1 +2019,2,1,Male,A02,19-21,2765657,3269985,1225824,678228,303384,303294,151623,127619,454758,431053,854228,362029,1,1,1,1,1,1,1,1,1,1,1,1 +2019,2,1,Male,A03,22-24,3622455,3798832,920579,715607,329219,329350,136100,141795,465300,471322,545475,369493,1,1,1,1,1,1,1,1,1,1,1,1 +2019,2,1,Male,A04,25-34,14789080,14995106,2157654,1894482,877864,877545,341720,346860,1219797,1225206,1183727,965331,1,1,1,1,1,1,1,1,1,1,1,1 +2019,2,1,Male,A05,35-44,14546467,14642181,1436295,1299919,561179,561178,214199,219932,775514,781544,809791,698129,1,1,1,1,1,1,1,1,1,1,1,1 +2019,2,1,Male,A06,45-54,13699746,13752464,1056579,972903,389610,389646,153318,155026,543042,544983,619121,549828,1,1,1,1,1,1,1,1,1,1,1,1 +2019,2,1,Male,A07,55-64,11551731,11496776,743549,776152,230013,229917,100035,99300,330017,329362,479063,518792,1,1,1,1,1,1,1,1,1,1,1,1 +2019,2,1,Male,A08,65-99,4512042,4454821,405867,455778,76761,76600,35563,35472,112290,112112,309300,363245,1,1,1,1,1,1,1,1,1,1,1,1 +2019,2,2,Female,A00,All Ages (14-99),65865141,66527459,7881577,6957092,2577964,2572631,1045256,1196534,3622372,3771454,4798331,4115819,1,1,1,1,1,1,1,1,1,1,1,1 +2019,2,2,Female,A01,14-18,1598486,2150938,964801,398661,138544,137882,67589,75815,205937,213685,785941,254245,1,1,1,1,1,1,1,1,1,1,1,1 +2019,2,2,Female,A02,19-21,2948576,3366925,1196329,709306,317188,316261,152636,135196,469467,451604,781210,371649,1,1,1,1,1,1,1,1,1,1,1,1 +2019,2,2,Female,A03,22-24,3762227,3827081,843469,743002,327010,326377,124064,154253,451021,480838,456731,389673,1,1,1,1,1,1,1,1,1,1,1,1 +2019,2,2,Female,A04,25-34,14342432,14356669,1830008,1756243,743831,742522,286354,331266,1030143,1074623,972350,947996,1,1,1,1,1,1,1,1,1,1,1,1 +2019,2,2,Female,A05,35-44,13993977,13975482,1220063,1200903,464257,463591,178841,216097,643031,680222,678281,686422,1,1,1,1,1,1,1,1,1,1,1,1 +2019,2,2,Female,A06,45-54,13476167,13435670,916613,929684,335859,335275,128869,156360,464677,492005,520175,550950,1,1,1,1,1,1,1,1,1,1,1,1 +2019,2,2,Female,A07,55-64,11509566,11342037,607629,760854,188851,188456,79021,94384,267814,283011,379905,536274,1,1,1,1,1,1,1,1,1,1,1,1 +2019,2,2,Female,A08,65-99,4233710,4072659,302665,458438,62424,62267,27883,33162,90282,95466,223737,378610,1,1,1,1,1,1,1,1,1,1,1,1 +2019,3,0,All Sexes,A00,All Ages (14-99),134862049,134544577,15645832,15704770,5804235,5796593,2384124,2306950,8192061,8118919,8979220,9299876,1,1,1,1,1,1,1,1,1,1,1,1 +2019,3,0,All Sexes,A01,14-18,3586228,3561721,1381724,1386812,269182,268430,119493,189686,388947,458490,1075453,1083216,1,1,1,1,1,1,1,1,1,1,1,1 +2019,3,0,All Sexes,A02,19-21,6518230,5969122,1642252,2197318,621937,619870,256788,325656,879175,946762,936070,1465653,1,1,1,1,1,1,1,1,1,1,1,1 +2019,3,0,All Sexes,A03,22-24,7521281,7628714,1772613,1622456,686170,686255,299591,268996,985987,957099,984666,873699,1,1,1,1,1,1,1,1,1,1,1,1 +2019,3,0,All Sexes,A04,25-34,29283603,29531744,4168932,3817520,1764386,1762831,686214,620400,2451773,2388378,2163810,1924754,1,1,1,1,1,1,1,1,1,1,1,1 +2019,3,0,All Sexes,A05,35-44,28688460,28874324,2784710,2538368,1117533,1116434,439692,388705,1558086,1508322,1499834,1325699,1,1,1,1,1,1,1,1,1,1,1,1 +2019,3,0,All Sexes,A06,45-54,27176165,27258466,1986861,1872190,766901,765884,313005,276469,1080445,1044522,1097719,1028113,1,1,1,1,1,1,1,1,1,1,1,1 +2019,3,0,All Sexes,A07,55-64,23170673,23007932,1293794,1450093,435147,434219,198161,173578,633449,608884,781857,953690,1,1,1,1,1,1,1,1,1,1,1,1 +2019,3,0,All Sexes,A08,65-99,8917408,8712554,614947,820015,142979,142671,71179,63462,214198,206461,439812,645052,1,1,1,1,1,1,1,1,1,1,1,1 +2019,3,1,Male,A00,All Ages (14-99),68337661,68007616,7792563,8033730,2949213,2944601,1190174,1184684,4141459,4136988,4478064,4815642,1,1,1,1,1,1,1,1,1,1,1,1 +2019,3,1,Male,A01,14-18,1690517,1654426,647921,675912,119537,119345,54622,87423,174263,206911,513722,541030,1,1,1,1,1,1,1,1,1,1,1,1 +2019,3,1,Male,A02,19-21,3201912,2903863,797458,1097526,297653,296791,125738,161092,423616,458464,467459,755100,1,1,1,1,1,1,1,1,1,1,1,1 +2019,3,1,Male,A03,22-24,3744902,3773441,851344,809856,330067,329856,142385,136376,472652,467060,482200,451857,1,1,1,1,1,1,1,1,1,1,1,1 +2019,3,1,Male,A04,25-34,14949507,15046254,2108539,1971472,913937,912882,350988,326579,1265613,1242099,1090448,999431,1,1,1,1,1,1,1,1,1,1,1,1 +2019,3,1,Male,A05,35-44,14685283,14739313,1402354,1327695,584629,583740,222196,204256,807287,789658,745478,699177,1,1,1,1,1,1,1,1,1,1,1,1 +2019,3,1,Male,A06,45-54,13749368,13767369,994868,967592,394701,394079,155784,143786,550779,538952,548053,538349,1,1,1,1,1,1,1,1,1,1,1,1 +2019,3,1,Male,A07,55-64,11664322,11578329,665725,751357,231308,230743,101646,91391,333031,322709,400127,492234,1,1,1,1,1,1,1,1,1,1,1,1 +2019,3,1,Male,A08,65-99,4651851,4544623,324354,432320,77382,77165,36816,33782,114218,111136,230575,338466,1,1,1,1,1,1,1,1,1,1,1,1 +2019,3,2,Female,A00,All Ages (14-99),66524388,66536961,7853269,7671040,2855021,2851992,1193950,1122266,4050602,3981931,4501157,4484234,1,1,1,1,1,1,1,1,1,1,1,1 +2019,3,2,Female,A01,14-18,1895711,1907295,733803,710900,149645,149085,64872,102263,214684,251580,561731,542186,1,1,1,1,1,1,1,1,1,1,1,1 +2019,3,2,Female,A02,19-21,3316318,3065259,844794,1099792,324284,323079,131050,164564,455559,488299,468611,710554,1,1,1,1,1,1,1,1,1,1,1,1 +2019,3,2,Female,A03,22-24,3776380,3855273,921269,812599,356103,356399,157206,132620,513335,490038,502465,421842,1,1,1,1,1,1,1,1,1,1,1,1 +2019,3,2,Female,A04,25-34,14334096,14485490,2060393,1846048,850449,849949,335227,293821,1186160,1146280,1073362,925323,1,1,1,1,1,1,1,1,1,1,1,1 +2019,3,2,Female,A05,35-44,14003177,14135011,1382356,1210673,532904,532694,217495,184449,750799,718664,754356,626522,1,1,1,1,1,1,1,1,1,1,1,1 +2019,3,2,Female,A06,45-54,13426798,13491097,991993,904598,372199,371805,157221,132682,529666,505570,549665,489765,1,1,1,1,1,1,1,1,1,1,1,1 +2019,3,2,Female,A07,55-64,11506351,11429603,628068,698735,203839,203477,96515,82188,300418,286176,381730,461456,1,1,1,1,1,1,1,1,1,1,1,1 +2019,3,2,Female,A08,65-99,4265557,4167932,290593,387696,65597,65505,34364,29679,99980,95325,209236,306586,1,1,1,1,1,1,1,1,1,1,1,1 +2019,4,0,All Sexes,A00,All Ages (14-99),134544572,134280369,14091698,14146175,5048823,5044310,2302726,1976213,7352710,7026606,8291560,8592076,1,1,1,1,1,1,1,1,1,1,1,1 +2019,4,0,All Sexes,A01,14-18,3176668,3520037,1156740,794584,221367,221260,163302,101752,384523,322967,899019,557308,1,1,1,1,1,1,1,1,1,1,1,1 +2019,4,0,All Sexes,A02,19-21,5799862,5940872,1509374,1328711,505966,505434,326263,205203,832475,710977,921768,780434,1,1,1,1,1,1,1,1,1,1,1,1 +2019,4,0,All Sexes,A03,22-24,7496960,7571518,1457491,1344090,573511,573340,272739,215676,846417,789656,800933,726307,1,1,1,1,1,1,1,1,1,1,1,1 +2019,4,0,All Sexes,A04,25-34,29464079,29469056,3691807,3616531,1544520,1543374,627666,542722,2172655,2088472,1949163,1951671,1,1,1,1,1,1,1,1,1,1,1,1 +2019,4,0,All Sexes,A05,35-44,28929304,28890390,2537920,2543581,989891,988545,391826,373823,1381931,1363686,1406327,1456968,1,1,1,1,1,1,1,1,1,1,1,1 +2019,4,0,All Sexes,A06,45-54,27256968,27116576,1838701,1966163,684605,683691,278220,286482,962928,971123,1048723,1199801,1,1,1,1,1,1,1,1,1,1,1,1 +2019,4,0,All Sexes,A07,55-64,23324520,22986943,1251357,1592417,395833,395568,177354,187494,573275,583484,784017,1128769,1,1,1,1,1,1,1,1,1,1,1,1 +2019,4,0,All Sexes,A08,65-99,9096211,8784978,648307,960099,133129,133099,65355,63060,198505,196241,481609,790816,1,1,1,1,1,1,1,1,1,1,1,1 +2019,4,1,Male,A00,All Ages (14-99),67979068,67447572,7013867,7483956,2593780,2591543,1183399,1073913,3778534,3667913,4107763,4654927,1,1,1,1,1,1,1,1,1,1,1,1 +2019,4,1,Male,A01,14-18,1468728,1618085,540414,384034,98011,97973,74900,48386,172834,146307,428595,279217,1,1,1,1,1,1,1,1,1,1,1,1 +2019,4,1,Male,A02,19-21,2817896,2872164,736865,667884,245460,245298,160743,106445,406370,351863,460297,405124,1,1,1,1,1,1,1,1,1,1,1,1 +2019,4,1,Male,A03,22-24,3701771,3715089,716913,689251,282543,282360,138026,114882,420733,397491,401568,387714,1,1,1,1,1,1,1,1,1,1,1,1 +2019,4,1,Male,A04,25-34,14994715,14921416,1879707,1927587,809880,809588,330500,300188,1140923,1110758,985558,1061452,1,1,1,1,1,1,1,1,1,1,1,1 +2019,4,1,Male,A05,35-44,14765216,14662396,1274631,1369916,520917,520134,206078,206693,727277,727389,694004,803182,1,1,1,1,1,1,1,1,1,1,1,1 +2019,4,1,Male,A06,45-54,13763296,13625360,913388,1052662,354911,354310,144852,157396,499944,512128,514916,659282,1,1,1,1,1,1,1,1,1,1,1,1 +2019,4,1,Male,A07,55-64,11729746,11504319,627905,858825,209957,209745,93487,104530,303515,314420,387190,616806,1,1,1,1,1,1,1,1,1,1,1,1 +2019,4,1,Male,A08,65-99,4737700,4528743,324043,533797,72102,72135,34812,35393,106938,107557,235634,442150,1,1,1,1,1,1,1,1,1,1,1,1 +2019,4,2,Female,A00,All Ages (14-99),66565504,66832797,7077830,6662219,2455043,2452767,1119326,902299,3574176,3358693,4183797,3937149,1,1,1,1,1,1,1,1,1,1,1,1 +2019,4,2,Female,A01,14-18,1707939,1901952,616326,410550,123356,123287,88401,53366,211689,176660,470424,278091,1,1,1,1,1,1,1,1,1,1,1,1 +2019,4,2,Female,A02,19-21,2981965,3068708,772509,660827,260506,260136,165520,98758,426105,359113,461471,375310,1,1,1,1,1,1,1,1,1,1,1,1 +2019,4,2,Female,A03,22-24,3795189,3856428,740579,654838,290967,290980,134713,100794,425684,392165,399365,338594,1,1,1,1,1,1,1,1,1,1,1,1 +2019,4,2,Female,A04,25-34,14469364,14547640,1812100,1688944,734640,733786,297166,242534,1031732,977715,963605,890220,1,1,1,1,1,1,1,1,1,1,1,1 +2019,4,2,Female,A05,35-44,14164088,14227994,1263288,1173665,468975,468411,185748,167129,654654,636297,712323,653786,1,1,1,1,1,1,1,1,1,1,1,1 +2019,4,2,Female,A06,45-54,13493672,13491216,925313,913501,329695,329381,133368,129086,462984,458994,533807,540519,1,1,1,1,1,1,1,1,1,1,1,1 +2019,4,2,Female,A07,55-64,11594775,11482624,623452,733592,185877,185823,83866,82964,269760,269064,396827,511963,1,1,1,1,1,1,1,1,1,1,1,1 +2019,4,2,Female,A08,65-99,4358512,4256235,324264,426302,61027,60964,30543,27666,91566,88685,245975,348666,1,1,1,1,1,1,1,1,1,1,1,1 +2020,1,0,All Sexes,A00,All Ages (14-99),133621428,128033619,11819182,17609038,4442457,4436112,1969490,1895770,6415477,6328340,6827185,12465991,1,1,1,1,1,1,1,1,1,1,1,1 +2020,1,0,All Sexes,A01,14-18,3110754,2946502,820621,972449,161912,161100,87553,166374,249515,327450,636110,785854,1,1,1,1,1,1,1,1,1,1,1,1 +2020,1,0,All Sexes,A02,19-21,5748382,5296054,1243999,1676711,432199,431039,200741,281379,633100,711490,756383,1187140,1,1,1,1,1,1,1,1,1,1,1,1 +2020,1,0,All Sexes,A03,22-24,7404373,7016791,1232178,1606600,499468,498871,215622,216974,715378,715197,673286,1050767,1,1,1,1,1,1,1,1,1,1,1,1 +2020,1,0,All Sexes,A04,25-34,29257933,28109361,3116108,4286851,1349796,1348547,546884,495435,1897846,1843092,1621345,2779428,1,1,1,1,1,1,1,1,1,1,1,1 +2020,1,0,All Sexes,A05,35-44,28820718,27962182,2193273,3105989,886921,885709,375450,313920,1263189,1199240,1198199,2087654,1,1,1,1,1,1,1,1,1,1,1,1 +2020,1,0,All Sexes,A06,45-54,27009125,26276602,1629751,2431828,626436,625883,287316,223334,914364,848943,920365,1692201,1,1,1,1,1,1,1,1,1,1,1,1 +2020,1,0,All Sexes,A07,55-64,23168452,22224193,1088761,2106614,366196,365693,190747,141151,557313,506568,668829,1641026,1,1,1,1,1,1,1,1,1,1,1,1 +2020,1,0,All Sexes,A08,65-99,9101689,8201933,494491,1421994,119528,119270,65177,57203,184772,176360,352668,1241921,1,1,1,1,1,1,1,1,1,1,1,1 +2020,1,1,Male,A00,All Ages (14-99),67105175,64728652,6145866,8625250,2289503,2285705,1071401,1005002,3362745,3288481,3615979,6033836,1,1,1,1,1,1,1,1,1,1,1,1 +2020,1,1,Male,A01,14-18,1422430,1373748,400614,442852,71140,70822,40987,77889,112137,148724,320080,361499,1,1,1,1,1,1,1,1,1,1,1,1 +2020,1,1,Male,A02,19-21,2776358,2603269,626087,788173,208818,208369,104199,137138,313100,345088,394653,557747,1,1,1,1,1,1,1,1,1,1,1,1 +2020,1,1,Male,A03,22-24,3627463,3471157,625919,776424,245369,244919,114790,112743,360277,357309,356389,508477,1,1,1,1,1,1,1,1,1,1,1,1 +2020,1,1,Male,A04,25-34,14799975,14301522,1642858,2153624,708910,707956,302616,271964,1012057,979263,869596,1376038,1,1,1,1,1,1,1,1,1,1,1,1 +2020,1,1,Male,A05,35-44,14630410,14259734,1154672,1553712,469740,468888,207877,172253,678102,640838,636636,1026051,1,1,1,1,1,1,1,1,1,1,1,1 +2020,1,1,Male,A06,45-54,13569743,13261093,849567,1193471,325954,325589,157936,121777,484242,447133,487653,818688,1,1,1,1,1,1,1,1,1,1,1,1 +2020,1,1,Male,A07,55-64,11592099,11178598,579585,1028686,195355,195102,106316,79261,301892,274149,360038,790107,1,1,1,1,1,1,1,1,1,1,1,1 +2020,1,1,Male,A08,65-99,4686696,4279530,266564,688308,64217,64059,36681,31976,100938,95976,190932,595231,1,1,1,1,1,1,1,1,1,1,1,1 +2020,1,2,Female,A00,All Ages (14-99),66516252,63304967,5673315,8983788,2152954,2150407,898090,890768,3052732,3039859,3211206,6432155,1,1,1,1,1,1,1,1,1,1,1,1 +2020,1,2,Female,A01,14-18,1688323,1572754,420007,529598,90772,90279,46566,88485,137378,178726,316029,424355,1,1,1,1,1,1,1,1,1,1,1,1 +2020,1,2,Female,A02,19-21,2972024,2692785,617913,888538,223382,222669,96542,144241,320000,366402,361730,629393,1,1,1,1,1,1,1,1,1,1,1,1 +2020,1,2,Female,A03,22-24,3776910,3545634,606259,830176,254099,253952,100832,104231,355102,357888,316897,542290,1,1,1,1,1,1,1,1,1,1,1,1 +2020,1,2,Female,A04,25-34,14457958,13807839,1473249,2133228,640886,640591,244268,223471,885789,863828,751748,1403390,1,1,1,1,1,1,1,1,1,1,1,1 +2020,1,2,Female,A05,35-44,14190308,13702449,1038600,1552277,417181,416821,167573,141666,585087,558402,561563,1061604,1,1,1,1,1,1,1,1,1,1,1,1 +2020,1,2,Female,A06,45-54,13439382,13015509,780184,1238357,300482,300294,129380,101557,430122,401810,432712,873514,1,1,1,1,1,1,1,1,1,1,1,1 +2020,1,2,Female,A07,55-64,11576353,11045595,509176,1077929,170841,170590,84431,61890,255421,232419,308791,850919,1,1,1,1,1,1,1,1,1,1,1,1 +2020,1,2,Female,A08,65-99,4414994,3922403,227927,733686,55311,55211,28496,25227,83834,80384,161737,646691,1,1,1,1,1,1,1,1,1,1,1,1 +2020,2,0,All Sexes,A00,All Ages (14-99),127224334,124862804,11420418,13580760,3028546,3024574,1887661,2093352,4920193,5116006,7690349,10040844,1,1,1,1,1,1,1,1,1,1,1,1 +2020,2,0,All Sexes,A01,14-18,2560820,3356598,1385572,552765,148433,148085,143699,106358,292841,254121,1171656,394225,1,1,1,1,1,1,1,1,1,1,1,1 +2020,2,0,All Sexes,A02,19-21,5105305,5513037,1632366,1150190,327231,327287,280836,230855,609171,557286,1199677,791519,1,1,1,1,1,1,1,1,1,1,1,1 +2020,2,0,All Sexes,A03,22-24,6824496,6666667,1126796,1244404,334576,334502,222087,257585,557031,591919,721121,868698,1,1,1,1,1,1,1,1,1,1,1,1 +2020,2,0,All Sexes,A04,25-34,27863835,27021991,2543840,3335350,867328,866285,499830,598587,1367998,1464563,1521897,2348686,1,1,1,1,1,1,1,1,1,1,1,1 +2020,2,0,All Sexes,A05,35-44,27863553,27210629,1822168,2456997,589871,588868,315758,384231,905971,972916,1114040,1767183,1,1,1,1,1,1,1,1,1,1,1,1 +2020,2,0,All Sexes,A06,45-54,26147959,25596166,1391733,1944700,423221,422682,223703,276563,647154,699179,875918,1434564,1,1,1,1,1,1,1,1,1,1,1,1 +2020,2,0,All Sexes,A07,55-64,22367280,21615328,981476,1749521,250696,249887,143069,175085,393933,424952,668466,1421080,1,1,1,1,1,1,1,1,1,1,1,1 +2020,2,0,All Sexes,A08,65-99,8491086,7882389,536467,1146833,87190,86976,58680,64086,146095,151070,417574,1014890,1,1,1,1,1,1,1,1,1,1,1,1 +2020,2,1,Male,A00,All Ages (14-99),64355187,63614273,6200528,6831334,1650290,1648970,1000350,1060947,2652422,2707965,4225882,4956240,1,1,1,1,1,1,1,1,1,1,1,1 +2020,2,1,Male,A01,14-18,1187196,1612406,712102,270861,74021,74060,66973,48484,141314,122324,608316,192666,1,1,1,1,1,1,1,1,1,1,1,1 +2020,2,1,Male,A02,19-21,2508489,2754066,847596,570378,167144,167439,136212,111198,303858,278181,635234,390484,1,1,1,1,1,1,1,1,1,1,1,1 +2020,2,1,Male,A03,22-24,3374016,3337492,603688,620851,176094,176356,114704,123530,291002,299711,396243,427894,1,1,1,1,1,1,1,1,1,1,1,1 +2020,2,1,Male,A04,25-34,14171898,13821491,1405388,1726518,484268,483885,274050,312480,758663,795915,848980,1189664,1,1,1,1,1,1,1,1,1,1,1,1 +2020,2,1,Male,A05,35-44,14225005,13960210,1001574,1253186,328038,327426,173384,200100,501575,527276,618367,880459,1,1,1,1,1,1,1,1,1,1,1,1 +2020,2,1,Male,A06,45-54,13204835,12991584,760189,970134,231448,231135,121954,140913,353480,371811,486169,700546,1,1,1,1,1,1,1,1,1,1,1,1 +2020,2,1,Male,A07,55-64,11256848,10954397,553743,859247,140478,140022,80272,90772,220812,230665,382919,684561,1,1,1,1,1,1,1,1,1,1,1,1 +2020,2,1,Male,A08,65-99,4426902,4182625,316248,560159,48799,48648,32801,33470,81718,82081,249653,489967,1,1,1,1,1,1,1,1,1,1,1,1 +2020,2,2,Female,A00,All Ages (14-99),62869147,61248531,5219890,6749426,1378256,1375603,887311,1032404,2267771,2408041,3464467,5084604,1,1,1,1,1,1,1,1,1,1,1,1 +2020,2,2,Female,A01,14-18,1373625,1744192,673470,281904,74412,74025,76726,57875,151528,131797,563340,201558,1,1,1,1,1,1,1,1,1,1,1,1 +2020,2,2,Female,A02,19-21,2596816,2758970,784770,579812,160088,159848,144624,119657,305312,279104,564442,401036,1,1,1,1,1,1,1,1,1,1,1,1 +2020,2,2,Female,A03,22-24,3450480,3329175,523107,623553,158482,158147,107383,134055,266029,292207,324878,440804,1,1,1,1,1,1,1,1,1,1,1,1 +2020,2,2,Female,A04,25-34,13691938,13200500,1138452,1608832,383060,382400,225780,286107,609335,668649,672917,1159022,1,1,1,1,1,1,1,1,1,1,1,1 +2020,2,2,Female,A05,35-44,13638548,13250418,820594,1203812,261833,261443,142374,184131,404396,445640,495673,886724,1,1,1,1,1,1,1,1,1,1,1,1 +2020,2,2,Female,A06,45-54,12943124,12604581,631544,974566,191773,191548,101749,135651,293674,327368,389749,734018,1,1,1,1,1,1,1,1,1,1,1,1 +2020,2,2,Female,A07,55-64,11110433,10660931,427733,890274,110218,109865,62797,84313,173120,194287,285547,736518,1,1,1,1,1,1,1,1,1,1,1,1 +2020,2,2,Female,A08,65-99,4064184,3699763,220219,586673,38391,38329,25878,30616,64377,68989,167921,524923,1,1,1,1,1,1,1,1,1,1,1,1 +2020,3,0,All Sexes,A00,All Ages (14-99),124923010,126498914,15298015,13402499,4490740,4479399,2098526,1938362,6588548,6416906,10037245,8495281,1,1,1,1,1,1,1,1,1,1,1,1 +2020,3,0,All Sexes,A01,14-18,2952762,3533430,1570120,980046,249400,248247,89503,155188,338526,402786,1276416,710523,1,1,1,1,1,1,1,1,1,1,1,1 +2020,3,0,All Sexes,A02,19-21,5411801,5467061,1706387,1624826,521405,519490,224756,276558,745652,795385,1107535,1050731,1,1,1,1,1,1,1,1,1,1,1,1 +2020,3,0,All Sexes,A03,22-24,6550706,6850974,1664309,1317806,529903,529570,261016,224391,790681,753872,1049701,750842,1,1,1,1,1,1,1,1,1,1,1,1 +2020,3,0,All Sexes,A04,25-34,26944125,27335969,3766880,3268562,1315344,1312719,608773,522188,1924318,1835180,2253991,1863930,1,1,1,1,1,1,1,1,1,1,1,1 +2020,3,0,All Sexes,A05,35-44,27282226,27556508,2595503,2256130,840756,838367,389400,327947,1230284,1166597,1607439,1341661,1,1,1,1,1,1,1,1,1,1,1,1 +2020,3,0,All Sexes,A06,45-54,25614101,25808534,1924479,1690481,579616,578278,279090,232129,858916,810603,1233381,1048213,1,1,1,1,1,1,1,1,1,1,1,1 +2020,3,0,All Sexes,A07,55-64,21914696,21830685,1350602,1415864,336681,335538,179405,146692,516046,482120,940436,1026725,1,1,1,1,1,1,1,1,1,1,1,1 +2020,3,0,All Sexes,A08,65-99,8252596,8115753,719735,848783,117634,117190,66584,53268,184125,170362,568346,702658,1,1,1,1,1,1,1,1,1,1,1,1 +2020,3,1,Male,A00,All Ages (14-99),63661629,64148439,7497886,6872477,2288523,2282694,1065029,996615,3352489,3277461,4880356,4394994,1,1,1,1,1,1,1,1,1,1,1,1 +2020,3,1,Male,A01,14-18,1414811,1638030,715813,489509,111500,111166,40259,71038,151588,181875,586242,368220,1,1,1,1,1,1,1,1,1,1,1,1 +2020,3,1,Male,A02,19-21,2698717,2667080,801504,823576,249271,248655,108913,136415,357897,384619,522120,551067,1,1,1,1,1,1,1,1,1,1,1,1 +2020,3,1,Male,A03,22-24,3280046,3388201,784794,659598,256076,255811,124333,113006,380193,368567,496153,387265,1,1,1,1,1,1,1,1,1,1,1,1 +2020,3,1,Male,A04,25-34,13775079,13936270,1896387,1688225,687043,685522,317652,275664,1004484,960803,1124713,961773,1,1,1,1,1,1,1,1,1,1,1,1 +2020,3,1,Male,A05,35-44,14006821,14104766,1301551,1174312,441955,440424,203555,172949,645444,613222,794635,699034,1,1,1,1,1,1,1,1,1,1,1,1 +2020,3,1,Male,A06,45-54,13005656,13065379,948655,871689,299362,298668,142388,120980,441744,419552,601115,543976,1,1,1,1,1,1,1,1,1,1,1,1 +2020,3,1,Male,A07,55-64,11108366,11049753,677761,726098,179522,178906,93114,77918,272584,256690,465252,522501,1,1,1,1,1,1,1,1,1,1,1,1 +2020,3,1,Male,A08,65-99,4372133,4298958,371420,439471,63795,63542,34815,28646,98556,92133,290126,361157,1,1,1,1,1,1,1,1,1,1,1,1 +2020,3,2,Female,A00,All Ages (14-99),61261381,62350476,7800129,6530021,2202217,2196705,1033497,941747,3236059,3139445,5156889,4100287,1,1,1,1,1,1,1,1,1,1,1,1 +2020,3,2,Female,A01,14-18,1537951,1895400,854307,490537,137900,137080,49243,84151,186938,220912,690174,342303,1,1,1,1,1,1,1,1,1,1,1,1 +2020,3,2,Female,A02,19-21,2713084,2799981,904883,801250,272134,270835,115843,140143,387755,410766,585415,499664,1,1,1,1,1,1,1,1,1,1,1,1 +2020,3,2,Female,A03,22-24,3270659,3462773,879515,658208,273827,273759,136683,111385,410488,385305,553548,363577,1,1,1,1,1,1,1,1,1,1,1,1 +2020,3,2,Female,A04,25-34,13169046,13399699,1870493,1580337,628301,627197,291121,246524,919834,874377,1129278,902157,1,1,1,1,1,1,1,1,1,1,1,1 +2020,3,2,Female,A05,35-44,13275405,13451741,1293952,1081818,398801,397944,185845,154998,584840,553375,812804,642626,1,1,1,1,1,1,1,1,1,1,1,1 +2020,3,2,Female,A06,45-54,12608445,12743155,975824,818792,280254,279610,136702,111150,417172,391052,632267,504237,1,1,1,1,1,1,1,1,1,1,1,1 +2020,3,2,Female,A07,55-64,10806329,10780932,672841,689766,157159,156632,86291,68774,243462,225430,475184,504224,1,1,1,1,1,1,1,1,1,1,1,1 +2020,3,2,Female,A08,65-99,3880462,3816795,348315,409312,53840,53648,31770,24622,85569,78229,278220,341501,1,1,1,1,1,1,1,1,1,1,1,1 +2020,4,0,All Sexes,A00,All Ages (14-99),126747766,127295807,14016882,13238267,4439730,4437133,1942877,1888693,6383220,6325273,8886576,8368720,1,1,1,1,1,1,1,1,1,1,1,1 +2020,4,0,All Sexes,A01,14-18,3172576,3556157,1213519,809921,233514,233187,132055,126033,365260,358852,938156,559962,1,1,1,1,1,1,1,1,1,1,1,1 +2020,4,0,All Sexes,A02,19-21,5353775,5607402,1574077,1277291,484804,484738,279727,212841,764223,697514,1011719,757697,1,1,1,1,1,1,1,1,1,1,1,1 +2020,4,0,All Sexes,A03,22-24,6751822,6950104,1476042,1236851,515067,515234,228711,208619,743748,723780,886353,688318,1,1,1,1,1,1,1,1,1,1,1,1 +2020,4,0,All Sexes,A04,25-34,27298536,27547318,3591695,3273151,1320459,1319186,530509,502536,1851440,1821737,2095728,1858322,1,1,1,1,1,1,1,1,1,1,1,1 +2020,4,0,All Sexes,A05,35-44,27661910,27747991,2460787,2341169,844528,843522,332278,343727,1177231,1187302,1487003,1413436,1,1,1,1,1,1,1,1,1,1,1,1 +2020,4,0,All Sexes,A06,45-54,25874586,25848072,1802081,1809516,582636,582478,234317,259421,817280,841922,1122443,1155501,1,1,1,1,1,1,1,1,1,1,1,1 +2020,4,0,All Sexes,A07,55-64,22141612,21858933,1255698,1536156,340922,341009,150222,174078,491220,514999,850322,1133701,1,1,1,1,1,1,1,1,1,1,1,1 +2020,4,0,All Sexes,A08,65-99,8492950,8179830,642983,954212,117800,117778,55059,61438,172820,179166,494851,801783,1,1,1,1,1,1,1,1,1,1,1,1 +2020,4,1,Male,A00,All Ages (14-99),64251731,64173836,6932958,6926809,2254456,2254689,998683,1004360,3255140,3258770,4387423,4468113,1,1,1,1,1,1,1,1,1,1,1,1 +2020,4,1,Male,A01,14-18,1464632,1623314,553438,387079,100495,100489,59974,56998,160376,157332,436749,279362,1,1,1,1,1,1,1,1,1,1,1,1 +2020,4,1,Male,A02,19-21,2607601,2706906,749126,633928,229401,229664,137261,105771,366681,335377,490201,389677,1,1,1,1,1,1,1,1,1,1,1,1 +2020,4,1,Male,A03,22-24,3334048,3409887,715109,623776,250188,250514,114763,107595,365113,358053,435715,358926,1,1,1,1,1,1,1,1,1,1,1,1 +2020,4,1,Male,A04,25-34,13901891,13972770,1823770,1725467,688185,688072,279705,273938,968687,961983,1061120,993255,1,1,1,1,1,1,1,1,1,1,1,1 +2020,4,1,Male,A05,35-44,14159390,14137470,1238285,1250074,441434,441242,175412,188844,617396,630107,741053,768158,1,1,1,1,1,1,1,1,1,1,1,1 +2020,4,1,Male,A06,45-54,13093131,13020805,893585,960585,300333,300252,122245,141096,422978,441398,551939,626023,1,1,1,1,1,1,1,1,1,1,1,1 +2020,4,1,Male,A07,55-64,11200568,11010752,632051,821329,180213,180261,79721,96053,260102,276287,422653,611163,1,1,1,1,1,1,1,1,1,1,1,1 +2020,4,1,Male,A08,65-99,4490469,4291932,327595,524570,64206,64195,29603,34065,93808,98233,247992,441550,1,1,1,1,1,1,1,1,1,1,1,1 +2020,4,2,Female,A00,All Ages (14-99),62496035,63121970,7083924,6311458,2185274,2182445,944193,884333,3128081,3066503,4499153,3900607,1,1,1,1,1,1,1,1,1,1,1,1 +2020,4,2,Female,A01,14-18,1707943,1932843,660081,422841,133019,132698,72081,69035,204884,201521,501408,280600,1,1,1,1,1,1,1,1,1,1,1,1 +2020,4,2,Female,A02,19-21,2746174,2900496,824951,643363,255403,255075,142466,107070,397541,362138,521518,368020,1,1,1,1,1,1,1,1,1,1,1,1 +2020,4,2,Female,A03,22-24,3417773,3540216,760933,613075,264879,264720,113948,101024,378635,365728,450638,329392,1,1,1,1,1,1,1,1,1,1,1,1 +2020,4,2,Female,A04,25-34,13396645,13574548,1767925,1547684,632274,631114,250804,228597,882753,859754,1034609,865068,1,1,1,1,1,1,1,1,1,1,1,1 +2020,4,2,Female,A05,35-44,13502519,13610521,1222502,1091096,403094,402281,156866,154883,559835,557195,745950,645278,1,1,1,1,1,1,1,1,1,1,1,1 +2020,4,2,Female,A06,45-54,12781455,12827267,908495,848931,282303,282226,112072,118325,394302,400524,570504,529478,1,1,1,1,1,1,1,1,1,1,1,1 +2020,4,2,Female,A07,55-64,10941045,10848181,623647,714827,160709,160748,70501,78025,231118,238712,427669,522538,1,1,1,1,1,1,1,1,1,1,1,1 +2020,4,2,Female,A08,65-99,4002481,3887898,315388,429642,53594,53583,25456,27373,79012,80933,246859,360233,1,1,1,1,1,1,1,1,1,1,1,1 +2021,1,0,All Sexes,A00,All Ages (14-99),127381014,127765720,12361032,11642946,3992409,3979541,1893043,2022761,5893447,5999730,7633789,7240080,1,1,1,1,1,1,1,1,1,1,1,1 +2021,1,0,All Sexes,A01,14-18,3180874,3534631,1049294,667715,193325,191814,110799,162990,304374,355057,813716,459615,1,1,1,1,1,1,1,1,1,1,1,1 +2021,1,0,All Sexes,A02,19-21,5511184,5577377,1355027,1241810,427836,425375,212811,307210,641299,732367,845785,776052,1,1,1,1,1,1,1,1,1,1,1,1 +2021,1,0,All Sexes,A03,22-24,6840986,6930149,1285369,1148698,456709,455382,210426,233572,667896,688415,747546,656296,1,1,1,1,1,1,1,1,1,1,1,1 +2021,1,0,All Sexes,A04,25-34,27496596,27529483,3130797,3004759,1190539,1187874,509419,538505,1702046,1725424,1751738,1714768,1,1,1,1,1,1,1,1,1,1,1,1 +2021,1,0,All Sexes,A05,35-44,27806971,27881752,2199698,2065443,768679,766928,346733,337418,1117087,1103881,1292356,1216183,1,1,1,1,1,1,1,1,1,1,1,1 +2021,1,0,All Sexes,A06,45-54,25894870,25974080,1642081,1524972,536251,534743,261584,235648,799280,770029,1002127,924373,1,1,1,1,1,1,1,1,1,1,1,1 +2021,1,0,All Sexes,A07,55-64,22110095,21978307,1139502,1255569,312619,311335,177406,149632,490860,460766,758481,891570,1,1,1,1,1,1,1,1,1,1,1,1 +2021,1,0,All Sexes,A08,65-99,8539439,8359940,559264,733980,106451,106091,63866,57786,170604,163792,422040,601223,1,1,1,1,1,1,1,1,1,1,1,1 +2021,1,1,Male,A00,All Ages (14-99),64215046,64413558,6296219,5968322,2051502,2045495,1007163,1062057,3062503,3106317,3929277,3729371,1,1,1,1,1,1,1,1,1,1,1,1 +2021,1,1,Male,A01,14-18,1443844,1609379,484416,308327,81043,80545,49187,72868,130364,153547,387028,221107,1,1,1,1,1,1,1,1,1,1,1,1 +2021,1,1,Male,A02,19-21,2656006,2695011,658055,600684,201995,201158,105821,150163,308140,351258,424248,383186,1,1,1,1,1,1,1,1,1,1,1,1 +2021,1,1,Male,A03,22-24,3351197,3402225,638509,569649,223866,223276,107892,120684,332106,343730,382616,330751,1,1,1,1,1,1,1,1,1,1,1,1 +2021,1,1,Male,A04,25-34,13935251,13972142,1631405,1556520,628593,627277,277774,292519,907293,919298,920839,882701,1,1,1,1,1,1,1,1,1,1,1,1 +2021,1,1,Male,A05,35-44,14173319,14208958,1143564,1084715,409308,408251,190545,182888,600679,590874,673196,638014,1,1,1,1,1,1,1,1,1,1,1,1 +2021,1,1,Male,A06,45-54,13044679,13081323,845387,795058,280344,279486,142532,127712,423590,407022,520008,484896,1,1,1,1,1,1,1,1,1,1,1,1 +2021,1,1,Male,A07,55-64,11136173,11064585,598085,664171,168739,168092,98000,83293,267159,251289,397812,470708,1,1,1,1,1,1,1,1,1,1,1,1 +2021,1,1,Male,A08,65-99,4474577,4379935,296798,389197,57614,57409,35412,31929,93173,89301,223531,318007,1,1,1,1,1,1,1,1,1,1,1,1 +2021,1,2,Female,A00,All Ages (14-99),63165968,63352163,6064813,5674624,1940907,1934046,885880,960705,2830944,2893414,3704512,3510709,1,1,1,1,1,1,1,1,1,1,1,1 +2021,1,2,Female,A01,14-18,1737030,1925252,564878,359388,112282,111268,61612,90122,174010,201511,426688,238508,1,1,1,1,1,1,1,1,1,1,1,1 +2021,1,2,Female,A02,19-21,2855178,2882366,696972,641126,225841,224218,106990,157046,333159,381109,421537,392866,1,1,1,1,1,1,1,1,1,1,1,1 +2021,1,2,Female,A03,22-24,3489789,3527924,646860,579050,232843,232106,102534,112888,335790,344685,364930,325545,1,1,1,1,1,1,1,1,1,1,1,1 +2021,1,2,Female,A04,25-34,13561345,13557341,1499392,1448239,561946,560597,231644,245986,794753,806125,830899,832067,1,1,1,1,1,1,1,1,1,1,1,1 +2021,1,2,Female,A05,35-44,13633652,13672795,1056133,980728,359371,358676,156189,154530,516409,513007,619160,578169,1,1,1,1,1,1,1,1,1,1,1,1 +2021,1,2,Female,A06,45-54,12850191,12892757,796693,729914,255907,255257,119052,107936,375691,363007,482119,439476,1,1,1,1,1,1,1,1,1,1,1,1 +2021,1,2,Female,A07,55-64,10973922,10913722,541418,591398,143880,143243,79405,66339,223701,209477,360670,420861,1,1,1,1,1,1,1,1,1,1,1,1 +2021,1,2,Female,A08,65-99,4064861,3980005,262466,344783,48837,48682,28454,25857,77431,74492,198509,283216,1,1,1,1,1,1,1,1,1,1,1,1 +2021,2,0,All Sexes,A00,All Ages (14-99),127842961,130559363,17300416,14089591,5600639,5590967,2028538,2387622,7632240,7997357,10819920,8078918,1,1,1,1,1,1,1,1,1,1,1,1 +2021,2,0,All Sexes,A01,14-18,3158837,4452240,2202627,897154,344373,343552,137926,169414,482339,513476,1786189,541686,1,1,1,1,1,1,1,1,1,1,1,1 +2021,2,0,All Sexes,A02,19-21,5487667,6321848,2367744,1448122,663308,661950,312545,279981,975182,943956,1566597,753835,1,1,1,1,1,1,1,1,1,1,1,1 +2021,2,0,All Sexes,A03,22-24,6836584,7082817,1752408,1448301,657243,656575,240330,296357,897917,954981,1001566,754577,1,1,1,1,1,1,1,1,1,1,1,1 +2021,2,0,All Sexes,A04,25-34,27466997,27670122,3949393,3626745,1620620,1618680,545859,668158,2167915,2292566,2128167,1904553,1,1,1,1,1,1,1,1,1,1,1,1 +2021,2,0,All Sexes,A05,35-44,27948406,28097685,2716660,2480012,1030051,1028183,341654,425278,1372649,1457160,1539484,1366980,1,1,1,1,1,1,1,1,1,1,1,1 +2021,2,0,All Sexes,A06,45-54,26002452,26134545,2019808,1820609,712649,711376,237589,294083,950951,1008097,1194634,1040835,1,1,1,1,1,1,1,1,1,1,1,1 +2021,2,0,All Sexes,A07,55-64,22235604,22166698,1460910,1483800,420933,419575,152996,183818,574220,605024,963332,1010397,1,1,1,1,1,1,1,1,1,1,1,1 +2021,2,0,All Sexes,A08,65-99,8706414,8633407,830866,884849,151461,151076,59640,70533,211068,222096,639950,706055,1,1,1,1,1,1,1,1,1,1,1,1 +2021,2,1,Male,A00,All Ages (14-99),64471734,66134834,8980240,7081161,2888613,2885745,1064780,1182814,3953467,4078140,5699758,4017334,1,1,1,1,1,1,1,1,1,1,1,1 +2021,2,1,Male,A01,14-18,1429225,2064013,1056164,419614,152813,152540,61035,77771,213828,230514,873078,262844,1,1,1,1,1,1,1,1,1,1,1,1 +2021,2,1,Male,A02,19-21,2646352,3085893,1166637,695648,314332,314056,151935,133829,465738,448861,797301,369538,1,1,1,1,1,1,1,1,1,1,1,1 +2021,2,1,Male,A03,22-24,3351716,3523347,896039,699431,323908,323868,123511,140379,447334,465217,532745,361707,1,1,1,1,1,1,1,1,1,1,1,1 +2021,2,1,Male,A04,25-34,13931887,14122189,2107495,1857755,862662,862163,296318,340361,1159304,1205542,1153329,951633,1,1,1,1,1,1,1,1,1,1,1,1 +2021,2,1,Male,A05,35-44,14254638,14371905,1443764,1280545,553069,552390,185325,214450,738641,768833,823523,691179,1,1,1,1,1,1,1,1,1,1,1,1 +2021,2,1,Male,A06,45-54,13102007,13204122,1060736,922863,372912,372529,128536,145693,501585,519531,637015,520621,1,1,1,1,1,1,1,1,1,1,1,1 +2021,2,1,Male,A07,55-64,11198312,11207950,787491,751919,226327,225792,85142,93420,311499,320063,524865,502281,1,1,1,1,1,1,1,1,1,1,1,1 +2021,2,1,Male,A08,65-99,4557596,4555414,461915,453386,82591,82406,32977,36911,115539,119579,357902,357531,1,1,1,1,1,1,1,1,1,1,1,1 +2021,2,2,Female,A00,All Ages (14-99),63371227,64424529,8320175,7008430,2712026,2705222,963758,1204808,3678773,3919217,5120162,4061584,1,1,1,1,1,1,1,1,1,1,1,1 +2021,2,2,Female,A01,14-18,1729611,2388227,1146464,477540,191561,191011,76891,91643,268512,282963,913111,278842,1,1,1,1,1,1,1,1,1,1,1,1 +2021,2,2,Female,A02,19-21,2841314,3235954,1201107,752473,348977,347894,160609,146152,509444,495094,769295,384297,1,1,1,1,1,1,1,1,1,1,1,1 +2021,2,2,Female,A03,22-24,3484868,3559470,856368,748870,333335,332708,116818,155978,450583,489764,468822,392870,1,1,1,1,1,1,1,1,1,1,1,1 +2021,2,2,Female,A04,25-34,13535111,13547932,1841898,1768990,757958,756517,249542,327797,1008611,1087024,974838,952920,1,1,1,1,1,1,1,1,1,1,1,1 +2021,2,2,Female,A05,35-44,13693767,13725780,1272896,1199467,476983,475792,156329,210828,634008,688327,715962,675801,1,1,1,1,1,1,1,1,1,1,1,1 +2021,2,2,Female,A06,45-54,12900445,12930423,959072,897746,339737,338847,109052,148390,449366,488567,557619,520214,1,1,1,1,1,1,1,1,1,1,1,1 +2021,2,2,Female,A07,55-64,11037293,10958749,673419,731880,194607,193783,67854,90398,262721,284961,438467,508116,1,1,1,1,1,1,1,1,1,1,1,1 +2021,2,2,Female,A08,65-99,4148818,4077993,368952,431462,68869,68670,26662,33622,95528,102517,282048,348524,1,1,1,1,1,1,1,1,1,1,1,1 +2021,3,0,All Sexes,A00,All Ages (14-99),130718970,131813286,17655390,16168978,6294209,6283946,2391035,2407268,8692675,8707152,10431137,9342121,1,1,1,1,1,1,1,1,1,1,1,1 +2021,3,0,All Sexes,A01,14-18,3971993,4096469,1696500,1550505,363579,363296,145799,234184,510159,597497,1285974,1153966,1,1,1,1,1,1,1,1,1,1,1,1 +2021,3,0,All Sexes,A02,19-21,6256658,5880078,1797912,2154162,680160,678589,276860,336787,957746,1016844,1032168,1390257,1,1,1,1,1,1,1,1,1,1,1,1 +2021,3,0,All Sexes,A03,22-24,7013675,7249489,1899994,1614997,721777,722360,300923,276525,1023216,1000740,1078300,842397,1,1,1,1,1,1,1,1,1,1,1,1 +2021,3,0,All Sexes,A04,25-34,27624319,28145423,4528533,3885460,1861055,1859028,678344,637066,2541647,2501361,2419295,1908179,1,1,1,1,1,1,1,1,1,1,1,1 +2021,3,0,All Sexes,A05,35-44,28173415,28589576,3145275,2645755,1201023,1198409,430341,402373,1632888,1604120,1759263,1354825,1,1,1,1,1,1,1,1,1,1,1,1 +2021,3,0,All Sexes,A06,45-54,26199206,26475659,2250554,1918468,819699,817531,297219,275496,1117932,1095429,1294454,1026567,1,1,1,1,1,1,1,1,1,1,1,1 +2021,3,0,All Sexes,A07,55-64,22438664,22439651,1541253,1510820,478155,476393,188274,174867,666895,652509,974234,976207,1,1,1,1,1,1,1,1,1,1,1,1 +2021,3,0,All Sexes,A08,65-99,9041040,8936940,795369,888811,168761,168339,73275,69970,242191,238651,587448,689724,1,1,1,1,1,1,1,1,1,1,1,1 +2021,3,1,Male,A00,All Ages (14-99),66222016,66692051,8697599,8064816,3128961,3124342,1185014,1199836,4316821,4330582,5170520,4702952,1,1,1,1,1,1,1,1,1,1,1,1 +2021,3,1,Male,A01,14-18,1835648,1895506,797124,728132,156813,156749,66172,103977,223276,260703,621229,557764,1,1,1,1,1,1,1,1,1,1,1,1 +2021,3,1,Male,A02,19-21,3043234,2851446,861535,1042913,316221,315662,133266,159381,449675,475646,511486,693632,1,1,1,1,1,1,1,1,1,1,1,1 +2021,3,1,Male,A03,22-24,3486381,3592548,908977,784754,341430,341637,141582,135651,483169,477974,528319,421663,1,1,1,1,1,1,1,1,1,1,1,1 +2021,3,1,Male,A04,25-34,14088966,14352699,2277091,1961719,951895,951288,345152,327147,1297975,1280631,1218204,958920,1,1,1,1,1,1,1,1,1,1,1,1 +2021,3,1,Male,A05,35-44,14421045,14594573,1560100,1352488,615115,613614,217350,207024,833083,821977,864903,697270,1,1,1,1,1,1,1,1,1,1,1,1 +2021,3,1,Male,A06,45-54,13237863,13354969,1104417,965857,410802,409842,147404,139337,558589,550102,635221,522854,1,1,1,1,1,1,1,1,1,1,1,1 +2021,3,1,Male,A07,55-64,11344936,11343730,776172,764895,246595,245691,95724,90292,342522,336483,489278,492547,1,1,1,1,1,1,1,1,1,1,1,1 +2021,3,1,Male,A08,65-99,4763942,4706580,412182,464058,90089,89860,38365,37027,128532,127066,301880,358302,1,1,1,1,1,1,1,1,1,1,1,1 +2021,3,2,Female,A00,All Ages (14-99),64496954,65121235,8957792,8104163,3165248,3159604,1206021,1207432,4375854,4376570,5260616,4639169,1,1,1,1,1,1,1,1,1,1,1,1 +2021,3,2,Female,A01,14-18,2136345,2200964,899375,822373,206766,206547,79627,130207,286883,336795,664745,596202,1,1,1,1,1,1,1,1,1,1,1,1 +2021,3,2,Female,A02,19-21,3213424,3028632,936377,1111250,363939,362928,143595,177406,508071,541198,520682,696625,1,1,1,1,1,1,1,1,1,1,1,1 +2021,3,2,Female,A03,22-24,3527294,3656941,991018,830243,380347,380723,159341,140875,540047,522766,549981,420734,1,1,1,1,1,1,1,1,1,1,1,1 +2021,3,2,Female,A04,25-34,13535354,13792724,2251442,1923741,909160,907741,333192,309919,1243672,1220731,1201092,949259,1,1,1,1,1,1,1,1,1,1,1,1 +2021,3,2,Female,A05,35-44,13752370,13995003,1585175,1293267,585908,584795,212991,195350,799806,782143,894360,657554,1,1,1,1,1,1,1,1,1,1,1,1 +2021,3,2,Female,A06,45-54,12961343,13120690,1146137,952611,408897,407690,149815,136159,559343,545327,659233,503713,1,1,1,1,1,1,1,1,1,1,1,1 +2021,3,2,Female,A07,55-64,11093727,11095921,765081,745926,231560,230702,92550,84575,324373,316026,484956,483660,1,1,1,1,1,1,1,1,1,1,1,1 +2021,3,2,Female,A08,65-99,4277098,4230360,383187,424752,78673,78478,34910,32943,113659,111585,285568,331422,1,1,1,1,1,1,1,1,1,1,1,1 +2021,4,0,All Sexes,A00,All Ages (14-99),131968986,132604218,16324361,15369903,5881669,5873949,2407313,2436695,8296649,8331378,9653107,8985882,1,1,1,1,1,1,1,1,1,1,1,1 +2021,4,0,All Sexes,A01,14-18,3702984,4031492,1384956,1036107,307831,307401,205854,165413,514173,474099,1035217,706922,1,1,1,1,1,1,1,1,1,1,1,1 +2021,4,0,All Sexes,A02,19-21,5759090,5921179,1646128,1447449,578896,578609,339188,260508,918680,841143,989943,824809,1,1,1,1,1,1,1,1,1,1,1,1 +2021,4,0,All Sexes,A03,22-24,7146253,7315884,1634143,1425386,640832,640915,281018,261796,922563,905016,914426,741830,1,1,1,1,1,1,1,1,1,1,1,1 +2021,4,0,All Sexes,A04,25-34,28115495,28423033,4268610,3866923,1763065,1761389,645755,658511,2411100,2426101,2299007,1987844,1,1,1,1,1,1,1,1,1,1,1,1 +2021,4,0,All Sexes,A05,35-44,28639310,28814565,3008310,2771262,1159581,1156789,406390,453874,1567505,1614619,1690598,1515099,1,1,1,1,1,1,1,1,1,1,1,1 +2021,4,0,All Sexes,A06,45-54,26551121,26568415,2137497,2080859,794877,793249,278161,332854,1074163,1128877,1226938,1206041,1,1,1,1,1,1,1,1,1,1,1,1 +2021,4,0,All Sexes,A07,55-64,22716839,22474887,1469432,1692631,469963,469047,178647,220434,649311,691146,924072,1157361,1,1,1,1,1,1,1,1,1,1,1,1 +2021,4,0,All Sexes,A08,65-99,9337893,9054763,775285,1049286,166625,166551,72300,83304,239153,250377,572906,845976,1,1,1,1,1,1,1,1,1,1,1,1 +2021,4,1,Male,A00,All Ages (14-99),66747716,66723773,8010426,7920889,2946007,2943922,1199857,1271820,4148934,4225934,4741538,4741527,1,1,1,1,1,1,1,1,1,1,1,1 +2021,4,1,Male,A01,14-18,1706079,1858357,647768,487655,134133,134028,90958,75475,225282,210023,497484,344492,1,1,1,1,1,1,1,1,1,1,1,1 +2021,4,1,Male,A02,19-21,2789578,2860253,791591,707422,273961,274046,159769,128746,433941,403665,488462,415479,1,1,1,1,1,1,1,1,1,1,1,1 +2021,4,1,Male,A03,22-24,3533893,3603668,796417,712633,311559,311785,137430,133725,449234,446560,454541,382786,1,1,1,1,1,1,1,1,1,1,1,1 +2021,4,1,Male,A04,25-34,14323837,14417574,2139188,2009775,905820,905616,331192,350592,1237948,1259354,1148030,1050581,1,1,1,1,1,1,1,1,1,1,1,1 +2021,4,1,Male,A05,35-44,14620384,14625917,1480387,1454381,594180,593247,209330,242857,804175,838122,821288,814283,1,1,1,1,1,1,1,1,1,1,1,1 +2021,4,1,Male,A06,45-54,13387650,13332914,1034498,1077642,396045,395422,140627,175420,537110,572243,591742,644200,1,1,1,1,1,1,1,1,1,1,1,1 +2021,4,1,Male,A07,55-64,11476653,11306093,727838,892554,240933,240427,92262,119100,333467,360411,454432,620226,1,1,1,1,1,1,1,1,1,1,1,1 +2021,4,1,Male,A08,65-99,4909642,4718997,392739,578827,89377,89353,38289,45905,127777,135556,285558,469480,1,1,1,1,1,1,1,1,1,1,1,1 +2021,4,2,Female,A00,All Ages (14-99),65221270,65880446,8313935,7449014,2935661,2930027,1207456,1164876,4147714,4105444,4911569,4244355,1,1,1,1,1,1,1,1,1,1,1,1 +2021,4,2,Female,A01,14-18,1996905,2173135,737188,548452,173698,173373,114896,89938,288891,264076,537733,362429,1,1,1,1,1,1,1,1,1,1,1,1 +2021,4,2,Female,A02,19-21,2969512,3060927,854537,740028,304935,304563,179419,131762,484739,437479,501481,409330,1,1,1,1,1,1,1,1,1,1,1,1 +2021,4,2,Female,A03,22-24,3612360,3712216,837726,712753,329273,329130,143588,128071,473330,458456,459885,359044,1,1,1,1,1,1,1,1,1,1,1,1 +2021,4,2,Female,A04,25-34,13791658,14005459,2129422,1857148,857245,855774,314563,307919,1173152,1166747,1150977,937264,1,1,1,1,1,1,1,1,1,1,1,1 +2021,4,2,Female,A05,35-44,14018926,14188648,1527923,1316880,565401,563543,197059,211017,763330,776497,869310,700816,1,1,1,1,1,1,1,1,1,1,1,1 +2021,4,2,Female,A06,45-54,13163471,13235501,1102999,1003217,398832,397827,137534,157434,537052,556634,635197,561841,1,1,1,1,1,1,1,1,1,1,1,1 +2021,4,2,Female,A07,55-64,11240186,11168795,741594,800078,229030,228620,86385,101335,315844,330735,469639,537135,1,1,1,1,1,1,1,1,1,1,1,1 +2021,4,2,Female,A08,65-99,4428251,4335766,382546,470459,77248,77198,34011,37399,111377,114820,287348,376497,1,1,1,1,1,1,1,1,1,1,1,1 +2022,1,0,All Sexes,A00,All Ages (14-99),132651228,133822061,14897560,13334803,5175185,5165729,2439446,2387504,7617435,7563258,8872724,7721196,1,1,1,1,1,1,1,1,1,1,1,1 +2022,1,0,All Sexes,A01,14-18,3639196,4011359,1193000,796416,233227,232458,146916,181710,380021,414708,918742,548723,1,1,1,1,1,1,1,1,1,1,1,1 +2022,1,0,All Sexes,A02,19-21,5798745,5962410,1503268,1292369,489748,488447,257527,312993,747387,802491,929612,766802,1,1,1,1,1,1,1,1,1,1,1,1 +2022,1,0,All Sexes,A03,22-24,7231092,7398360,1487410,1270606,556586,555978,264319,263503,821177,820437,842315,676238,1,1,1,1,1,1,1,1,1,1,1,1 +2022,1,0,All Sexes,A04,25-34,28367845,28660877,3869098,3463986,1561730,1559548,665427,650461,2228184,2213134,2082927,1794757,1,1,1,1,1,1,1,1,1,1,1,1 +2022,1,0,All Sexes,A05,35-44,28826624,29097640,2785460,2435913,1040352,1038720,458108,421866,1499080,1462608,1574246,1307570,1,1,1,1,1,1,1,1,1,1,1,1 +2022,1,0,All Sexes,A06,45-54,26641170,26818381,2005984,1778909,717892,716349,335733,292239,1054099,1009986,1163441,990700,1,1,1,1,1,1,1,1,1,1,1,1 +2022,1,0,All Sexes,A07,55-64,22714916,22625706,1364835,1431554,425155,424151,224981,188324,650483,613216,859940,950883,1,1,1,1,1,1,1,1,1,1,1,1 +2022,1,0,All Sexes,A08,65-99,9431639,9247327,688505,865050,150493,150078,86436,76408,237004,226678,501502,685523,1,1,1,1,1,1,1,1,1,1,1,1 +2022,1,1,Male,A00,All Ages (14-99),66746809,67363713,7526034,6748241,2629819,2625817,1273540,1231528,3905079,3862849,4532839,3924773,1,1,1,1,1,1,1,1,1,1,1,1 +2022,1,1,Male,A01,14-18,1668416,1855620,567533,371266,102055,101834,66253,83526,168308,185616,449403,263269,1,1,1,1,1,1,1,1,1,1,1,1 +2022,1,1,Male,A02,19-21,2798536,2891108,735533,625495,234614,234253,127378,153535,362133,388345,468544,376553,1,1,1,1,1,1,1,1,1,1,1,1 +2022,1,1,Male,A03,22-24,3555386,3652627,741773,624928,272262,272006,134468,134646,406917,407199,433495,337061,1,1,1,1,1,1,1,1,1,1,1,1 +2022,1,1,Male,A04,25-34,14380684,14546621,1983771,1771009,812863,811944,353791,343118,1167255,1156816,1074482,910995,1,1,1,1,1,1,1,1,1,1,1,1 +2022,1,1,Male,A05,35-44,14639372,14768385,1420374,1258622,542198,541439,245369,221934,787893,764533,803950,676942,1,1,1,1,1,1,1,1,1,1,1,1 +2022,1,1,Male,A06,45-54,13368886,13454655,1011050,904665,364550,363828,177076,151978,541864,516524,593092,508783,1,1,1,1,1,1,1,1,1,1,1,1 +2022,1,1,Male,A07,55-64,11425176,11380078,703819,738602,220890,220347,121553,101209,342625,321960,446568,492298,1,1,1,1,1,1,1,1,1,1,1,1 +2022,1,1,Male,A08,65-99,4910354,4814620,362180,453653,80387,80167,47652,41582,128083,121857,263303,358870,1,1,1,1,1,1,1,1,1,1,1,1 +2022,1,2,Female,A00,All Ages (14-99),65904419,66458348,7371526,6586563,2545366,2539912,1165906,1155975,3712356,3700409,4339885,3796424,1,1,1,1,1,1,1,1,1,1,1,1 +2022,1,2,Female,A01,14-18,1970780,2155739,625467,425150,131172,130624,80663,98184,211713,229092,469340,285454,1,1,1,1,1,1,1,1,1,1,1,1 +2022,1,2,Female,A02,19-21,3000210,3071302,767735,666875,255134,254195,130149,159458,385254,414146,461067,390248,1,1,1,1,1,1,1,1,1,1,1,1 +2022,1,2,Female,A03,22-24,3675706,3745733,745637,645678,284325,283972,129850,128856,414260,413238,408820,339177,1,1,1,1,1,1,1,1,1,1,1,1 +2022,1,2,Female,A04,25-34,13987161,14114257,1885327,1692977,748867,747604,311636,307343,1060929,1056318,1008444,883762,1,1,1,1,1,1,1,1,1,1,1,1 +2022,1,2,Female,A05,35-44,14187252,14329255,1365085,1177291,498155,497281,212739,199931,711187,698075,770295,630627,1,1,1,1,1,1,1,1,1,1,1,1 +2022,1,2,Female,A06,45-54,13272284,13363727,994934,874244,353342,352521,158657,140261,512235,493462,570349,481916,1,1,1,1,1,1,1,1,1,1,1,1 +2022,1,2,Female,A07,55-64,11289741,11245628,661015,692952,204265,203804,103428,87115,307857,291257,413371,458585,1,1,1,1,1,1,1,1,1,1,1,1 +2022,1,2,Female,A08,65-99,4521286,4432707,326325,411396,70107,69911,38784,34826,108921,104821,238198,326653,1,1,1,1,1,1,1,1,1,1,1,1 +2022,2,0,All Sexes,A00,All Ages (14-99),133835854,136314320,18154246,15144139,6124457,6110106,2391224,2660300,8516256,8783916,11037658,8542866,1,1,1,1,1,1,1,1,1,1,1,1 +2022,2,0,All Sexes,A01,14-18,3592295,4730639,2113398,952557,329362,328348,156963,187471,486193,515362,1704501,608419,1,1,1,1,1,1,1,1,1,1,1,1 +2022,2,0,All Sexes,A02,19-21,5867952,6717542,2390181,1444750,647350,645762,316378,289949,963058,936155,1588955,763270,1,1,1,1,1,1,1,1,1,1,1,1 +2022,2,0,All Sexes,A03,22-24,7288261,7530792,1796987,1495564,677682,676696,267560,317213,945306,994953,1018223,777140,1,1,1,1,1,1,1,1,1,1,1,1 +2022,2,0,All Sexes,A04,25-34,28598717,28877931,4278573,3872770,1786902,1783409,658404,741970,2445980,2530023,2264328,1970052,1,1,1,1,1,1,1,1,1,1,1,1 +2022,2,0,All Sexes,A05,35-44,29125444,29290293,3023136,2761368,1191645,1188815,426162,489664,1618208,1681809,1657692,1472438,1,1,1,1,1,1,1,1,1,1,1,1 +2022,2,0,All Sexes,A06,45-54,26884255,26964577,2167741,2018699,819433,817535,294776,336226,1114472,1156288,1220889,1120500,1,1,1,1,1,1,1,1,1,1,1,1 +2022,2,0,All Sexes,A07,55-64,22849464,22708762,1512431,1608930,489365,487505,192029,210639,681461,699737,938458,1058283,1,1,1,1,1,1,1,1,1,1,1,1 +2022,2,0,All Sexes,A08,65-99,9629468,9493784,871799,989501,182720,182037,78952,87166,261578,269590,644612,772765,1,1,1,1,1,1,1,1,1,1,1,1 +2022,2,1,Male,A00,All Ages (14-99),67393522,68970383,9401452,7574885,3163140,3157956,1234061,1304599,4397300,4469275,5803894,4211488,1,1,1,1,1,1,1,1,1,1,1,1 +2022,2,1,Male,A01,14-18,1653266,2231756,1040266,455069,153652,153267,71702,87339,225233,240437,852464,295624,1,1,1,1,1,1,1,1,1,1,1,1 +2022,2,1,Male,A02,19-21,2841975,3300903,1192875,697970,313018,312532,154558,138880,467178,451719,818153,372303,1,1,1,1,1,1,1,1,1,1,1,1 +2022,2,1,Male,A03,22-24,3591901,3765043,925670,726049,338493,338311,136603,149885,475049,488714,543667,371845,1,1,1,1,1,1,1,1,1,1,1,1 +2022,2,1,Male,A04,25-34,14510466,14727162,2252395,1973882,947605,946480,347244,371972,1295164,1320721,1203773,977790,1,1,1,1,1,1,1,1,1,1,1,1 +2022,2,1,Male,A05,35-44,14795109,14920814,1581988,1407432,630994,629922,224395,242441,855622,873988,874204,734570,1,1,1,1,1,1,1,1,1,1,1,1 +2022,2,1,Male,A06,45-54,13493358,13570733,1120013,1007039,422238,421482,153305,163202,575669,585877,642489,551700,1,1,1,1,1,1,1,1,1,1,1,1 +2022,2,1,Male,A07,55-64,11497625,11473464,805040,804782,258481,257634,103212,105779,361734,364184,508024,520026,1,1,1,1,1,1,1,1,1,1,1,1 +2022,2,1,Male,A08,65-99,5009822,4980508,483206,502662,98659,98328,43042,45100,141651,143634,361121,387630,1,1,1,1,1,1,1,1,1,1,1,1 +2022,2,2,Female,A00,All Ages (14-99),66442332,67343937,8752793,7569254,2961317,2952150,1157163,1355701,4118956,4314641,5233763,4331379,1,1,1,1,1,1,1,1,1,1,1,1 +2022,2,2,Female,A01,14-18,1939029,2498883,1073132,497487,175710,175081,85261,100132,260960,274925,852037,312795,1,1,1,1,1,1,1,1,1,1,1,1 +2022,2,2,Female,A02,19-21,3025976,3416639,1197306,746780,334332,333229,161821,151069,495880,484435,770802,390968,1,1,1,1,1,1,1,1,1,1,1,1 +2022,2,2,Female,A03,22-24,3696360,3765749,871317,769515,339189,338385,130958,167328,470257,506239,474556,405295,1,1,1,1,1,1,1,1,1,1,1,1 +2022,2,2,Female,A04,25-34,14088250,14150769,2026178,1898888,839297,836929,311160,369998,1150816,1209301,1060555,992262,1,1,1,1,1,1,1,1,1,1,1,1 +2022,2,2,Female,A05,35-44,14330335,14369479,1441148,1353936,560651,558894,201767,247223,762587,807821,783488,737868,1,1,1,1,1,1,1,1,1,1,1,1 +2022,2,2,Female,A06,45-54,13390897,13393844,1047728,1011661,397195,396053,141471,173024,538803,570411,578400,568799,1,1,1,1,1,1,1,1,1,1,1,1 +2022,2,2,Female,A07,55-64,11351839,11235298,707391,804148,230883,229870,88817,104860,319726,335553,430434,538257,1,1,1,1,1,1,1,1,1,1,1,1 +2022,2,2,Female,A08,65-99,4619646,4513276,388592,486839,84060,83709,35909,42066,119927,125956,283491,385135,1,1,1,1,1,1,1,1,1,1,1,1 +2022,3,0,All Sexes,A00,All Ages (14-99),136361150,136941015,17721873,16797094,6639483,6630891,2661435,2432797,9303317,9077269,10159070,9588436,1,1,1,1,1,1,1,1,1,1,1,1 +2022,3,0,All Sexes,A01,14-18,4204615,4280774,1653253,1554276,344519,343818,162615,221759,506539,565719,1263066,1175686,1,1,1,1,1,1,1,1,1,1,1,1 +2022,3,0,All Sexes,A02,19-21,6642856,6216964,1758616,2178766,677652,675703,286161,326462,963513,1002835,996682,1406980,1,1,1,1,1,1,1,1,1,1,1,1 +2022,3,0,All Sexes,A03,22-24,7451396,7632045,1879974,1657589,733694,734498,321742,271445,1055426,1007379,1049481,869161,1,1,1,1,1,1,1,1,1,1,1,1 +2022,3,0,All Sexes,A04,25-34,28820354,29252772,4583198,4038522,1961217,1959586,751094,643980,2713699,2608250,2376065,1955461,1,1,1,1,1,1,1,1,1,1,1,1 +2022,3,0,All Sexes,A05,35-44,29314858,29664566,3255028,2823789,1315622,1313890,494240,419872,1810864,1736891,1749645,1411333,1,1,1,1,1,1,1,1,1,1,1,1 +2022,3,0,All Sexes,A06,45-54,27050899,27236592,2266881,2030049,891419,889696,339731,287479,1231830,1179385,1240197,1062689,1,1,1,1,1,1,1,1,1,1,1,1 +2022,3,0,All Sexes,A07,55-64,22958086,22877102,1500515,1558636,519478,518270,215432,184118,735170,703438,895844,981094,1,1,1,1,1,1,1,1,1,1,1,1 +2022,3,0,All Sexes,A08,65-99,9918085,9780202,824408,955467,195881,195431,90419,77683,286277,273372,588090,726033,1,1,1,1,1,1,1,1,1,1,1,1 +2022,3,1,Male,A00,All Ages (14-99),68998603,69128329,8711003,8443229,3311422,3305452,1306153,1225587,4618326,4537386,5012034,4884964,1,1,1,1,1,1,1,1,1,1,1,1 +2022,3,1,Male,A01,14-18,1979356,2009810,787356,747004,154680,154457,75086,101068,229500,255533,613924,577654,1,1,1,1,1,1,1,1,1,1,1,1 +2022,3,1,Male,A02,19-21,3254614,3033493,851948,1069143,321213,320405,138529,157534,459576,478177,498194,710796,1,1,1,1,1,1,1,1,1,1,1,1 +2022,3,1,Male,A03,22-24,3722243,3794046,903948,818115,352214,352303,151161,135399,503305,488297,514207,442301,1,1,1,1,1,1,1,1,1,1,1,1 +2022,3,1,Male,A04,25-34,14690674,14873887,2278696,2048620,1000562,999036,376286,333808,1377351,1335121,1173658,995902,1,1,1,1,1,1,1,1,1,1,1,1 +2022,3,1,Male,A05,35-44,14942940,15069914,1603767,1444721,669328,668054,245231,216373,914969,885930,854191,732415,1,1,1,1,1,1,1,1,1,1,1,1 +2022,3,1,Male,A06,45-54,13613897,13677528,1105097,1022742,442886,441686,164785,145257,607928,588002,606057,546460,1,1,1,1,1,1,1,1,1,1,1,1 +2022,3,1,Male,A07,55-64,11598582,11550359,754153,793041,266511,265790,108282,95176,374901,361485,450102,500555,1,1,1,1,1,1,1,1,1,1,1,1 +2022,3,1,Male,A08,65-99,5196296,5119293,426039,499843,104029,103721,46792,40973,150795,144840,301700,378880,1,1,1,1,1,1,1,1,1,1,1,1 +2022,3,2,Female,A00,All Ages (14-99),67362548,67812686,9010870,8353865,3328061,3325439,1355282,1207210,4684991,4539883,5147036,4703472,1,1,1,1,1,1,1,1,1,1,1,1 +2022,3,2,Female,A01,14-18,2225259,2270964,865897,807272,189839,189361,87529,120691,277039,310186,649142,598032,1,1,1,1,1,1,1,1,1,1,1,1 +2022,3,2,Female,A02,19-21,3388242,3183470,906668,1109623,356439,355298,147631,168928,503936,524658,498487,696183,1,1,1,1,1,1,1,1,1,1,1,1 +2022,3,2,Female,A03,22-24,3729153,3837999,976025,839474,381480,382194,170581,136046,552121,519082,535275,426860,1,1,1,1,1,1,1,1,1,1,1,1 +2022,3,2,Female,A04,25-34,14129679,14378886,2304502,1989902,960655,960551,374809,310172,1336348,1273129,1202407,959559,1,1,1,1,1,1,1,1,1,1,1,1 +2022,3,2,Female,A05,35-44,14371919,14594651,1651261,1379068,646294,645836,249008,203499,895895,850961,895454,678918,1,1,1,1,1,1,1,1,1,1,1,1 +2022,3,2,Female,A06,45-54,13437001,13559064,1161784,1007307,448534,448010,174946,142222,623902,591383,634140,516229,1,1,1,1,1,1,1,1,1,1,1,1 +2022,3,2,Female,A07,55-64,11359504,11326743,746362,765595,252967,252479,107150,88942,360269,341952,445742,480538,1,1,1,1,1,1,1,1,1,1,1,1 +2022,3,2,Female,A08,65-99,4721790,4660908,398370,455624,91852,91710,43627,36711,135481,128532,286389,347153,1,1,1,1,1,1,1,1,1,1,1,1 +2022,4,0,All Sexes,A00,All Ages (14-99),136975593,136725995,14627073,14648900,5211592,5208734,2429033,2400428,7646685,7610763,8634782,8892923,1,1,1,1,1,1,1,1,1,1,1,1 +2022,4,0,All Sexes,A01,14-18,3867361,4179301,1287768,949218,265510,265465,194147,152061,459803,416689,976873,661198,1,1,1,1,1,1,1,1,1,1,1,1 +2022,4,0,All Sexes,A02,19-21,6065428,6176097,1492608,1342753,507608,507446,327436,250078,835538,756726,904690,790279,1,1,1,1,1,1,1,1,1,1,1,1 +2022,4,0,All Sexes,A03,22-24,7539775,7605367,1436529,1335435,557620,557945,275606,255110,833811,812911,801296,733347,1,1,1,1,1,1,1,1,1,1,1,1 +2022,4,0,All Sexes,A04,25-34,29179009,29202415,3739453,3646591,1540960,1540422,650451,650576,2193389,2191948,2001250,1980042,1,1,1,1,1,1,1,1,1,1,1,1 +2022,4,0,All Sexes,A05,35-44,29693843,29692496,2714589,2676764,1042012,1040890,423569,453080,1466848,1494830,1516780,1527291,1,1,1,1,1,1,1,1,1,1,1,1 +2022,4,0,All Sexes,A06,45-54,27318435,27208376,1909713,2002031,711194,710600,290268,329578,1002360,1041069,1085976,1203583,1,1,1,1,1,1,1,1,1,1,1,1 +2022,4,0,All Sexes,A07,55-64,23118101,22802786,1299841,1615451,422365,421783,187481,221290,610379,643668,803449,1123290,1,1,1,1,1,1,1,1,1,1,1,1 +2022,4,0,All Sexes,A08,65-99,10193640,9859157,746573,1080658,164324,164182,80075,88654,244556,252922,544468,873894,1,1,1,1,1,1,1,1,1,1,1,1 +2022,4,1,Male,A00,All Ages (14-99),69121306,68673557,7226217,7600809,2639460,2638206,1224995,1257553,3867119,3896517,4266136,4712225,1,1,1,1,1,1,1,1,1,1,1,1 +2022,4,1,Male,A01,14-18,1809244,1951697,609854,457145,119472,119540,88252,70628,207768,189803,472836,327943,1,1,1,1,1,1,1,1,1,1,1,1 +2022,4,1,Male,A02,19-21,2956320,2997374,723464,667030,245058,245095,157316,125414,402569,370152,448141,403970,1,1,1,1,1,1,1,1,1,1,1,1 +2022,4,1,Male,A03,22-24,3740572,3756323,705403,675968,274846,274929,137218,131881,412329,406724,399945,382461,1,1,1,1,1,1,1,1,1,1,1,1 +2022,4,1,Male,A04,25-34,14824735,14777867,1883310,1904316,798993,798895,337295,346750,1137171,1146084,1002452,1048518,1,1,1,1,1,1,1,1,1,1,1,1 +2022,4,1,Male,A05,35-44,15086744,15013899,1346173,1408899,536919,536469,218688,242301,756168,779127,745121,822118,1,1,1,1,1,1,1,1,1,1,1,1 +2022,4,1,Male,A06,45-54,13711573,13603250,935005,1041414,358097,357702,146940,173565,505441,531709,531096,643266,1,1,1,1,1,1,1,1,1,1,1,1 +2022,4,1,Male,A07,55-64,11664978,11460224,646521,855027,218258,217902,97024,118646,315510,336831,396487,603403,1,1,1,1,1,1,1,1,1,1,1,1 +2022,4,1,Male,A08,65-99,5327140,5112922,376487,591010,87817,87674,42262,48369,130162,136087,270059,480545,1,1,1,1,1,1,1,1,1,1,1,1 +2022,4,2,Female,A00,All Ages (14-99),67854286,68052439,7400856,7048091,2572132,2570528,1204038,1142875,3779566,3714245,4368646,4180699,1,1,1,1,1,1,1,1,1,1,1,1 +2022,4,2,Female,A01,14-18,2058117,2227604,677914,492073,146037,145925,105895,81433,252035,226886,504037,333254,1,1,1,1,1,1,1,1,1,1,1,1 +2022,4,2,Female,A02,19-21,3109108,3178724,769143,675723,262550,262351,170120,124664,432969,386573,456549,386309,1,1,1,1,1,1,1,1,1,1,1,1 +2022,4,2,Female,A03,22-24,3799203,3849044,731126,659467,282774,283016,138388,123230,421482,406187,401351,350887,1,1,1,1,1,1,1,1,1,1,1,1 +2022,4,2,Female,A04,25-34,14354274,14424548,1856143,1742275,741968,741528,313156,303827,1056218,1045864,998798,931524,1,1,1,1,1,1,1,1,1,1,1,1 +2022,4,2,Female,A05,35-44,14607100,14678597,1368416,1267865,505092,504422,204881,210779,710680,715703,771659,705173,1,1,1,1,1,1,1,1,1,1,1,1 +2022,4,2,Female,A06,45-54,13606862,13605126,974708,960616,353096,352898,143328,156013,496920,509360,554880,560316,1,1,1,1,1,1,1,1,1,1,1,1 +2022,4,2,Female,A07,55-64,11453123,11342561,653320,760424,204107,203881,90457,102643,294868,306836,406962,519887,1,1,1,1,1,1,1,1,1,1,1,1 +2022,4,2,Female,A08,65-99,4866500,4746235,370085,489648,76507,76508,37813,40286,114393,116835,274409,393348,1,1,1,1,1,1,1,1,1,1,1,1 +2023,1,0,All Sexes,A00,All Ages (14-99),136746613,137385499,14274016,13266327,4886661,4882196,2397975,2305247,7291302,7193561,8591094,7926731,1,1,1,1,1,1,1,1,1,1,1,1 +2023,1,0,All Sexes,A01,14-18,3777412,4142628,1171872,776856,223219,222590,134391,172807,357932,395139,902769,537651,1,1,1,1,1,1,1,1,1,1,1,1 +2023,1,0,All Sexes,A02,19-21,6052342,6218934,1478352,1259994,478897,478040,246677,297555,726000,775595,914525,745350,1,1,1,1,1,1,1,1,1,1,1,1 +2023,1,0,All Sexes,A03,22-24,7499688,7629265,1411649,1235002,525947,525858,256269,249181,782729,775471,803493,671686,1,1,1,1,1,1,1,1,1,1,1,1 +2023,1,0,All Sexes,A04,25-34,29134021,29263539,3606423,3381680,1435596,1434817,655752,625028,2093099,2062083,1972370,1836844,1,1,1,1,1,1,1,1,1,1,1,1 +2023,1,0,All Sexes,A05,35-44,29724476,29859881,2666418,2460848,980975,980261,456700,413269,1439119,1395239,1528332,1387282,1,1,1,1,1,1,1,1,1,1,1,1 +2023,1,0,All Sexes,A06,45-54,27280946,27347421,1922238,1810300,680413,679933,331757,285058,1013284,966177,1126818,1056327,1,1,1,1,1,1,1,1,1,1,1,1 +2023,1,0,All Sexes,A07,55-64,23029216,22882755,1309090,1433845,406304,405734,224727,183883,631836,590278,827752,970911,1,1,1,1,1,1,1,1,1,1,1,1 +2023,1,0,All Sexes,A08,65-99,10248511,10041074,707974,907803,155309,154963,91703,78467,247303,233580,515035,720678,1,1,1,1,1,1,1,1,1,1,1,1 +2023,1,1,Male,A00,All Ages (14-99),68675982,68976568,7232503,6785031,2502144,2499145,1257699,1202006,3763439,3704737,4395340,4081233,1,1,1,1,1,1,1,1,1,1,1,1 +2023,1,1,Male,A01,14-18,1755558,1934376,558052,367450,99321,99151,61747,81175,161177,180228,440655,261561,1,1,1,1,1,1,1,1,1,1,1,1 +2023,1,1,Male,A02,19-21,2935976,3025096,726141,616944,232977,232629,123952,147553,357119,380279,460471,369735,1,1,1,1,1,1,1,1,1,1,1,1 +2023,1,1,Male,A03,22-24,3697452,3773994,709664,613986,261348,261190,132124,129131,393694,390567,415366,337420,1,1,1,1,1,1,1,1,1,1,1,1 +2023,1,1,Male,A04,25-34,14733656,14815182,1857809,1736636,752483,751897,349557,331746,1103010,1084934,1020963,936318,1,1,1,1,1,1,1,1,1,1,1,1 +2023,1,1,Male,A05,35-44,15036608,15092117,1364447,1280759,512354,511676,244677,219907,757874,732539,784968,726764,1,1,1,1,1,1,1,1,1,1,1,1 +2023,1,1,Male,A06,45-54,13636495,13655174,971687,935938,347822,347370,174946,150058,523434,498063,575563,554913,1,1,1,1,1,1,1,1,1,1,1,1 +2023,1,1,Male,A07,55-64,11571024,11482665,672718,753096,213035,212642,120609,99686,334090,312694,426791,513515,1,1,1,1,1,1,1,1,1,1,1,1 +2023,1,1,Male,A08,65-99,5309213,5197965,371985,480221,82804,82591,50087,42751,133040,125433,270565,381007,1,1,1,1,1,1,1,1,1,1,1,1 +2023,1,2,Female,A00,All Ages (14-99),68070631,68408931,7041513,6481296,2384516,2383051,1140276,1103241,3527864,3488824,4195754,3845498,1,1,1,1,1,1,1,1,1,1,1,1 +2023,1,2,Female,A01,14-18,2021854,2208252,613820,409406,123898,123439,72643,91632,196755,214911,462115,276091,1,1,1,1,1,1,1,1,1,1,1,1 +2023,1,2,Female,A02,19-21,3116366,3193838,752211,643050,245920,245411,122725,150002,368881,395316,454055,375615,1,1,1,1,1,1,1,1,1,1,1,1 +2023,1,2,Female,A03,22-24,3802236,3855271,701985,621016,264599,264668,124145,120050,389035,384904,388127,334266,1,1,1,1,1,1,1,1,1,1,1,1 +2023,1,2,Female,A04,25-34,14400366,14448357,1748613,1645043,683113,682919,306195,293282,990089,977149,951407,900526,1,1,1,1,1,1,1,1,1,1,1,1 +2023,1,2,Female,A05,35-44,14687868,14767765,1301971,1180088,468621,468585,212023,193362,681245,662701,743364,660518,1,1,1,1,1,1,1,1,1,1,1,1 +2023,1,2,Female,A06,45-54,13644451,13692248,950551,874362,332591,332564,156811,135000,489850,468113,551255,501414,1,1,1,1,1,1,1,1,1,1,1,1 +2023,1,2,Female,A07,55-64,11458192,11400091,636373,680748,193270,193093,104118,84197,297746,277584,400961,457397,1,1,1,1,1,1,1,1,1,1,1,1 +2023,1,2,Female,A08,65-99,4939298,4843109,335989,427582,72505,72372,41616,35715,114263,108146,244470,339671,1,1,1,1,1,1,1,1,1,1,1,1 +2023,2,0,All Sexes,A00,All Ages (14-99),137335107,139059159,16784274,14582907,5373086,5364483,2308903,2485163,7688516,7863966,10474727,8706622,1,1,1,1,1,1,1,1,1,1,1,1 +2023,2,0,All Sexes,A01,14-18,3719954,4857168,2078724,909707,307870,307949,149466,166146,457991,474401,1684408,585867,1,1,1,1,1,1,1,1,1,1,1,1 +2023,2,0,All Sexes,A02,19-21,6095955,6931010,2324162,1373825,598446,598419,299700,262519,898857,862096,1556978,738884,1,1,1,1,1,1,1,1,1,1,1,1 +2023,2,0,All Sexes,A03,22-24,7513723,7695470,1656436,1418353,603025,602390,253064,294438,856946,898290,956943,773148,1,1,1,1,1,1,1,1,1,1,1,1 +2023,2,0,All Sexes,A04,25-34,29189680,29274270,3809308,3625456,1517787,1515248,632676,687944,2152316,2207532,2092909,1987490,1,1,1,1,1,1,1,1,1,1,1,1 +2023,2,0,All Sexes,A05,35-44,29893856,29897016,2736150,2658995,1029462,1027645,417497,464320,1448088,1495025,1552857,1525725,1,1,1,1,1,1,1,1,1,1,1,1 +2023,2,0,All Sexes,A06,45-54,27386112,27338710,1968548,1964210,712950,711195,287910,320533,1001545,1033920,1142888,1168990,1,1,1,1,1,1,1,1,1,1,1,1 +2023,2,0,All Sexes,A07,55-64,23109924,22874788,1374295,1576076,429333,427958,187676,202150,617433,631449,869260,1082286,1,1,1,1,1,1,1,1,1,1,1,1 +2023,2,0,All Sexes,A08,65-99,10425903,10190726,836652,1056285,174213,173679,80914,87113,255339,261252,618484,844233,1,1,1,1,1,1,1,1,1,1,1,1 +2023,2,1,Male,A00,All Ages (14-99),68973625,70178337,8734906,7311275,2778170,2774633,1205414,1224708,3986261,4005246,5549980,4319051,1,1,1,1,1,1,1,1,1,1,1,1 +2023,2,1,Male,A01,14-18,1728844,2305409,1028168,439993,145997,146149,69813,78259,216112,224533,844614,287551,1,1,1,1,1,1,1,1,1,1,1,1 +2023,2,1,Male,A02,19-21,2963930,3414594,1160378,665196,289865,289901,148244,126894,438310,417240,802861,361898,1,1,1,1,1,1,1,1,1,1,1,1 +2023,2,1,Male,A03,22-24,3709443,3851335,856409,688913,301536,301261,130938,139093,432782,440906,513459,371313,1,1,1,1,1,1,1,1,1,1,1,1 +2023,2,1,Male,A04,25-34,14775324,14898145,2014758,1844374,805152,804157,336174,346033,1142110,1152008,1123095,988716,1,1,1,1,1,1,1,1,1,1,1,1 +2023,2,1,Male,A05,35-44,15121191,15170025,1442375,1357433,545055,544253,222505,231672,768063,777235,830110,766926,1,1,1,1,1,1,1,1,1,1,1,1 +2023,2,1,Male,A06,45-54,13680526,13691441,1025960,988635,368325,367585,151876,156467,520491,524936,609157,584776,1,1,1,1,1,1,1,1,1,1,1,1 +2023,2,1,Male,A07,55-64,11600416,11526513,737948,793470,228005,227375,101741,101559,329931,329493,475392,536972,1,1,1,1,1,1,1,1,1,1,1,1 +2023,2,1,Male,A08,65-99,5393952,5320874,468909,533260,94235,93952,44122,44732,138462,138896,351292,420899,1,1,1,1,1,1,1,1,1,1,1,1 +2023,2,2,Female,A00,All Ages (14-99),68361481,68880821,8049368,7271632,2594916,2589850,1103489,1260455,3702255,3858720,4924747,4387571,1,1,1,1,1,1,1,1,1,1,1,1 +2023,2,2,Female,A01,14-18,1991110,2551759,1050556,469715,161873,161800,79652,87888,241879,249869,839794,298316,1,1,1,1,1,1,1,1,1,1,1,1 +2023,2,2,Female,A02,19-21,3132026,3516416,1163784,708629,308581,308519,151455,135625,460547,444856,754117,376986,1,1,1,1,1,1,1,1,1,1,1,1 +2023,2,2,Female,A03,22-24,3804280,3844135,800027,729439,301489,301129,122126,155344,424164,457384,443484,401834,1,1,1,1,1,1,1,1,1,1,1,1 +2023,2,2,Female,A04,25-34,14414356,14376124,1794549,1781082,712635,711091,296502,341912,1010206,1055524,969814,998774,1,1,1,1,1,1,1,1,1,1,1,1 +2023,2,2,Female,A05,35-44,14772665,14726991,1293775,1301562,484407,483392,194992,232648,680026,717791,722747,758799,1,1,1,1,1,1,1,1,1,1,1,1 +2023,2,2,Female,A06,45-54,13705585,13647270,942589,975575,344625,343610,136033,164067,481054,508985,533731,584214,1,1,1,1,1,1,1,1,1,1,1,1 +2023,2,2,Female,A07,55-64,11509508,11348275,636346,782606,201328,200583,85935,100591,287502,301956,393868,545314,1,1,1,1,1,1,1,1,1,1,1,1 +2023,2,2,Female,A08,65-99,5031951,4869852,367743,523025,79978,79727,36792,42381,116877,122356,267192,423334,1,1,1,1,1,1,1,1,1,1,1,1 +2023,3,0,All Sexes,A00,All Ages (14-99),139078623,138987058,15911419,15744414,5617879,5606683,2487343,2290452,8118969,7909362,9413858,9507936,1,1,1,1,1,1,1,1,1,1,1,1 +2023,3,0,All Sexes,A01,14-18,4331296,4277399,1497216,1526801,304048,303462,144740,204577,449945,508408,1142288,1180079,1,1,1,1,1,1,1,1,1,1,1,1 +2023,3,0,All Sexes,A02,19-21,6843757,6340713,1583151,2097239,588015,586081,257714,300835,847541,887651,910333,1396494,1,1,1,1,1,1,1,1,1,1,1,1 +2023,3,0,All Sexes,A03,22-24,7610861,7728626,1684401,1529998,626481,626496,298331,254639,926220,882408,964174,844832,1,1,1,1,1,1,1,1,1,1,1,1 +2023,3,0,All Sexes,A04,25-34,29187850,29496890,4037536,3636390,1621518,1618286,696596,601593,2321936,2223724,2191945,1892705,1,1,1,1,1,1,1,1,1,1,1,1 +2023,3,0,All Sexes,A05,35-44,29941227,30193096,2927025,2612085,1102674,1100470,469066,399808,1574183,1503072,1647636,1407697,1,1,1,1,1,1,1,1,1,1,1,1 +2023,3,0,All Sexes,A06,45-54,27418714,27535148,2059304,1904373,752774,751264,324117,276633,1078611,1029812,1178133,1071049,1,1,1,1,1,1,1,1,1,1,1,1 +2023,3,0,All Sexes,A07,55-64,23129770,23001073,1362278,1478890,444792,443514,206565,175902,652385,620441,836796,971924,1,1,1,1,1,1,1,1,1,1,1,1 +2023,3,0,All Sexes,A08,65-99,10615148,10414112,760508,958637,177576,177110,90214,76466,268147,253846,542552,743155,1,1,1,1,1,1,1,1,1,1,1,1 +2023,3,1,Male,A00,All Ages (14-99),70186038,70004806,7857054,7946100,2807151,2800219,1227322,1162168,4041041,3968127,4679471,4867955,1,1,1,1,1,1,1,1,1,1,1,1 +2023,3,1,Male,A01,14-18,2051190,2013954,713221,739830,138672,138514,67653,93830,206826,232514,553715,582437,1,1,1,1,1,1,1,1,1,1,1,1 +2023,3,1,Male,A02,19-21,3363244,3103770,769688,1032135,280955,280200,125978,145014,407790,425530,455535,705718,1,1,1,1,1,1,1,1,1,1,1,1 +2023,3,1,Male,A03,22-24,3805912,3846324,806791,754307,299521,299188,140169,127123,440381,426868,470615,429342,1,1,1,1,1,1,1,1,1,1,1,1 +2023,3,1,Male,A04,25-34,14848375,14980106,2014036,1846955,828083,825864,350390,313348,1180383,1141051,1091575,966127,1,1,1,1,1,1,1,1,1,1,1,1 +2023,3,1,Male,A05,35-44,15198846,15288620,1454540,1342221,561579,560041,234594,208694,797377,770060,817863,735567,1,1,1,1,1,1,1,1,1,1,1,1 +2023,3,1,Male,A06,45-54,13730988,13766936,1014984,967356,375542,374656,158298,141898,534593,517427,585237,556083,1,1,1,1,1,1,1,1,1,1,1,1 +2023,3,1,Male,A07,55-64,11652119,11579800,690140,760045,228951,228175,103869,92087,333290,320777,425406,502723,1,1,1,1,1,1,1,1,1,1,1,1 +2023,3,1,Male,A08,65-99,5535363,5425297,393654,503252,93848,93579,46370,40174,140400,133900,279524,389958,1,1,1,1,1,1,1,1,1,1,1,1 +2023,3,2,Female,A00,All Ages (14-99),68892585,68982252,8054365,7798314,2810728,2806464,1260021,1128284,4077927,3941235,4734387,4639981,1,1,1,1,1,1,1,1,1,1,1,1 +2023,3,2,Female,A01,14-18,2280105,2263446,783994,786971,165376,164948,77087,110747,243119,275895,588573,597642,1,1,1,1,1,1,1,1,1,1,1,1 +2023,3,2,Female,A02,19-21,3480513,3236943,813464,1065105,307060,305881,131736,155820,439751,462121,454799,690776,1,1,1,1,1,1,1,1,1,1,1,1 +2023,3,2,Female,A03,22-24,3804948,3882302,877610,775691,326960,327308,158162,127515,485839,455540,493559,415490,1,1,1,1,1,1,1,1,1,1,1,1 +2023,3,2,Female,A04,25-34,14339475,14516784,2023500,1789435,793435,792421,346205,288244,1141552,1082672,1100370,926578,1,1,1,1,1,1,1,1,1,1,1,1 +2023,3,2,Female,A05,35-44,14742381,14904476,1472485,1269864,541095,540429,234472,191114,776806,733012,829773,672130,1,1,1,1,1,1,1,1,1,1,1,1 +2023,3,2,Female,A06,45-54,13687726,13768213,1044319,937017,377232,376608,165819,134735,544017,512385,592896,514966,1,1,1,1,1,1,1,1,1,1,1,1 +2023,3,2,Female,A07,55-64,11477651,11421274,672138,718845,215841,215339,102696,83816,319095,299663,411390,469201,1,1,1,1,1,1,1,1,1,1,1,1 +2023,3,2,Female,A08,65-99,5079785,4988815,366854,455385,83729,83530,43844,36292,127748,119946,263028,353197,1,1,1,1,1,1,1,1,1,1,1,1 +2023,4,0,All Sexes,A00,All Ages (14-99),138999073,138597200,13792226,13979846,4675108,4664961,2285554,2226537,6963807,6898045,8354253,8774925,1,1,1,1,1,1,1,1,1,1,1,1 +2023,4,0,All Sexes,A01,14-18,3855217,4138831,1191409,881753,233823,233433,178866,133833,413192,367036,911440,625908,1,1,1,1,1,1,1,1,1,1,1,1 +2023,4,0,All Sexes,A02,19-21,6197393,6294834,1396618,1259165,455897,454940,301981,226187,758407,681348,858886,759100,1,1,1,1,1,1,1,1,1,1,1,1 +2023,4,0,All Sexes,A03,22-24,7622461,7690811,1351590,1247281,500123,499573,257502,232480,757936,732637,774566,704796,1,1,1,1,1,1,1,1,1,1,1,1 +2023,4,0,All Sexes,A04,25-34,29409687,29411069,3490909,3423090,1369510,1366653,607188,599866,1977332,1968738,1933352,1936058,1,1,1,1,1,1,1,1,1,1,1,1 +2023,4,0,All Sexes,A05,35-44,30218005,30175702,2570881,2577023,938443,935726,402982,428627,1341937,1366022,1482895,1533982,1,1,1,1,1,1,1,1,1,1,1,1 +2023,4,0,All Sexes,A06,45-54,27610694,27477479,1819878,1938172,642623,640957,279040,311830,921917,953979,1067995,1209646,1,1,1,1,1,1,1,1,1,1,1,1 +2023,4,0,All Sexes,A07,55-64,23249162,22914719,1228120,1566230,379663,378912,179208,207616,559115,587203,776919,1117412,1,1,1,1,1,1,1,1,1,1,1,1 +2023,4,0,All Sexes,A08,65-99,10836454,10493754,742822,1087130,155028,154767,78787,86098,233972,241082,548199,888023,1,1,1,1,1,1,1,1,1,1,1,1 +2023,4,1,Male,A00,All Ages (14-99),69981712,69457202,6841669,7305007,2375620,2370862,1161394,1181345,3539242,3555078,4149840,4685297,1,1,1,1,1,1,1,1,1,1,1,1 +2023,4,1,Male,A01,14-18,1808053,1932596,561859,426897,105621,105541,81718,63248,187574,168712,438091,311706,1,1,1,1,1,1,1,1,1,1,1,1 +2023,4,1,Male,A02,19-21,3031952,3064969,678720,630402,221627,221332,144955,114787,366887,336267,425847,390521,1,1,1,1,1,1,1,1,1,1,1,1 +2023,4,1,Male,A03,22-24,3785152,3801778,663631,633837,246473,246188,128430,121024,375157,367477,386677,369209,1,1,1,1,1,1,1,1,1,1,1,1 +2023,4,1,Male,A04,25-34,14924518,14872836,1769200,1797786,712571,711349,316619,324491,1029757,1036792,977635,1031573,1,1,1,1,1,1,1,1,1,1,1,1 +2023,4,1,Male,A05,35-44,15302111,15217922,1287572,1363824,485423,483948,210909,232002,696684,716643,740250,830071,1,1,1,1,1,1,1,1,1,1,1,1 +2023,4,1,Male,A06,45-54,13796219,13677964,897906,1016852,324733,323849,143303,166095,468275,490416,528199,652655,1,1,1,1,1,1,1,1,1,1,1,1 +2023,4,1,Male,A07,55-64,11696801,11478943,613246,837074,196875,196478,94012,112874,291062,309646,385059,607241,1,1,1,1,1,1,1,1,1,1,1,1 +2023,4,1,Male,A08,65-99,5636906,5410193,369536,598335,82297,82178,41448,46824,123845,129125,268081,492321,1,1,1,1,1,1,1,1,1,1,1,1 +2023,4,2,Female,A00,All Ages (14-99),69017361,69139998,6950557,6674839,2299489,2294100,1124160,1045192,3424565,3342967,4204414,4089627,1,1,1,1,1,1,1,1,1,1,1,1 +2023,4,2,Female,A01,14-18,2047164,2206235,629551,454857,128202,127893,97148,70586,225618,198324,473349,314201,1,1,1,1,1,1,1,1,1,1,1,1 +2023,4,2,Female,A02,19-21,3165440,3229865,717898,628762,234270,233609,157027,111399,391519,345081,433039,368579,1,1,1,1,1,1,1,1,1,1,1,1 +2023,4,2,Female,A03,22-24,3837309,3889033,687959,613444,253650,253385,129072,111456,382779,365160,387889,335586,1,1,1,1,1,1,1,1,1,1,1,1 +2023,4,2,Female,A04,25-34,14485169,14538233,1721709,1625304,656938,655305,290569,275375,947575,931946,955718,904485,1,1,1,1,1,1,1,1,1,1,1,1 +2023,4,2,Female,A05,35-44,14915894,14957780,1283308,1213199,453020,451777,192073,196625,645253,649379,742646,703911,1,1,1,1,1,1,1,1,1,1,1,1 +2023,4,2,Female,A06,45-54,13814474,13799516,921972,921321,317890,317108,135737,145736,453642,463563,539795,556991,1,1,1,1,1,1,1,1,1,1,1,1 +2023,4,2,Female,A07,55-64,11552361,11435776,614874,729156,182788,182435,85196,94742,268053,277557,391860,510171,1,1,1,1,1,1,1,1,1,1,1,1 +2023,4,2,Female,A08,65-99,5199548,5083561,373286,488796,72731,72590,37339,39274,110127,111957,280117,395702,1,1,1,1,1,1,1,1,1,1,1,1 +2024,1,0,All Sexes,A00,All Ages (14-99),138538071,139123122,13537429,12633253,4422854,4408874,2226558,2160343,6655759,6570917,8333197,7756197,1,1,1,1,1,1,1,1,1,1,1,1 +2024,1,0,All Sexes,A01,14-18,3730408,4055144,1056055,703486,191741,190638,117660,154230,309437,345496,819756,495435,1,1,1,1,1,1,1,1,1,1,1,1 +2024,1,0,All Sexes,A02,19-21,6160350,6316772,1375524,1168712,421976,420152,223427,274461,645629,695265,867816,710567,1,1,1,1,1,1,1,1,1,1,1,1 +2024,1,0,All Sexes,A03,22-24,7585786,7708478,1317689,1150119,472112,470714,233775,229805,706296,700775,764185,641506,1,1,1,1,1,1,1,1,1,1,1,1 +2024,1,0,All Sexes,A04,25-34,29305332,29442757,3391081,3171876,1292907,1289486,604750,581795,1899518,1871358,1909872,1773238,1,1,1,1,1,1,1,1,1,1,1,1 +2024,1,0,All Sexes,A05,35-44,30185988,30329411,2566618,2365195,900139,897310,431923,397089,1333630,1294485,1513413,1372186,1,1,1,1,1,1,1,1,1,1,1,1 +2024,1,0,All Sexes,A06,45-54,27535428,27620395,1862563,1740145,624153,622660,314417,273390,939742,896087,1124440,1041803,1,1,1,1,1,1,1,1,1,1,1,1 +2024,1,0,All Sexes,A07,55-64,23140886,23001900,1264008,1387370,372876,371537,211498,173075,585165,544541,816040,957477,1,1,1,1,1,1,1,1,1,1,1,1 +2024,1,0,All Sexes,A08,65-99,10893892,10648264,703890,946350,146950,146377,89108,76498,236343,222911,517674,763985,1,1,1,1,1,1,1,1,1,1,1,1 +2024,1,1,Male,A00,All Ages (14-99),69419853,69800114,6959935,6451719,2276429,2268836,1183331,1134597,3464183,3404343,4345286,3976554,1,1,1,1,1,1,1,1,1,1,1,1 +2024,1,1,Male,A01,14-18,1733430,1894645,505752,333652,85534,85151,54989,72088,140579,157522,402443,241171,1,1,1,1,1,1,1,1,1,1,1,1 +2024,1,1,Male,A02,19-21,2997116,3084804,680272,572717,205791,205046,113896,136630,319934,341956,440831,352582,1,1,1,1,1,1,1,1,1,1,1,1 +2024,1,1,Male,A03,22-24,3743512,3819589,667059,573013,234944,234108,121454,119519,356732,353770,398838,323071,1,1,1,1,1,1,1,1,1,1,1,1 +2024,1,1,Male,A04,25-34,14811577,14925711,1778191,1628421,681101,679187,327347,312781,1009731,992047,1014148,902145,1,1,1,1,1,1,1,1,1,1,1,1 +2024,1,1,Male,A05,35-44,15228273,15316602,1340779,1228380,473467,471800,234103,213400,708630,685266,799531,714217,1,1,1,1,1,1,1,1,1,1,1,1 +2024,1,1,Male,A06,45-54,13706522,13756734,960347,896406,321581,320720,167825,144889,490146,465635,589440,542064,1,1,1,1,1,1,1,1,1,1,1,1 +2024,1,1,Male,A07,55-64,11589096,11521060,659075,722403,195661,194830,115130,93926,311329,288753,429681,500716,1,1,1,1,1,1,1,1,1,1,1,1 +2024,1,1,Male,A08,65-99,5610327,5480968,368460,496727,78349,77994,48587,41363,127101,119394,270376,400587,1,1,1,1,1,1,1,1,1,1,1,1 +2024,1,2,Female,A00,All Ages (14-99),69118219,69323008,6577494,6181534,2146425,2140038,1043227,1025746,3191576,3166575,3987910,3779643,1,1,1,1,1,1,1,1,1,1,1,1 +2024,1,2,Female,A01,14-18,1996978,2160499,550303,369833,106207,105486,62671,82141,168858,187974,417313,254263,1,1,1,1,1,1,1,1,1,1,1,1 +2024,1,2,Female,A02,19-21,3163234,3231968,695252,595995,216185,215105,109531,137832,325695,353309,426985,357985,1,1,1,1,1,1,1,1,1,1,1,1 +2024,1,2,Female,A03,22-24,3842274,3888889,650631,577106,237168,236607,112320,110286,349564,347004,365348,318435,1,1,1,1,1,1,1,1,1,1,1,1 +2024,1,2,Female,A04,25-34,14493755,14517046,1612891,1543454,611806,610299,277404,269014,889787,879311,895724,871094,1,1,1,1,1,1,1,1,1,1,1,1 +2024,1,2,Female,A05,35-44,14957715,15012809,1225839,1136814,426672,425510,197819,183689,624999,609219,713883,657969,1,1,1,1,1,1,1,1,1,1,1,1 +2024,1,2,Female,A06,45-54,13828907,13863660,902217,843739,302572,301940,146592,128501,449596,430451,535001,499738,1,1,1,1,1,1,1,1,1,1,1,1 +2024,1,2,Female,A07,55-64,11551790,11480841,604932,664967,177215,176707,96368,79149,273836,255789,386359,456761,1,1,1,1,1,1,1,1,1,1,1,1 +2024,1,2,Female,A08,65-99,5283565,5167297,335430,449624,68601,68384,40521,35135,109241,103517,247298,363398,1,1,1,1,1,1,1,1,1,1,1,1 +2024,2,0,All Sexes,A00,All Ages (14-99),139021617,140761138,16091182,13892783,4973278,4969669,2164235,2326674,7138956,7296308,10168510,8406162,1,1,1,1,1,1,1,1,1,1,1,1 +2024,2,0,All Sexes,A01,14-18,3614682,4675282,1922188,821798,270754,271096,132440,144475,403532,414832,1558997,533411,1,1,1,1,1,1,1,1,1,1,1,1 +2024,2,0,All Sexes,A02,19-21,6200064,7041166,2261784,1296545,555437,555688,277251,241154,832870,796240,1527269,702188,1,1,1,1,1,1,1,1,1,1,1,1 +2024,2,0,All Sexes,A03,22-24,7598440,7784121,1579244,1337845,557583,557410,233422,274187,791409,831283,922810,736022,1,1,1,1,1,1,1,1,1,1,1,1 +2024,2,0,All Sexes,A04,25-34,29333884,29482665,3631944,3391531,1399993,1399101,587718,640760,1988163,2040404,2037862,1874057,1,1,1,1,1,1,1,1,1,1,1,1 +2024,2,0,All Sexes,A05,35-44,30343150,30394789,2655626,2536874,960584,959731,401590,441910,1362204,1402148,1542351,1472433,1,1,1,1,1,1,1,1,1,1,1,1 +2024,2,0,All Sexes,A06,45-54,27669025,27648443,1907131,1883738,665495,664543,276386,307785,941936,972758,1129163,1134703,1,1,1,1,1,1,1,1,1,1,1,1 +2024,2,0,All Sexes,A07,55-64,23222376,22978017,1308044,1526573,396163,395258,176563,191581,572690,587007,837234,1064729,1,1,1,1,1,1,1,1,1,1,1,1 +2024,2,0,All Sexes,A08,65-99,11039996,10756654,825221,1097878,167267,166842,78866,84822,246151,251636,612823,888618,1,1,1,1,1,1,1,1,1,1,1,1 +2024,2,1,Male,A00,All Ages (14-99),69768541,70982351,8435636,7003565,2594095,2593776,1137940,1158198,3733604,3750880,5424513,4188324,1,1,1,1,1,1,1,1,1,1,1,1 +2024,2,1,Male,A01,14-18,1680113,2215654,949474,398745,128990,129311,61480,68000,190646,196949,780740,262653,1,1,1,1,1,1,1,1,1,1,1,1 +2024,2,1,Male,A02,19-21,3026630,3478135,1132073,632125,271170,271541,137476,117105,408818,388312,788944,345891,1,1,1,1,1,1,1,1,1,1,1,1 +2024,2,1,Male,A03,22-24,3757630,3899551,819067,650929,279225,279354,121423,129870,400913,408976,496728,354351,1,1,1,1,1,1,1,1,1,1,1,1 +2024,2,1,Male,A04,25-34,14867868,15028872,1948334,1741239,750842,751029,316039,326936,1067412,1077904,1110612,939470,1,1,1,1,1,1,1,1,1,1,1,1 +2024,2,1,Male,A05,35-44,15336583,15416217,1419937,1305290,514695,514442,216200,223284,731109,737696,837184,744894,1,1,1,1,1,1,1,1,1,1,1,1 +2024,2,1,Male,A06,45-54,13785927,13811241,1005045,955220,348194,347774,146652,152795,495005,500590,607566,570650,1,1,1,1,1,1,1,1,1,1,1,1 +2024,2,1,Male,A07,55-64,11634271,11553859,704574,769001,211104,210725,95942,96918,307080,307605,459169,529109,1,1,1,1,1,1,1,1,1,1,1,1 +2024,2,1,Male,A08,65-99,5679520,5578822,457131,551016,89875,89599,42729,43290,132622,132849,343570,441307,1,1,1,1,1,1,1,1,1,1,1,1 +2024,2,2,Female,A00,All Ages (14-99),69253077,69778787,7655547,6889218,2379183,2375894,1026294,1168476,3405352,3545428,4743997,4217838,1,1,1,1,1,1,1,1,1,1,1,1 +2024,2,2,Female,A01,14-18,1934568,2459628,972714,423054,141764,141785,70960,76475,212886,217883,778257,270758,1,1,1,1,1,1,1,1,1,1,1,1 +2024,2,2,Female,A02,19-21,3173435,3563031,1129711,664420,284268,284146,139775,124049,424052,407929,738325,356297,1,1,1,1,1,1,1,1,1,1,1,1 +2024,2,2,Female,A03,22-24,3840810,3884570,760177,686916,278358,278056,111999,144317,390497,422306,426082,381671,1,1,1,1,1,1,1,1,1,1,1,1 +2024,2,2,Female,A04,25-34,14466016,14453793,1683610,1650293,649151,648072,271678,313823,920751,962501,927251,934587,1,1,1,1,1,1,1,1,1,1,1,1 +2024,2,2,Female,A05,35-44,15006567,14978573,1235688,1231584,445890,445289,185390,218627,631095,664452,705167,727539,1,1,1,1,1,1,1,1,1,1,1,1 +2024,2,2,Female,A06,45-54,13883098,13837202,902086,928518,317300,316769,129734,154989,446931,472168,521597,564054,1,1,1,1,1,1,1,1,1,1,1,1 +2024,2,2,Female,A07,55-64,11588105,11424158,603470,757572,185059,184533,80621,94663,265610,279402,378065,535620,1,1,1,1,1,1,1,1,1,1,1,1 +2024,2,2,Female,A08,65-99,5360477,5177832,368090,546862,77392,77242,36137,41532,113529,118787,269253,447311,1,1,1,1,1,1,1,1,1,1,1,1 +2024,3,0,All Sexes,A00,All Ages (14-99),140665276,140512717,15118042,15097348,5231372,5220420,2325836,2164117,7557515,7391015,9061289,9260824,1,1,1,1,1,1,1,1,1,1,1,1 +2024,3,0,All Sexes,A01,14-18,4141514,4079211,1373193,1414161,270637,269916,124468,182751,394932,452312,1056475,1102188,1,1,1,1,1,1,1,1,1,1,1,1 +2024,3,0,All Sexes,A02,19-21,6925205,6419394,1508503,2033619,543571,541282,235601,286747,779041,828072,883285,1374818,1,1,1,1,1,1,1,1,1,1,1,1 +2024,3,0,All Sexes,A03,22-24,7698501,7809974,1600984,1456396,580999,580934,277730,239280,858594,820867,929725,817838,1,1,1,1,1,1,1,1,1,1,1,1 +2024,3,0,All Sexes,A04,25-34,29356679,29680683,3832098,3434202,1509357,1507056,647102,564889,2156883,2074485,2115754,1810074,1,1,1,1,1,1,1,1,1,1,1,1 +2024,3,0,All Sexes,A05,35-44,30412588,30671218,2813615,2510465,1038832,1036502,446070,383939,1485130,1422190,1609713,1372942,1,1,1,1,1,1,1,1,1,1,1,1 +2024,3,0,All Sexes,A06,45-54,27720496,27839190,1974192,1832508,706743,705233,311334,265300,1018227,971694,1147226,1047695,1,1,1,1,1,1,1,1,1,1,1,1 +2024,3,0,All Sexes,A07,55-64,23221186,23068634,1279699,1432638,411219,410064,195798,166235,607043,576839,793403,960838,1,1,1,1,1,1,1,1,1,1,1,1 +2024,3,0,All Sexes,A08,65-99,11189108,10944413,735757,983360,170013,169433,87733,74977,257664,244558,525708,774431,1,1,1,1,1,1,1,1,1,1,1,1 +2024,3,1,Male,A00,All Ages (14-99),70935011,70763746,7522945,7640094,2630092,2623709,1158553,1107968,3789503,3734396,4543916,4747314,1,1,1,1,1,1,1,1,1,1,1,1 +2024,3,1,Male,A01,14-18,1958384,1918659,654283,684112,123108,122860,58089,83862,181169,206546,512212,543335,1,1,1,1,1,1,1,1,1,1,1,1 +2024,3,1,Male,A02,19-21,3411431,3150270,734293,1001679,260331,259351,115474,139504,375862,398888,442121,695768,1,1,1,1,1,1,1,1,1,1,1,1 +2024,3,1,Male,A03,22-24,3853204,3894432,769876,718632,278256,277937,130674,119925,408982,398129,456641,415363,1,1,1,1,1,1,1,1,1,1,1,1 +2024,3,1,Male,A04,25-34,14957597,15111137,1934933,1753689,777787,776228,330106,297927,1108285,1075266,1068849,926471,1,1,1,1,1,1,1,1,1,1,1,1 +2024,3,1,Male,A05,35-44,15437137,15542234,1417596,1297989,535007,533608,225725,202720,760960,737077,811491,719108,1,1,1,1,1,1,1,1,1,1,1,1 +2024,3,1,Male,A06,45-54,13846617,13889950,981930,934211,354307,353357,154712,137541,509150,491348,577079,545804,1,1,1,1,1,1,1,1,1,1,1,1 +2024,3,1,Male,A07,55-64,11672798,11590816,649392,734962,211675,211062,98984,87281,310710,298556,404360,495873,1,1,1,1,1,1,1,1,1,1,1,1 +2024,3,1,Male,A08,65-99,5797843,5666248,380642,514820,89622,89306,44788,39208,134384,128587,271163,405592,1,1,1,1,1,1,1,1,1,1,1,1 +2024,3,2,Female,A00,All Ages (14-99),69730265,69748971,7595097,7457254,2601280,2596711,1167283,1056149,3768012,3656619,4517373,4513510,1,1,1,1,1,1,1,1,1,1,1,1 +2024,3,2,Female,A01,14-18,2183130,2160551,718910,730048,147530,147056,66379,98889,213763,245766,544263,558854,1,1,1,1,1,1,1,1,1,1,1,1 +2024,3,2,Female,A02,19-21,3513774,3269125,774210,1031940,283240,281932,120127,147243,403179,429184,441164,679050,1,1,1,1,1,1,1,1,1,1,1,1 +2024,3,2,Female,A03,22-24,3845297,3915542,831108,737764,302744,302997,147056,119354,449612,422738,473084,402475,1,1,1,1,1,1,1,1,1,1,1,1 +2024,3,2,Female,A04,25-34,14399082,14569546,1897165,1680514,731570,730828,316997,266962,1048598,999219,1046905,883604,1,1,1,1,1,1,1,1,1,1,1,1 +2024,3,2,Female,A05,35-44,14975451,15128984,1396020,1212476,503825,502894,220344,181218,724170,685113,798222,653834,1,1,1,1,1,1,1,1,1,1,1,1 +2024,3,2,Female,A06,45-54,13873878,13949240,992261,898297,352436,351877,156622,127759,509077,480346,570147,501891,1,1,1,1,1,1,1,1,1,1,1,1 +2024,3,2,Female,A07,55-64,11548388,11477818,630307,697676,199544,199001,96814,78954,296333,278282,389043,464965,1,1,1,1,1,1,1,1,1,1,1,1 +2024,3,2,Female,A08,65-99,5391265,5278165,355115,468540,80391,80127,42945,35769,123281,115971,254545,368839,1,1,1,1,1,1,1,1,1,1,1,1 +2024,4,0,All Sexes,A00,All Ages (14-99),140499545,139978638,13358600,13685550,4432200,4422366,2163425,2077001,6596096,6500693,8179380,8708948,1,1,1,1,1,1,1,1,1,1,1,1 +2024,4,0,All Sexes,A01,14-18,3666671,3971178,1122444,790760,209606,208593,159894,112954,369413,321648,868851,560330,1,1,1,1,1,1,1,1,1,1,1,1 +2024,4,0,All Sexes,A02,19-21,6247914,6386829,1368727,1189333,425256,424120,288392,204499,713738,628579,861705,720119,1,1,1,1,1,1,1,1,1,1,1,1 +2024,4,0,All Sexes,A03,22-24,7709283,7798172,1308799,1183604,469775,469073,242154,210530,712040,679677,762266,672141,1,1,1,1,1,1,1,1,1,1,1,1 +2024,4,0,All Sexes,A04,25-34,29565203,29579001,3363819,3287914,1296826,1294371,570173,553921,1867232,1848640,1885292,1875551,1,1,1,1,1,1,1,1,1,1,1,1 +2024,4,0,All Sexes,A05,35-44,30696374,30616292,2513148,2562635,904399,902345,387772,411576,1292254,1314307,1461851,1548560,1,1,1,1,1,1,1,1,1,1,1,1 +2024,4,0,All Sexes,A06,45-54,27914068,27735171,1772601,1942118,615875,614398,268169,301538,884145,916219,1049653,1235425,1,1,1,1,1,1,1,1,1,1,1,1 +2024,4,0,All Sexes,A07,55-64,23329313,22935077,1177863,1579805,359115,358401,169562,198369,528687,556941,749266,1147294,1,1,1,1,1,1,1,1,1,1,1,1 +2024,4,0,All Sexes,A08,65-99,11370719,10956917,731198,1149381,151348,151065,77309,83614,228585,234682,540497,949529,1,1,1,1,1,1,1,1,1,1,1,1 +2024,4,1,Male,A00,All Ages (14-99),70719124,70163419,6690647,7195747,2275542,2269574,1108919,1109515,3384012,3380611,4101156,4669279,1,1,1,1,1,1,1,1,1,1,1,1 +2024,4,1,Male,A01,14-18,1716388,1851235,531011,385392,95001,94591,73108,53654,168063,148305,418930,281307,1,1,1,1,1,1,1,1,1,1,1,1 +2024,4,1,Male,A02,19-21,3064410,3119511,670179,599861,208572,208165,139903,104840,348516,313052,430314,373255,1,1,1,1,1,1,1,1,1,1,1,1 +2024,4,1,Male,A03,22-24,3835529,3865980,647465,603622,232992,232503,121127,110077,354135,342717,383779,352844,1,1,1,1,1,1,1,1,1,1,1,1 +2024,4,1,Male,A04,25-34,15039222,15004176,1725101,1738577,682460,680753,300811,301699,983173,982862,964701,1004086,1,1,1,1,1,1,1,1,1,1,1,1 +2024,4,1,Male,A05,35-44,15555421,15456210,1275441,1369501,474267,472942,205190,224017,679317,697344,738744,843821,1,1,1,1,1,1,1,1,1,1,1,1 +2024,4,1,Male,A06,45-54,13917395,13781039,886807,1026913,315085,314102,139169,161952,454159,476328,526841,669771,1,1,1,1,1,1,1,1,1,1,1,1 +2024,4,1,Male,A07,55-64,11711529,11466324,591369,844777,187051,186576,89139,108022,276119,294785,373909,622889,1,1,1,1,1,1,1,1,1,1,1,1 +2024,4,1,Male,A08,65-99,5879230,5618944,363275,627105,80112,79942,40471,45254,120530,125218,263938,521306,1,1,1,1,1,1,1,1,1,1,1,1 +2024,4,2,Female,A00,All Ages (14-99),69780421,69815219,6667952,6489803,2156659,2152792,1054507,967486,3212084,3120083,4078225,4039669,1,1,1,1,1,1,1,1,1,1,1,1 +2024,4,2,Female,A01,14-18,1950283,2119943,591433,405368,114605,114002,86786,59300,201350,173343,449921,279023,1,1,1,1,1,1,1,1,1,1,1,1 +2024,4,2,Female,A02,19-21,3183504,3267318,698548,589472,216684,215955,148489,99659,365222,315527,431391,346865,1,1,1,1,1,1,1,1,1,1,1,1 +2024,4,2,Female,A03,22-24,3873754,3932192,661334,579982,236783,236570,121027,100453,357905,336960,378487,319296,1,1,1,1,1,1,1,1,1,1,1,1 +2024,4,2,Female,A04,25-34,14525980,14574824,1638718,1549337,614366,613617,269362,252222,884059,865778,920591,871464,1,1,1,1,1,1,1,1,1,1,1,1 +2024,4,2,Female,A05,35-44,15140953,15160082,1237707,1193133,430132,429403,182582,187559,612937,616963,723108,704738,1,1,1,1,1,1,1,1,1,1,1,1 +2024,4,2,Female,A06,45-54,13996673,13954132,885794,915206,300790,300296,129000,139586,429986,439892,522812,565655,1,1,1,1,1,1,1,1,1,1,1,1 +2024,4,2,Female,A07,55-64,11617784,11468753,586495,735029,172064,171825,80423,90347,252568,262156,375357,524405,1,1,1,1,1,1,1,1,1,1,1,1 +2024,4,2,Female,A08,65-99,5491489,5337974,367923,522276,71235,71123,36838,38360,108056,109464,276559,428223,1,1,1,1,1,1,1,1,1,1,1,1 +2025,1,0,All Sexes,A00,All Ages (14-99),139836605,140000341,12770341,12263417,4193521,4182606,2076610,,6272897,,7809750,7599959,1,1,1,1,1,1,1,-1,1,-1,1,1 +2025,1,0,All Sexes,A01,14-18,3559170,3861467,959716,625100,167327,166709,98681,,266035,,747820,441643,1,1,1,1,1,1,1,-1,1,-1,1,1 +2025,1,0,All Sexes,A02,19-21,6238093,6385414,1322292,1118240,393327,392162,201735,,595206,,840265,687165,1,1,1,1,1,1,1,-1,1,-1,1,1 +2025,1,0,All Sexes,A03,22-24,7669603,7769257,1243054,1094496,440527,439536,211190,,651956,,720516,616584,1,1,1,1,1,1,1,-1,1,-1,1,1 +2025,1,0,All Sexes,A04,25-34,29448857,29499238,3183860,3045167,1221088,1218522,558071,,1779866,,1779603,1716984,1,1,1,1,1,1,1,-1,1,-1,1,1 +2025,1,0,All Sexes,A05,35-44,30615858,30691563,2451922,2315478,869251,867011,414537,,1284375,,1433190,1348860,1,1,1,1,1,1,1,-1,1,-1,1,1 +2025,1,0,All Sexes,A06,45-54,27782732,27811074,1778129,1710097,601777,600192,303847,,906129,,1065758,1031427,1,1,1,1,1,1,1,-1,1,-1,1,1 +2025,1,0,All Sexes,A07,55-64,23161829,22954810,1175757,1368788,354996,353872,202162,,557520,,750048,954661,1,1,1,1,1,1,1,-1,1,-1,1,1 +2025,1,0,All Sexes,A08,65-99,11360464,11027518,655611,986050,145227,144602,86386,,231810,,472550,802635,1,1,1,1,1,1,1,-1,1,-1,1,1 +2025,1,1,Male,A00,All Ages (14-99),70052658,70187803,6595499,6321035,2190786,2184143,1110032,,3303290,,4072701,3922019,1,1,1,1,1,1,1,-1,1,-1,1,1 +2025,1,1,Male,A01,14-18,1649773,1802986,462721,295869,75136,74950,46307,,121503,,369452,213897,1,1,1,1,1,1,1,-1,1,-1,1,1 +2025,1,1,Male,A02,19-21,3042811,3123352,656922,553437,194836,194285,103614,,298639,,427433,343698,1,1,1,1,1,1,1,-1,1,-1,1,1 +2025,1,1,Male,A03,22-24,3791812,3855549,632834,548888,222241,221647,110284,,332746,,376929,311282,1,1,1,1,1,1,1,-1,1,-1,1,1 +2025,1,1,Male,A04,25-34,14923484,14982886,1680405,1582249,654171,652592,303732,,958544,,945085,881149,1,1,1,1,1,1,1,-1,1,-1,1,1 +2025,1,1,Male,A05,35-44,15456099,15502688,1287543,1215737,465040,463595,225894,,691428,,756283,707344,1,1,1,1,1,1,1,-1,1,-1,1,1 +2025,1,1,Male,A06,45-54,13797203,13812683,919145,889074,313447,312334,163165,,477076,,557745,541435,1,1,1,1,1,1,1,-1,1,-1,1,1 +2025,1,1,Male,A07,55-64,11571850,11462512,613585,719024,188806,188047,110198,,299287,,393215,502851,1,1,1,1,1,1,1,-1,1,-1,1,1 +2025,1,1,Male,A08,65-99,5819626,5645146,342345,516757,77109,76693,46837,,124067,,246559,420362,1,1,1,1,1,1,1,-1,1,-1,1,1 +2025,1,2,Female,A00,All Ages (14-99),69783947,69812538,6174842,5942382,2002735,1998463,966578,,2969608,,3737049,3677940,1,1,1,1,1,1,1,-1,1,-1,1,1 +2025,1,2,Female,A01,14-18,1909396,2058481,496995,329231,92191,91759,52374,,144532,,378368,227747,1,1,1,1,1,1,1,-1,1,-1,1,1 +2025,1,2,Female,A02,19-21,3195282,3262062,665371,564803,198491,197877,98121,,296568,,412832,343467,1,1,1,1,1,1,1,-1,1,-1,1,1 +2025,1,2,Female,A03,22-24,3877791,3913708,610220,545608,218286,217889,100906,,319210,,343587,305301,1,1,1,1,1,1,1,-1,1,-1,1,1 +2025,1,2,Female,A04,25-34,14525373,14516352,1503455,1462918,566917,565930,254339,,821322,,834518,835835,1,1,1,1,1,1,1,-1,1,-1,1,1 +2025,1,2,Female,A05,35-44,15159759,15188876,1164379,1099741,404211,403416,188643,,592946,,676907,641516,1,1,1,1,1,1,1,-1,1,-1,1,1 +2025,1,2,Female,A06,45-54,13985529,13998391,858984,821023,288331,287858,140682,,429053,,508013,489992,1,1,1,1,1,1,1,-1,1,-1,1,1 +2025,1,2,Female,A07,55-64,11589979,11492297,562172,649765,166190,165825,91965,,258234,,356833,451810,1,1,1,1,1,1,1,-1,1,-1,1,1 +2025,1,2,Female,A08,65-99,5540838,5382372,313266,469293,68118,67909,39549,,107743,,225991,382273,1,1,1,1,1,1,1,-1,1,-1,1,1 diff --git a/data/external/j2jod_us_firmsize_od_2015on.csv b/data/external/j2jod_us_firmsize_od_2015on.csv new file mode 100644 index 00000000..ba97616d --- /dev/null +++ b/data/external/j2jod_us_firmsize_od_2015on.csv @@ -0,0 +1,1477 @@ +year,quarter,firmsize_orig,firmsize,firmsize_orig_label,firmsize_label,EE,AQHire,J2J,EES,AQHireS,J2JS,sEE,sAQHire,sJ2J,sEES,sAQHireS,sJ2JS +2015,1,0,0,All Firm Sizes,All Firm Sizes,3985308,1939277,5924585,2283394,974400,3257794,1,1,10,1,1,10 +2015,1,0,1,All Firm Sizes,0-19 Employees,601144,360681,961825,338936,190341,529277,1,1,10,1,1,10 +2015,1,0,2,All Firm Sizes,20-49 Employees,382912,185386,568298,208530,86204,294734,1,1,10,1,1,10 +2015,1,0,3,All Firm Sizes,50-249 Employees,642927,292945,935872,357814,137604,495418,1,1,10,1,1,10 +2015,1,0,4,All Firm Sizes,250-499 Employees,240066,107856,347922,133506,50017,183523,1,1,10,1,1,10 +2015,1,0,5,All Firm Sizes,500+ Employees,1926216,907318,2833534,1108763,460893,1569656,1,1,10,1,1,10 +2015,1,1,0,0-19 Employees,All Firm Sizes,540509,407379,947888,313803,204474,518277,1,1,10,1,1,10 +2015,1,1,1,0-19 Employees,0-19 Employees,186628,156934,343562,113994,91637,205631,10,10,10,10,10,10 +2015,1,1,2,0-19 Employees,20-49 Employees,73037,50372,123409,41320,23762,65082,10,10,10,10,10,10 +2015,1,1,3,0-19 Employees,50-249 Employees,83487,57057,140544,46929,25841,72770,10,10,10,10,10,10 +2015,1,1,4,0-19 Employees,250-499 Employees,24583,17023,41606,13712,7363,21075,10,10,10,10,10,10 +2015,1,1,5,0-19 Employees,500+ Employees,154721,112119,266840,85363,48410,133773,10,10,10,10,10,10 +2015,1,2,0,20-49 Employees,All Firm Sizes,363884,190899,554783,206793,90409,297202,1,1,10,1,1,10 +2015,1,2,1,20-49 Employees,0-19 Employees,80812,44374,125186,46749,22531,69280,10,10,10,10,10,10 +2015,1,2,2,20-49 Employees,20-49 Employees,61197,30932,92129,35056,15701,50757,10,10,10,10,10,10 +2015,1,2,3,20-49 Employees,50-249 Employees,69481,34578,104059,39557,16134,55691,10,10,10,10,10,10 +2015,1,2,4,20-49 Employees,250-499 Employees,19429,10222,29651,10886,4431,15317,10,10,10,10,10,10 +2015,1,2,5,20-49 Employees,500+ Employees,121151,64490,185641,66337,28292,94629,10,10,10,10,10,10 +2015,1,3,0,50-249 Employees,All Firm Sizes,606604,294354,900958,347988,142908,490896,1,1,10,1,1,10 +2015,1,3,1,50-249 Employees,0-19 Employees,91864,47714,139578,52127,23516,75643,10,10,10,10,10,10 +2015,1,3,2,50-249 Employees,20-49 Employees,71880,32910,104790,40382,15572,55954,10,10,10,10,10,10 +2015,1,3,3,50-249 Employees,50-249 Employees,142017,66930,208947,83192,34939,118131,10,10,10,10,10,10 +2015,1,3,4,50-249 Employees,250-499 Employees,41348,19885,61233,23425,9422,32847,10,10,10,10,10,10 +2015,1,3,5,50-249 Employees,500+ Employees,238568,117234,355802,134130,54056,188186,10,10,10,10,10,10 +2015,1,4,0,250-499 Employees,All Firm Sizes,230019,106350,336369,131029,50793,181822,1,1,10,1,1,10 +2015,1,4,1,250-499 Employees,0-19 Employees,27480,13677,41157,14941,6381,21322,10,10,10,10,10,10 +2015,1,4,2,250-499 Employees,20-49 Employees,21461,9419,30880,11821,4219,16040,10,10,10,10,10,10 +2015,1,4,3,250-499 Employees,50-249 Employees,44170,19144,63314,25011,9098,34109,10,10,10,10,10,10 +2015,1,4,4,250-499 Employees,250-499 Employees,24219,12311,36530,14734,7183,21917,10,10,10,10,10,10 +2015,1,4,5,250-499 Employees,500+ Employees,104251,48263,152514,58526,21948,80474,10,10,10,10,10,10 +2015,1,5,0,500+ Employees,All Firm Sizes,2091631,871883,2963514,1178511,447201,1625712,1,1,10,1,1,10 +2015,1,5,1,500+ Employees,0-19 Employees,199567,89851,289418,101805,42039,143844,10,10,10,10,10,10 +2015,1,5,2,500+ Employees,20-49 Employees,146760,57350,204110,74549,24800,99349,10,10,10,10,10,10 +2015,1,5,3,500+ Employees,50-249 Employees,288445,108342,396787,153428,48154,201582,10,10,10,10,10,10 +2015,1,5,4,500+ Employees,250-499 Employees,124177,45732,169909,66680,20271,86951,10,10,10,10,10,10 +2015,1,5,5,500+ Employees,500+ Employees,1260661,543144,1803805,734039,296503,1030542,10,10,10,10,10,10 +2015,2,0,0,All Firm Sizes,All Firm Sizes,4867789,1996453,6864242,2814775,902513,3717288,1,1,10,1,1,10 +2015,2,0,1,All Firm Sizes,0-19 Employees,854203,375541,1229744,460689,169555,630244,1,1,10,1,1,10 +2015,2,0,2,All Firm Sizes,20-49 Employees,481254,194405,675659,261492,84107,345599,1,1,10,1,1,10 +2015,2,0,3,All Firm Sizes,50-249 Employees,779101,304827,1083928,435842,135108,570950,1,1,10,1,1,10 +2015,2,0,4,All Firm Sizes,250-499 Employees,278376,110759,389135,158263,49260,207523,1,1,10,1,1,10 +2015,2,0,5,All Firm Sizes,500+ Employees,2254516,925426,3179942,1349887,418696,1768583,1,1,10,1,1,10 +2015,2,1,0,0-19 Employees,All Firm Sizes,688467,324649,1013116,378305,160683,538988,1,1,10,1,1,10 +2015,2,1,1,0-19 Employees,0-19 Employees,245600,118263,363863,138889,63013,201902,10,10,10,10,10,10 +2015,2,1,2,0-19 Employees,20-49 Employees,91282,39956,131238,49480,19038,68518,10,10,10,10,10,10 +2015,2,1,3,0-19 Employees,50-249 Employees,104645,46213,150858,56118,21750,77868,10,10,10,10,10,10 +2015,2,1,4,0-19 Employees,250-499 Employees,30435,13913,44348,16231,6439,22670,10,10,10,10,10,10 +2015,2,1,5,0-19 Employees,500+ Employees,193825,95577,289402,104072,44706,148778,10,10,10,10,10,10 +2015,2,2,0,20-49 Employees,All Firm Sizes,470729,196950,667679,257722,91225,348947,1,1,10,1,1,10 +2015,2,2,1,20-49 Employees,0-19 Employees,117631,48887,166518,63301,22732,86033,10,10,10,10,10,10 +2015,2,2,2,20-49 Employees,20-49 Employees,75835,29216,105051,42364,13886,56250,10,10,10,10,10,10 +2015,2,2,3,20-49 Employees,50-249 Employees,87462,34836,122298,48248,16357,64605,10,10,10,10,10,10 +2015,2,2,4,20-49 Employees,250-499 Employees,24088,10002,34090,13188,4542,17730,10,10,10,10,10,10 +2015,2,2,5,20-49 Employees,500+ Employees,151283,67768,219051,82172,30516,112688,10,10,10,10,10,10 +2015,2,3,0,50-249 Employees,All Firm Sizes,767037,305550,1072587,430650,140508,571158,1,1,10,1,1,10 +2015,2,3,1,50-249 Employees,0-19 Employees,137968,56492,194460,73544,24878,98422,10,10,10,10,10,10 +2015,2,3,2,50-249 Employees,20-49 Employees,92104,35086,127190,50467,15893,66360,10,10,10,10,10,10 +2015,2,3,3,50-249 Employees,50-249 Employees,170733,62552,233285,98189,29871,128060,10,10,10,10,10,10 +2015,2,3,4,50-249 Employees,250-499 Employees,49056,19084,68140,27864,8870,36734,10,10,10,10,10,10 +2015,2,3,5,50-249 Employees,500+ Employees,292473,122648,415121,164867,55844,220711,10,10,10,10,10,10 +2015,2,4,0,250-499 Employees,All Firm Sizes,289903,113120,403023,162615,50834,213449,1,1,10,1,1,10 +2015,2,4,1,250-499 Employees,0-19 Employees,42445,17429,59874,22118,7259,29377,10,10,10,10,10,10 +2015,2,4,2,250-499 Employees,20-49 Employees,28053,10666,38719,15030,4592,19622,10,10,10,10,10,10 +2015,2,4,3,250-499 Employees,50-249 Employees,54116,19970,74086,30101,9001,39102,10,10,10,10,10,10 +2015,2,4,4,250-499 Employees,250-499 Employees,28164,10087,38251,16856,5053,21909,10,10,10,10,10,10 +2015,2,4,5,250-499 Employees,500+ Employees,127434,51190,178624,72240,22944,95184,10,10,10,10,10,10 +2015,2,5,0,500+ Employees,All Firm Sizes,2439001,989880,3428881,1449479,423702,1873181,1,1,10,1,1,10 +2015,2,5,1,500+ Employees,0-19 Employees,281701,125260,406961,147727,47529,195256,10,10,10,10,10,10 +2015,2,5,2,500+ Employees,20-49 Employees,179626,75160,254786,96376,28749,125125,10,10,10,10,10,10 +2015,2,5,3,500+ Employees,50-249 Employees,339460,134100,473560,190185,54717,244902,10,10,10,10,10,10 +2015,2,5,4,500+ Employees,250-499 Employees,138239,55035,193274,79077,23015,102092,10,10,10,10,10,10 +2015,2,5,5,500+ Employees,500+ Employees,1422166,565757,1987923,885427,252985,1138412,10,10,10,10,10,10 +2015,3,0,0,All Firm Sizes,All Firm Sizes,5311346,2166087,7477433,3053384,1148121,4201505,1,1,10,1,1,10 +2015,3,0,1,All Firm Sizes,0-19 Employees,839840,376369,1216209,440787,188567,629354,1,1,10,1,1,10 +2015,3,0,2,All Firm Sizes,20-49 Employees,501720,199101,700821,264081,98143,362224,1,1,10,1,1,10 +2015,3,0,3,All Firm Sizes,50-249 Employees,814172,309348,1123520,445859,156052,601911,1,1,10,1,1,10 +2015,3,0,4,All Firm Sizes,250-499 Employees,295371,113264,408635,162589,56390,218979,1,1,10,1,1,10 +2015,3,0,5,All Firm Sizes,500+ Employees,2436289,980519,3416808,1404088,507287,1911375,1,1,10,1,1,10 +2015,3,1,0,0-19 Employees,All Firm Sizes,800510,343239,1143749,406016,174126,580142,1,1,10,1,1,10 +2015,3,1,1,0-19 Employees,0-19 Employees,266307,119558,385865,139243,63505,202748,10,10,10,10,10,10 +2015,3,1,2,0-19 Employees,20-49 Employees,104965,41084,146049,51878,20231,72109,10,10,10,10,10,10 +2015,3,1,3,0-19 Employees,50-249 Employees,121099,48031,169130,59664,23642,83306,10,10,10,10,10,10 +2015,3,1,4,0-19 Employees,250-499 Employees,35592,14590,50182,17375,6951,24326,10,10,10,10,10,10 +2015,3,1,5,0-19 Employees,500+ Employees,235142,104817,339959,113484,49954,163438,10,10,10,10,10,10 +2015,3,2,0,20-49 Employees,All Firm Sizes,509367,207497,716864,272897,103237,376134,1,1,10,1,1,10 +2015,3,2,1,20-49 Employees,0-19 Employees,115700,48735,164435,60456,24046,84502,10,10,10,10,10,10 +2015,3,2,2,20-49 Employees,20-49 Employees,79555,30023,109578,43000,15163,58163,10,10,10,10,10,10 +2015,3,2,3,20-49 Employees,50-249 Employees,93097,35429,128526,50297,17493,67790,10,10,10,10,10,10 +2015,3,2,4,20-49 Employees,250-499 Employees,26569,10377,36946,13985,5032,19017,10,10,10,10,10,10 +2015,3,2,5,20-49 Employees,500+ Employees,169972,73829,243801,87633,35354,122987,10,10,10,10,10,10 +2015,3,3,0,50-249 Employees,All Firm Sizes,823122,322717,1145839,453982,161699,615681,1,1,10,1,1,10 +2015,3,3,1,50-249 Employees,0-19 Employees,133751,56608,190359,69517,26979,96496,10,10,10,10,10,10 +2015,3,3,2,50-249 Employees,20-49 Employees,95201,35984,131185,50876,17548,68424,10,10,10,10,10,10 +2015,3,3,3,50-249 Employees,50-249 Employees,178268,63838,242106,100635,33002,133637,10,10,10,10,10,10 +2015,3,3,4,50-249 Employees,250-499 Employees,53770,19585,73355,29525,9780,39305,10,10,10,10,10,10 +2015,3,3,5,50-249 Employees,500+ Employees,320476,131737,452213,172687,63860,236547,10,10,10,10,10,10 +2015,3,4,0,250-499 Employees,All Firm Sizes,301794,119245,421039,167149,58360,225509,1,1,10,1,1,10 +2015,3,4,1,250-499 Employees,0-19 Employees,39059,17420,56479,20147,8028,28175,10,10,10,10,10,10 +2015,3,4,2,250-499 Employees,20-49 Employees,27638,10852,38490,14415,5200,19615,10,10,10,10,10,10 +2015,3,4,3,250-499 Employees,50-249 Employees,55060,20175,75235,30334,9965,40299,10,10,10,10,10,10 +2015,3,4,4,250-499 Employees,250-499 Employees,29352,10103,39455,17166,5177,22343,10,10,10,10,10,10 +2015,3,4,5,250-499 Employees,500+ Employees,135944,55025,190969,74168,26104,100272,10,10,10,10,10,10 +2015,3,5,0,500+ Employees,All Firm Sizes,2524062,983204,3507266,1482168,511342,1993510,1,1,10,1,1,10 +2015,3,5,1,500+ Employees,0-19 Employees,258285,117624,375909,135337,55847,191184,10,10,10,10,10,10 +2015,3,5,2,500+ Employees,20-49 Employees,177488,71423,248911,93435,33769,127204,10,10,10,10,10,10 +2015,3,5,3,500+ Employees,50-249 Employees,338684,126286,464970,186337,61773,248110,10,10,10,10,10,10 +2015,3,5,4,500+ Employees,250-499 Employees,140174,52192,192366,78033,25210,103243,10,10,10,10,10,10 +2015,3,5,5,500+ Employees,500+ Employees,1497643,570841,2068484,907327,304419,1211746,10,10,10,10,10,10 +2015,4,0,0,All Firm Sizes,All Firm Sizes,4686235,2102303,6788538,2670905,968560,3639465,1,1,10,1,1,10 +2015,4,0,1,All Firm Sizes,0-19 Employees,686334,339563,1025897,382184,160577,542761,1,1,10,1,1,10 +2015,4,0,2,All Firm Sizes,20-49 Employees,413989,185519,599508,225188,81752,306940,1,1,10,1,1,10 +2015,4,0,3,All Firm Sizes,50-249 Employees,705689,293957,999646,392843,132069,524912,1,1,10,1,1,10 +2015,4,0,4,All Firm Sizes,250-499 Employees,270545,112466,383011,149972,50204,200176,1,1,10,1,1,10 +2015,4,0,5,All Firm Sizes,500+ Employees,2365176,1042268,3407444,1343454,466647,1810101,1,1,10,1,1,10 +2015,4,1,0,0-19 Employees,All Firm Sizes,722655,393700,1116355,387602,167941,555543,1,1,10,1,1,10 +2015,4,1,1,0-19 Employees,0-19 Employees,219983,116598,336581,124633,57138,181771,10,10,10,10,10,10 +2015,4,1,2,0-19 Employees,20-49 Employees,89668,44590,134258,47908,18583,66491,10,10,10,10,10,10 +2015,4,1,3,0-19 Employees,50-249 Employees,108801,54611,163412,57636,22024,79660,10,10,10,10,10,10 +2015,4,1,4,0-19 Employees,250-499 Employees,34572,17818,52390,17711,7039,24750,10,10,10,10,10,10 +2015,4,1,5,0-19 Employees,500+ Employees,242319,141967,384286,121118,53614,174732,10,10,10,10,10,10 +2015,4,2,0,20-49 Employees,All Firm Sizes,440533,219112,659645,237443,97596,335039,1,1,10,1,1,10 +2015,4,2,1,20-49 Employees,0-19 Employees,92624,45383,138007,51507,21352,72859,10,10,10,10,10,10 +2015,4,2,2,20-49 Employees,20-49 Employees,63997,28786,92783,35366,13528,48894,10,10,10,10,10,10 +2015,4,2,3,20-49 Employees,50-249 Employees,78501,35188,113689,43167,15628,58795,10,10,10,10,10,10 +2015,4,2,4,20-49 Employees,250-499 Employees,23792,11076,34868,12661,4646,17307,10,10,10,10,10,10 +2015,4,2,5,20-49 Employees,500+ Employees,166090,88072,254162,84423,36238,120661,10,10,10,10,10,10 +2015,4,3,0,50-249 Employees,All Firm Sizes,720602,327781,1048383,401685,148694,550379,1,1,10,1,1,10 +2015,4,3,1,50-249 Employees,0-19 Employees,108541,51721,160262,60069,23843,83912,10,10,10,10,10,10 +2015,4,3,2,50-249 Employees,20-49 Employees,77492,33477,110969,43149,15103,58252,10,10,10,10,10,10 +2015,4,3,3,50-249 Employees,50-249 Employees,153069,60895,213964,87870,28975,116845,10,10,10,10,10,10 +2015,4,3,4,50-249 Employees,250-499 Employees,48135,20297,68432,26626,9233,35859,10,10,10,10,10,10 +2015,4,3,5,50-249 Employees,500+ Employees,307123,147195,454318,165709,63481,229190,10,10,10,10,10,10 +2015,4,4,0,250-499 Employees,All Firm Sizes,272903,116836,389739,152759,53538,206297,1,1,10,1,1,10 +2015,4,4,1,250-499 Employees,0-19 Employees,32188,15013,47201,17704,7043,24747,10,10,10,10,10,10 +2015,4,4,2,250-499 Employees,20-49 Employees,23036,9785,32821,12443,4224,16667,10,10,10,10,10,10 +2015,4,4,3,250-499 Employees,50-249 Employees,47822,18851,66673,27114,8799,35913,10,10,10,10,10,10 +2015,4,4,4,250-499 Employees,250-499 Employees,26690,9960,36650,15916,5049,20965,10,10,10,10,10,10 +2015,4,4,5,250-499 Employees,500+ Employees,132103,57985,190088,71838,25265,97103,10,10,10,10,10,10 +2015,4,5,0,500+ Employees,All Firm Sizes,2344742,934929,3279671,1361612,442714,1804326,1,1,10,1,1,10 +2015,4,5,1,500+ Employees,0-19 Employees,216408,98868,315276,117884,45475,163359,10,10,10,10,10,10 +2015,4,5,2,500+ Employees,20-49 Employees,150305,62367,212672,80310,27410,107720,10,10,10,10,10,10 +2015,4,5,3,500+ Employees,50-249 Employees,302267,114652,416919,167050,52150,219200,10,10,10,10,10,10 +2015,4,5,4,500+ Employees,250-499 Employees,131186,49174,180360,72851,22231,95082,10,10,10,10,10,10 +2015,4,5,5,500+ Employees,500+ Employees,1459051,568570,2027621,862767,271029,1133796,10,10,10,10,10,10 +2016,1,0,0,All Firm Sizes,All Firm Sizes,4096713,2079746,6176459,2329524,1034590,3364114,1,1,10,1,1,10 +2016,1,0,1,All Firm Sizes,0-19 Employees,621343,381667,1003010,348177,200454,548631,1,1,10,1,1,10 +2016,1,0,2,All Firm Sizes,20-49 Employees,400367,201481,601848,215931,94184,310115,1,1,10,1,1,10 +2016,1,0,3,All Firm Sizes,50-249 Employees,660287,311506,971793,363659,146345,510004,1,1,10,1,1,10 +2016,1,0,4,All Firm Sizes,250-499 Employees,239161,115012,354173,132675,53505,186180,1,1,10,1,1,10 +2016,1,0,5,All Firm Sizes,500+ Employees,1974956,980300,2955256,1126618,488381,1614999,1,1,10,1,1,10 +2016,1,1,0,0-19 Employees,All Firm Sizes,560868,421085,981953,322634,211394,534028,1,1,10,1,1,10 +2016,1,1,1,0-19 Employees,0-19 Employees,193348,162025,355373,,,,10,10,10,11,11,11 +2016,1,1,2,0-19 Employees,20-49 Employees,76094,52640,128734,,,,10,10,10,11,11,11 +2016,1,1,3,0-19 Employees,50-249 Employees,85880,58516,144396,,,,10,10,10,11,11,11 +2016,1,1,4,0-19 Employees,250-499 Employees,24841,17478,42319,,,,10,10,10,11,11,11 +2016,1,1,5,0-19 Employees,500+ Employees,160885,117986,278871,,,,10,10,10,11,11,11 +2016,1,2,0,20-49 Employees,All Firm Sizes,382533,207020,589553,214653,97906,312559,1,1,10,1,1,10 +2016,1,2,1,20-49 Employees,0-19 Employees,84478,48067,132545,,,,10,10,10,11,11,11 +2016,1,2,2,20-49 Employees,20-49 Employees,65202,34032,99234,,,,10,10,10,11,11,11 +2016,1,2,3,20-49 Employees,50-249 Employees,72892,37738,110630,,,,10,10,10,11,11,11 +2016,1,2,4,20-49 Employees,250-499 Employees,20008,10765,30773,,,,10,10,10,11,11,11 +2016,1,2,5,20-49 Employees,500+ Employees,128060,70136,198196,,,,10,10,10,11,11,11 +2016,1,3,0,50-249 Employees,All Firm Sizes,634311,310895,945206,359103,148345,507448,1,1,10,1,1,10 +2016,1,3,1,50-249 Employees,0-19 Employees,95712,50906,146618,,,,10,10,10,11,11,11 +2016,1,3,2,50-249 Employees,20-49 Employees,75702,35993,111695,,,,10,10,10,11,11,11 +2016,1,3,3,50-249 Employees,50-249 Employees,146093,69882,215975,,,,10,10,10,11,11,11 +2016,1,3,4,50-249 Employees,250-499 Employees,42112,21136,63248,,,,10,10,10,11,11,11 +2016,1,3,5,50-249 Employees,500+ Employees,251839,123160,374999,,,,10,10,10,11,11,11 +2016,1,4,0,250-499 Employees,All Firm Sizes,236295,113699,349994,133782,54043,187825,1,1,10,1,1,10 +2016,1,4,1,250-499 Employees,0-19 Employees,28330,15095,43425,,,,10,10,10,11,11,11 +2016,1,4,2,250-499 Employees,20-49 Employees,21882,10243,32125,,,,10,10,10,11,11,11 +2016,1,4,3,250-499 Employees,50-249 Employees,44931,19929,64860,,,,10,10,10,11,11,11 +2016,1,4,4,250-499 Employees,250-499 Employees,24318,12604,36922,,,,10,10,10,11,11,11 +2016,1,4,5,250-499 Employees,500+ Employees,108689,51990,160679,,,,10,10,10,11,11,11 +2016,1,5,0,500+ Employees,All Firm Sizes,2123686,958594,3082280,1189432,484385,1673817,1,1,10,1,1,10 +2016,1,5,1,500+ Employees,0-19 Employees,202602,97695,300297,,,,10,10,10,11,11,11 +2016,1,5,2,500+ Employees,20-49 Employees,152060,64443,216503,,,,10,10,10,11,11,11 +2016,1,5,3,500+ Employees,50-249 Employees,294357,118676,413033,,,,10,10,10,11,11,11 +2016,1,5,4,500+ Employees,250-499 Employees,122446,50718,173164,,,,10,10,10,11,11,11 +2016,1,5,5,500+ Employees,500+ Employees,1275771,597253,1873024,,,,10,10,10,11,11,11 +2016,2,0,0,All Firm Sizes,All Firm Sizes,4944853,2031672,6976525,2815679,912368,3728047,1,1,10,1,1,10 +2016,2,0,1,All Firm Sizes,0-19 Employees,847251,372093,1219344,452774,167365,620139,1,1,10,1,1,10 +2016,2,0,2,All Firm Sizes,20-49 Employees,489294,197098,686392,261227,84651,345878,1,1,10,1,1,10 +2016,2,0,3,All Firm Sizes,50-249 Employees,783020,305938,1088958,432154,134341,566495,1,1,10,1,1,10 +2016,2,0,4,All Firm Sizes,250-499 Employees,282882,114656,397538,158812,50131,208943,1,1,10,1,1,10 +2016,2,0,5,All Firm Sizes,500+ Employees,2315769,953838,3269607,1358372,428078,1786450,1,1,10,1,1,10 +2016,2,1,0,0-19 Employees,All Firm Sizes,693702,326535,1020237,374625,159688,534313,1,1,10,1,1,10 +2016,2,1,1,0-19 Employees,0-19 Employees,,,,,,,11,11,11,11,11,11 +2016,2,1,2,0-19 Employees,20-49 Employees,,,,,,,11,11,11,11,11,11 +2016,2,1,3,0-19 Employees,50-249 Employees,,,,,,,11,11,11,11,11,11 +2016,2,1,4,0-19 Employees,250-499 Employees,,,,,,,11,11,11,11,11,11 +2016,2,1,5,0-19 Employees,500+ Employees,,,,,,,11,11,11,11,11,11 +2016,2,2,0,20-49 Employees,All Firm Sizes,480173,202831,683004,258352,92728,351080,1,1,10,1,1,10 +2016,2,2,1,20-49 Employees,0-19 Employees,,,,,,,11,11,11,11,11,11 +2016,2,2,2,20-49 Employees,20-49 Employees,,,,,,,11,11,11,11,11,11 +2016,2,2,3,20-49 Employees,50-249 Employees,,,,,,,11,11,11,11,11,11 +2016,2,2,4,20-49 Employees,250-499 Employees,,,,,,,11,11,11,11,11,11 +2016,2,2,5,20-49 Employees,500+ Employees,,,,,,,11,11,11,11,11,11 +2016,2,3,0,50-249 Employees,All Firm Sizes,774389,313225,1087614,426452,142476,568928,1,1,10,1,1,10 +2016,2,3,1,50-249 Employees,0-19 Employees,,,,,,,11,11,11,11,11,11 +2016,2,3,2,50-249 Employees,20-49 Employees,,,,,,,11,11,11,11,11,11 +2016,2,3,3,50-249 Employees,50-249 Employees,,,,,,,11,11,11,11,11,11 +2016,2,3,4,50-249 Employees,250-499 Employees,,,,,,,11,11,11,11,11,11 +2016,2,3,5,50-249 Employees,500+ Employees,,,,,,,11,11,11,11,11,11 +2016,2,4,0,250-499 Employees,All Firm Sizes,289190,116855,406045,160470,52666,213136,1,1,10,1,1,10 +2016,2,4,1,250-499 Employees,0-19 Employees,,,,,,,11,11,11,11,11,11 +2016,2,4,2,250-499 Employees,20-49 Employees,,,,,,,11,11,11,11,11,11 +2016,2,4,3,250-499 Employees,50-249 Employees,,,,,,,11,11,11,11,11,11 +2016,2,4,4,250-499 Employees,250-499 Employees,,,,,,,11,11,11,11,11,11 +2016,2,4,5,250-499 Employees,500+ Employees,,,,,,,11,11,11,11,11,11 +2016,2,5,0,500+ Employees,All Firm Sizes,2492366,999484,3491850,1457264,427844,1885108,1,1,10,1,1,10 +2016,2,5,1,500+ Employees,0-19 Employees,,,,,,,11,11,11,11,11,11 +2016,2,5,2,500+ Employees,20-49 Employees,,,,,,,11,11,11,11,11,11 +2016,2,5,3,500+ Employees,50-249 Employees,,,,,,,11,11,11,11,11,11 +2016,2,5,4,500+ Employees,250-499 Employees,,,,,,,11,11,11,11,11,11 +2016,2,5,5,500+ Employees,500+ Employees,,,,,,,11,11,11,11,11,11 +2016,3,0,0,All Firm Sizes,All Firm Sizes,5575781,2268906,7844687,3202348,1200717,4403065,1,1,10,1,1,10 +2016,3,0,1,All Firm Sizes,0-19 Employees,856750,381264,1238014,453188,191206,644394,1,1,10,1,1,10 +2016,3,0,2,All Firm Sizes,20-49 Employees,521206,205131,726337,276236,101424,377660,1,1,10,1,1,10 +2016,3,0,3,All Firm Sizes,50-249 Employees,850032,324711,1174743,466594,163357,629951,1,1,10,1,1,10 +2016,3,0,4,All Firm Sizes,250-499 Employees,310679,120837,431516,171869,60216,232085,1,1,10,1,1,10 +2016,3,0,5,All Firm Sizes,500+ Employees,2595596,1039775,3635371,1485384,534726,2020110,1,1,10,1,1,10 +2016,3,1,0,0-19 Employees,All Firm Sizes,827552,354780,1182332,423707,180049,603756,1,1,10,1,1,10 +2016,3,1,1,0-19 Employees,0-19 Employees,,,,,,,11,11,11,11,11,11 +2016,3,1,2,0-19 Employees,20-49 Employees,,,,,,,11,11,11,11,11,11 +2016,3,1,3,0-19 Employees,50-249 Employees,,,,,,,11,11,11,11,11,11 +2016,3,1,4,0-19 Employees,250-499 Employees,,,,,,,11,11,11,11,11,11 +2016,3,1,5,0-19 Employees,500+ Employees,,,,,,,11,11,11,11,11,11 +2016,3,2,0,20-49 Employees,All Firm Sizes,535489,219497,754986,287528,109303,396831,1,1,10,1,1,10 +2016,3,2,1,20-49 Employees,0-19 Employees,,,,,,,11,11,11,11,11,11 +2016,3,2,2,20-49 Employees,20-49 Employees,,,,,,,11,11,11,11,11,11 +2016,3,2,3,20-49 Employees,50-249 Employees,,,,,,,11,11,11,11,11,11 +2016,3,2,4,20-49 Employees,250-499 Employees,,,,,,,11,11,11,11,11,11 +2016,3,2,5,20-49 Employees,500+ Employees,,,,,,,11,11,11,11,11,11 +2016,3,3,0,50-249 Employees,All Firm Sizes,859508,335716,1195224,474622,168152,642774,1,1,10,1,1,10 +2016,3,3,1,50-249 Employees,0-19 Employees,,,,,,,11,11,11,11,11,11 +2016,3,3,2,50-249 Employees,20-49 Employees,,,,,,,11,11,11,11,11,11 +2016,3,3,3,50-249 Employees,50-249 Employees,,,,,,,11,11,11,11,11,11 +2016,3,3,4,50-249 Employees,250-499 Employees,,,,,,,11,11,11,11,11,11 +2016,3,3,5,50-249 Employees,500+ Employees,,,,,,,11,11,11,11,11,11 +2016,3,4,0,250-499 Employees,All Firm Sizes,319026,123766,442792,177369,61235,238604,1,1,10,1,1,10 +2016,3,4,1,250-499 Employees,0-19 Employees,,,,,,,11,11,11,11,11,11 +2016,3,4,2,250-499 Employees,20-49 Employees,,,,,,,11,11,11,11,11,11 +2016,3,4,3,250-499 Employees,50-249 Employees,,,,,,,11,11,11,11,11,11 +2016,3,4,4,250-499 Employees,250-499 Employees,,,,,,,11,11,11,11,11,11 +2016,3,4,5,250-499 Employees,500+ Employees,,,,,,,11,11,11,11,11,11 +2016,3,5,0,500+ Employees,All Firm Sizes,2669616,1036514,3706130,1557430,535507,2092937,1,1,10,1,1,10 +2016,3,5,1,500+ Employees,0-19 Employees,,,,,,,11,11,11,11,11,11 +2016,3,5,2,500+ Employees,20-49 Employees,,,,,,,11,11,11,11,11,11 +2016,3,5,3,500+ Employees,50-249 Employees,,,,,,,11,11,11,11,11,11 +2016,3,5,4,500+ Employees,250-499 Employees,,,,,,,11,11,11,11,11,11 +2016,3,5,5,500+ Employees,500+ Employees,,,,,,,11,11,11,11,11,11 +2016,4,0,0,All Firm Sizes,All Firm Sizes,4515769,2130018,6645787,2489263,969249,3458512,1,1,10,1,1,10 +2016,4,0,1,All Firm Sizes,0-19 Employees,654024,337924,991948,355034,158960,513994,1,1,10,1,1,10 +2016,4,0,2,All Firm Sizes,20-49 Employees,394063,185233,579296,209081,81052,290133,1,1,10,1,1,10 +2016,4,0,3,All Firm Sizes,50-249 Employees,686789,300889,987678,369106,133649,502755,1,1,10,1,1,10 +2016,4,0,4,All Firm Sizes,250-499 Employees,261263,114355,375618,140111,50263,190374,1,1,10,1,1,10 +2016,4,0,5,All Firm Sizes,500+ Employees,2289110,1066167,3355277,1249998,468186,1718184,1,1,10,1,1,10 +2016,4,1,0,0-19 Employees,All Firm Sizes,692767,385408,1078175,362583,163507,526090,1,1,10,1,1,10 +2016,4,1,1,0-19 Employees,0-19 Employees,,,,,,,11,11,11,11,11,11 +2016,4,1,2,0-19 Employees,20-49 Employees,,,,,,,11,11,11,11,11,11 +2016,4,1,3,0-19 Employees,50-249 Employees,,,,,,,11,11,11,11,11,11 +2016,4,1,4,0-19 Employees,250-499 Employees,,,,,,,11,11,11,11,11,11 +2016,4,1,5,0-19 Employees,500+ Employees,,,,,,,11,11,11,11,11,11 +2016,4,2,0,20-49 Employees,All Firm Sizes,426093,220358,646451,225532,96488,322020,1,1,10,1,1,10 +2016,4,2,1,20-49 Employees,0-19 Employees,,,,,,,11,11,11,11,11,11 +2016,4,2,2,20-49 Employees,20-49 Employees,,,,,,,11,11,11,11,11,11 +2016,4,2,3,20-49 Employees,50-249 Employees,,,,,,,11,11,11,11,11,11 +2016,4,2,4,20-49 Employees,250-499 Employees,,,,,,,11,11,11,11,11,11 +2016,4,2,5,20-49 Employees,500+ Employees,,,,,,,11,11,11,11,11,11 +2016,4,3,0,50-249 Employees,All Firm Sizes,695941,327420,1023361,374951,146271,521222,1,1,10,1,1,10 +2016,4,3,1,50-249 Employees,0-19 Employees,,,,,,,11,11,11,11,11,11 +2016,4,3,2,50-249 Employees,20-49 Employees,,,,,,,11,11,11,11,11,11 +2016,4,3,3,50-249 Employees,50-249 Employees,,,,,,,11,11,11,11,11,11 +2016,4,3,4,50-249 Employees,250-499 Employees,,,,,,,11,11,11,11,11,11 +2016,4,3,5,50-249 Employees,500+ Employees,,,,,,,11,11,11,11,11,11 +2016,4,4,0,250-499 Employees,All Firm Sizes,260880,118408,379288,140116,53348,193464,1,1,10,1,1,10 +2016,4,4,1,250-499 Employees,0-19 Employees,,,,,,,11,11,11,11,11,11 +2016,4,4,2,250-499 Employees,20-49 Employees,,,,,,,11,11,11,11,11,11 +2016,4,4,3,250-499 Employees,50-249 Employees,,,,,,,11,11,11,11,11,11 +2016,4,4,4,250-499 Employees,250-499 Employees,,,,,,,11,11,11,11,11,11 +2016,4,4,5,250-499 Employees,500+ Employees,,,,,,,11,11,11,11,11,11 +2016,4,5,0,500+ Employees,All Firm Sizes,2262518,964039,3226557,1264751,445728,1710479,1,1,10,1,1,10 +2016,4,5,1,500+ Employees,0-19 Employees,,,,,,,11,11,11,11,11,11 +2016,4,5,2,500+ Employees,20-49 Employees,,,,,,,11,11,11,11,11,11 +2016,4,5,3,500+ Employees,50-249 Employees,,,,,,,11,11,11,11,11,11 +2016,4,5,4,500+ Employees,250-499 Employees,,,,,,,11,11,11,11,11,11 +2016,4,5,5,500+ Employees,500+ Employees,,,,,,,11,11,11,11,11,11 +2017,1,0,0,All Firm Sizes,All Firm Sizes,4404653,2173696,6578349,2509523,1076253,3585776,1,1,10,1,1,10 +2017,1,0,1,All Firm Sizes,0-19 Employees,656647,379841,1036488,369263,196307,565570,1,1,10,1,1,10 +2017,1,0,2,All Firm Sizes,20-49 Employees,430743,204109,634852,232668,93513,326181,1,1,10,1,1,10 +2017,1,0,3,All Firm Sizes,50-249 Employees,715879,319661,1035540,395855,146956,542811,1,1,10,1,1,10 +2017,1,0,4,All Firm Sizes,250-499 Employees,262366,122504,384870,144341,56147,200488,1,1,10,1,1,10 +2017,1,0,5,All Firm Sizes,500+ Employees,2128086,1057904,3185990,1216463,532470,1748933,1,1,10,1,1,10 +2017,1,1,0,0-19 Employees,All Firm Sizes,590861,424176,1015037,342455,211466,553921,1,1,10,1,1,10 +2017,1,1,1,0-19 Employees,0-19 Employees,,,,,,,11,11,11,11,11,11 +2017,1,1,2,0-19 Employees,20-49 Employees,,,,,,,11,11,11,11,11,11 +2017,1,1,3,0-19 Employees,50-249 Employees,,,,,,,11,11,11,11,11,11 +2017,1,1,4,0-19 Employees,250-499 Employees,,,,,,,11,11,11,11,11,11 +2017,1,1,5,0-19 Employees,500+ Employees,,,,,,,11,11,11,11,11,11 +2017,1,2,0,20-49 Employees,All Firm Sizes,411532,211397,622929,232399,98691,331090,1,1,10,1,1,10 +2017,1,2,1,20-49 Employees,0-19 Employees,,,,,,,11,11,11,11,11,11 +2017,1,2,2,20-49 Employees,20-49 Employees,,,,,,,11,11,11,11,11,11 +2017,1,2,3,20-49 Employees,50-249 Employees,,,,,,,11,11,11,11,11,11 +2017,1,2,4,20-49 Employees,250-499 Employees,,,,,,,11,11,11,11,11,11 +2017,1,2,5,20-49 Employees,500+ Employees,,,,,,,11,11,11,11,11,11 +2017,1,3,0,50-249 Employees,All Firm Sizes,681309,314446,995755,386779,147166,533945,1,1,10,1,1,10 +2017,1,3,1,50-249 Employees,0-19 Employees,,,,,,,11,11,11,11,11,11 +2017,1,3,2,50-249 Employees,20-49 Employees,,,,,,,11,11,11,11,11,11 +2017,1,3,3,50-249 Employees,50-249 Employees,,,,,,,11,11,11,11,11,11 +2017,1,3,4,50-249 Employees,250-499 Employees,,,,,,,11,11,11,11,11,11 +2017,1,3,5,50-249 Employees,500+ Employees,,,,,,,11,11,11,11,11,11 +2017,1,4,0,250-499 Employees,All Firm Sizes,259212,116518,375730,145964,54049,200013,1,1,10,1,1,10 +2017,1,4,1,250-499 Employees,0-19 Employees,,,,,,,11,11,11,11,11,11 +2017,1,4,2,250-499 Employees,20-49 Employees,,,,,,,11,11,11,11,11,11 +2017,1,4,3,250-499 Employees,50-249 Employees,,,,,,,11,11,11,11,11,11 +2017,1,4,4,250-499 Employees,250-499 Employees,,,,,,,11,11,11,11,11,11 +2017,1,4,5,250-499 Employees,500+ Employees,,,,,,,11,11,11,11,11,11 +2017,1,5,0,500+ Employees,All Firm Sizes,2288249,1037003,3325252,1285368,526569,1811937,1,1,10,1,1,10 +2017,1,5,1,500+ Employees,0-19 Employees,,,,,,,11,11,11,11,11,11 +2017,1,5,2,500+ Employees,20-49 Employees,,,,,,,11,11,11,11,11,11 +2017,1,5,3,500+ Employees,50-249 Employees,,,,,,,11,11,11,11,11,11 +2017,1,5,4,500+ Employees,250-499 Employees,,,,,,,11,11,11,11,11,11 +2017,1,5,5,500+ Employees,500+ Employees,,,,,,,11,11,11,11,11,11 +2017,2,0,0,All Firm Sizes,All Firm Sizes,5202997,2116023,7319020,2942059,963997,3906056,1,1,10,1,1,10 +2017,2,0,1,All Firm Sizes,0-19 Employees,884918,384020,1268938,472079,174727,646806,1,1,10,1,1,10 +2017,2,0,2,All Firm Sizes,20-49 Employees,517560,208318,725878,274201,90987,365188,1,1,10,1,1,10 +2017,2,0,3,All Firm Sizes,50-249 Employees,834719,322528,1157247,456590,143283,599873,1,1,10,1,1,10 +2017,2,0,4,All Firm Sizes,250-499 Employees,303025,120130,423155,167582,53483,221065,1,1,10,1,1,10 +2017,2,0,5,All Firm Sizes,500+ Employees,2435187,991762,3426949,1419297,452647,1871944,1,1,10,1,1,10 +2017,2,1,0,0-19 Employees,All Firm Sizes,723291,332474,1055765,390508,164188,554696,1,1,10,1,1,10 +2017,2,1,1,0-19 Employees,0-19 Employees,,,,,,,11,11,11,11,11,11 +2017,2,1,2,0-19 Employees,20-49 Employees,,,,,,,11,11,11,11,11,11 +2017,2,1,3,0-19 Employees,50-249 Employees,,,,,,,11,11,11,11,11,11 +2017,2,1,4,0-19 Employees,250-499 Employees,,,,,,,11,11,11,11,11,11 +2017,2,1,5,0-19 Employees,500+ Employees,,,,,,,11,11,11,11,11,11 +2017,2,2,0,20-49 Employees,All Firm Sizes,506779,210083,716862,270966,96771,367737,1,1,10,1,1,10 +2017,2,2,1,20-49 Employees,0-19 Employees,,,,,,,11,11,11,11,11,11 +2017,2,2,2,20-49 Employees,20-49 Employees,,,,,,,11,11,11,11,11,11 +2017,2,2,3,20-49 Employees,50-249 Employees,,,,,,,11,11,11,11,11,11 +2017,2,2,4,20-49 Employees,250-499 Employees,,,,,,,11,11,11,11,11,11 +2017,2,2,5,20-49 Employees,500+ Employees,,,,,,,11,11,11,11,11,11 +2017,2,3,0,50-249 Employees,All Firm Sizes,822227,324326,1146553,450903,148934,599837,1,1,10,1,1,10 +2017,2,3,1,50-249 Employees,0-19 Employees,,,,,,,11,11,11,11,11,11 +2017,2,3,2,50-249 Employees,20-49 Employees,,,,,,,11,11,11,11,11,11 +2017,2,3,3,50-249 Employees,50-249 Employees,,,,,,,11,11,11,11,11,11 +2017,2,3,4,50-249 Employees,250-499 Employees,,,,,,,11,11,11,11,11,11 +2017,2,3,5,50-249 Employees,500+ Employees,,,,,,,11,11,11,11,11,11 +2017,2,4,0,250-499 Employees,All Firm Sizes,309887,122915,432802,169580,55701,225281,1,1,10,1,1,10 +2017,2,4,1,250-499 Employees,0-19 Employees,,,,,,,11,11,11,11,11,11 +2017,2,4,2,250-499 Employees,20-49 Employees,,,,,,,11,11,11,11,11,11 +2017,2,4,3,250-499 Employees,50-249 Employees,,,,,,,11,11,11,11,11,11 +2017,2,4,4,250-499 Employees,250-499 Employees,,,,,,,11,11,11,11,11,11 +2017,2,4,5,250-499 Employees,500+ Employees,,,,,,,11,11,11,11,11,11 +2017,2,5,0,500+ Employees,All Firm Sizes,2615529,1054564,3670093,1517885,459321,1977206,1,1,10,1,1,10 +2017,2,5,1,500+ Employees,0-19 Employees,,,,,,,11,11,11,11,11,11 +2017,2,5,2,500+ Employees,20-49 Employees,,,,,,,11,11,11,11,11,11 +2017,2,5,3,500+ Employees,50-249 Employees,,,,,,,11,11,11,11,11,11 +2017,2,5,4,500+ Employees,250-499 Employees,,,,,,,11,11,11,11,11,11 +2017,2,5,5,500+ Employees,500+ Employees,,,,,,,11,11,11,11,11,11 +2017,3,0,0,All Firm Sizes,All Firm Sizes,5529195,2291508,7820703,3146907,1196497,4343404,1,1,10,1,1,10 +2017,3,0,1,All Firm Sizes,0-19 Employees,848308,381026,1229334,445793,189257,635050,1,1,10,1,1,10 +2017,3,0,2,All Firm Sizes,20-49 Employees,519568,207769,727337,272465,101081,373546,1,1,10,1,1,10 +2017,3,0,3,All Firm Sizes,50-249 Employees,853526,329986,1183512,464157,163938,628095,1,1,10,1,1,10 +2017,3,0,4,All Firm Sizes,250-499 Employees,314714,122660,437374,170056,59829,229885,1,1,10,1,1,10 +2017,3,0,5,All Firm Sizes,500+ Employees,2569836,1050781,3620617,1459553,531241,1990794,1,1,10,1,1,10 +2017,3,1,0,0-19 Employees,All Firm Sizes,818926,353352,1172278,415069,177200,592269,1,1,10,1,1,10 +2017,3,1,1,0-19 Employees,0-19 Employees,,,,,,,11,11,11,11,11,11 +2017,3,1,2,0-19 Employees,20-49 Employees,,,,,,,11,11,11,11,11,11 +2017,3,1,3,0-19 Employees,50-249 Employees,,,,,,,11,11,11,11,11,11 +2017,3,1,4,0-19 Employees,250-499 Employees,,,,,,,11,11,11,11,11,11 +2017,3,1,5,0-19 Employees,500+ Employees,,,,,,,11,11,11,11,11,11 +2017,3,2,0,20-49 Employees,All Firm Sizes,536993,220556,757549,285463,108060,393523,1,1,10,1,1,10 +2017,3,2,1,20-49 Employees,0-19 Employees,,,,,,,11,11,11,11,11,11 +2017,3,2,2,20-49 Employees,20-49 Employees,,,,,,,11,11,11,11,11,11 +2017,3,2,3,20-49 Employees,50-249 Employees,,,,,,,11,11,11,11,11,11 +2017,3,2,4,20-49 Employees,250-499 Employees,,,,,,,11,11,11,11,11,11 +2017,3,2,5,20-49 Employees,500+ Employees,,,,,,,11,11,11,11,11,11 +2017,3,3,0,50-249 Employees,All Firm Sizes,861791,340574,1202365,471508,168492,640000,1,1,10,1,1,10 +2017,3,3,1,50-249 Employees,0-19 Employees,,,,,,,11,11,11,11,11,11 +2017,3,3,2,50-249 Employees,20-49 Employees,,,,,,,11,11,11,11,11,11 +2017,3,3,3,50-249 Employees,50-249 Employees,,,,,,,11,11,11,11,11,11 +2017,3,3,4,50-249 Employees,250-499 Employees,,,,,,,11,11,11,11,11,11 +2017,3,3,5,50-249 Employees,500+ Employees,,,,,,,11,11,11,11,11,11 +2017,3,4,0,250-499 Employees,All Firm Sizes,318809,127275,446084,174433,61770,236203,1,1,10,1,1,10 +2017,3,4,1,250-499 Employees,0-19 Employees,,,,,,,11,11,11,11,11,11 +2017,3,4,2,250-499 Employees,20-49 Employees,,,,,,,11,11,11,11,11,11 +2017,3,4,3,250-499 Employees,50-249 Employees,,,,,,,11,11,11,11,11,11 +2017,3,4,4,250-499 Employees,250-499 Employees,,,,,,,11,11,11,11,11,11 +2017,3,4,5,250-499 Employees,500+ Employees,,,,,,,11,11,11,11,11,11 +2017,3,5,0,500+ Employees,All Firm Sizes,2629360,1048643,3678003,1522326,531574,2053900,1,1,10,1,1,10 +2017,3,5,1,500+ Employees,0-19 Employees,,,,,,,11,11,11,11,11,11 +2017,3,5,2,500+ Employees,20-49 Employees,,,,,,,11,11,11,11,11,11 +2017,3,5,3,500+ Employees,50-249 Employees,,,,,,,11,11,11,11,11,11 +2017,3,5,4,500+ Employees,250-499 Employees,,,,,,,11,11,11,11,11,11 +2017,3,5,5,500+ Employees,500+ Employees,,,,,,,11,11,11,11,11,11 +2017,4,0,0,All Firm Sizes,All Firm Sizes,4784048,2195404,6979452,2661536,982773,3644309,1,1,10,1,1,10 +2017,4,0,1,All Firm Sizes,0-19 Employees,690443,344314,1034757,380083,160161,540244,1,1,10,1,1,10 +2017,4,0,2,All Firm Sizes,20-49 Employees,426035,195288,621323,228980,83852,312832,1,1,10,1,1,10 +2017,4,0,3,All Firm Sizes,50-249 Employees,741865,314826,1056691,403771,138057,541828,1,1,10,1,1,10 +2017,4,0,4,All Firm Sizes,250-499 Employees,282025,120804,402829,152938,52295,205233,1,1,10,1,1,10 +2017,4,0,5,All Firm Sizes,500+ Employees,2415174,1098085,3513259,1330802,474725,1805527,1,1,10,1,1,10 +2017,4,1,0,0-19 Employees,All Firm Sizes,727490,398124,1125614,386795,167309,554104,1,1,10,1,1,10 +2017,4,1,1,0-19 Employees,0-19 Employees,,,,,,,11,11,11,11,11,11 +2017,4,1,2,0-19 Employees,20-49 Employees,,,,,,,11,11,11,11,11,11 +2017,4,1,3,0-19 Employees,50-249 Employees,,,,,,,11,11,11,11,11,11 +2017,4,1,4,0-19 Employees,250-499 Employees,,,,,,,11,11,11,11,11,11 +2017,4,1,5,0-19 Employees,500+ Employees,,,,,,,11,11,11,11,11,11 +2017,4,2,0,20-49 Employees,All Firm Sizes,454511,228893,683404,243796,99146,342942,1,1,10,1,1,10 +2017,4,2,1,20-49 Employees,0-19 Employees,,,,,,,11,11,11,11,11,11 +2017,4,2,2,20-49 Employees,20-49 Employees,,,,,,,11,11,11,11,11,11 +2017,4,2,3,20-49 Employees,50-249 Employees,,,,,,,11,11,11,11,11,11 +2017,4,2,4,20-49 Employees,250-499 Employees,,,,,,,11,11,11,11,11,11 +2017,4,2,5,20-49 Employees,500+ Employees,,,,,,,11,11,11,11,11,11 +2017,4,3,0,50-249 Employees,All Firm Sizes,745100,342771,1087871,407299,150527,557826,1,1,10,1,1,10 +2017,4,3,1,50-249 Employees,0-19 Employees,,,,,,,11,11,11,11,11,11 +2017,4,3,2,50-249 Employees,20-49 Employees,,,,,,,11,11,11,11,11,11 +2017,4,3,3,50-249 Employees,50-249 Employees,,,,,,,11,11,11,11,11,11 +2017,4,3,4,50-249 Employees,250-499 Employees,,,,,,,11,11,11,11,11,11 +2017,4,3,5,50-249 Employees,500+ Employees,,,,,,,11,11,11,11,11,11 +2017,4,4,0,250-499 Employees,All Firm Sizes,283345,125375,408720,154010,55721,209731,1,1,10,1,1,10 +2017,4,4,1,250-499 Employees,0-19 Employees,,,,,,,11,11,11,11,11,11 +2017,4,4,2,250-499 Employees,20-49 Employees,,,,,,,11,11,11,11,11,11 +2017,4,4,3,250-499 Employees,50-249 Employees,,,,,,,11,11,11,11,11,11 +2017,4,4,4,250-499 Employees,250-499 Employees,,,,,,,11,11,11,11,11,11 +2017,4,4,5,250-499 Employees,500+ Employees,,,,,,,11,11,11,11,11,11 +2017,4,5,0,500+ Employees,All Firm Sizes,2386577,988541,3375118,1341565,452684,1794249,1,1,10,1,1,10 +2017,4,5,1,500+ Employees,0-19 Employees,,,,,,,11,11,11,11,11,11 +2017,4,5,2,500+ Employees,20-49 Employees,,,,,,,11,11,11,11,11,11 +2017,4,5,3,500+ Employees,50-249 Employees,,,,,,,11,11,11,11,11,11 +2017,4,5,4,500+ Employees,250-499 Employees,,,,,,,11,11,11,11,11,11 +2017,4,5,5,500+ Employees,500+ Employees,,,,,,,11,11,11,11,11,11 +2018,1,0,0,All Firm Sizes,All Firm Sizes,4643463,2148275,6791738,2635746,1053349,3689095,1,1,10,1,1,10 +2018,1,0,1,All Firm Sizes,0-19 Employees,675073,383294,1058367,379583,201161,580744,1,1,10,1,1,10 +2018,1,0,2,All Firm Sizes,20-49 Employees,450788,210068,660856,242697,97255,339952,1,1,10,1,1,10 +2018,1,0,3,All Firm Sizes,50-249 Employees,755828,328437,1084265,416105,153262,569367,1,1,10,1,1,10 +2018,1,0,4,All Firm Sizes,250-499 Employees,275293,121833,397126,151489,56018,207507,1,1,10,1,1,10 +2018,1,0,5,All Firm Sizes,500+ Employees,2272661,1013175,3285836,1293238,492751,1785989,1,1,10,1,1,10 +2018,1,1,0,0-19 Employees,All Firm Sizes,616745,430292,1047037,355867,218148,574015,1,1,10,1,1,10 +2018,1,1,1,0-19 Employees,0-19 Employees,,,,,,,11,11,11,11,11,11 +2018,1,1,2,0-19 Employees,20-49 Employees,,,,,,,11,11,11,11,11,11 +2018,1,1,3,0-19 Employees,50-249 Employees,,,,,,,11,11,11,11,11,11 +2018,1,1,4,0-19 Employees,250-499 Employees,,,,,,,11,11,11,11,11,11 +2018,1,1,5,0-19 Employees,500+ Employees,,,,,,,11,11,11,11,11,11 +2018,1,2,0,20-49 Employees,All Firm Sizes,437874,216477,654351,245382,102359,347741,1,1,10,1,1,10 +2018,1,2,1,20-49 Employees,0-19 Employees,,,,,,,11,11,11,11,11,11 +2018,1,2,2,20-49 Employees,20-49 Employees,,,,,,,11,11,11,11,11,11 +2018,1,2,3,20-49 Employees,50-249 Employees,,,,,,,11,11,11,11,11,11 +2018,1,2,4,20-49 Employees,250-499 Employees,,,,,,,11,11,11,11,11,11 +2018,1,2,5,20-49 Employees,500+ Employees,,,,,,,11,11,11,11,11,11 +2018,1,3,0,50-249 Employees,All Firm Sizes,723713,323285,1046998,407979,152813,560792,1,1,10,1,1,10 +2018,1,3,1,50-249 Employees,0-19 Employees,,,,,,,11,11,11,11,11,11 +2018,1,3,2,50-249 Employees,20-49 Employees,,,,,,,11,11,11,11,11,11 +2018,1,3,3,50-249 Employees,50-249 Employees,,,,,,,11,11,11,11,11,11 +2018,1,3,4,50-249 Employees,250-499 Employees,,,,,,,11,11,11,11,11,11 +2018,1,3,5,50-249 Employees,500+ Employees,,,,,,,11,11,11,11,11,11 +2018,1,4,0,250-499 Employees,All Firm Sizes,267483,121680,389163,151431,57131,208562,1,1,10,1,1,10 +2018,1,4,1,250-499 Employees,0-19 Employees,,,,,,,11,11,11,11,11,11 +2018,1,4,2,250-499 Employees,20-49 Employees,,,,,,,11,11,11,11,11,11 +2018,1,4,3,250-499 Employees,50-249 Employees,,,,,,,11,11,11,11,11,11 +2018,1,4,4,250-499 Employees,250-499 Employees,,,,,,,11,11,11,11,11,11 +2018,1,4,5,250-499 Employees,500+ Employees,,,,,,,11,11,11,11,11,11 +2018,1,5,0,500+ Employees,All Firm Sizes,2421218,984742,3405960,1354029,481732,1835761,1,1,10,1,1,10 +2018,1,5,1,500+ Employees,0-19 Employees,,,,,,,11,11,11,11,11,11 +2018,1,5,2,500+ Employees,20-49 Employees,,,,,,,11,11,11,11,11,11 +2018,1,5,3,500+ Employees,50-249 Employees,,,,,,,11,11,11,11,11,11 +2018,1,5,4,500+ Employees,250-499 Employees,,,,,,,11,11,11,11,11,11 +2018,1,5,5,500+ Employees,500+ Employees,,,,,,,11,11,11,11,11,11 +2018,2,0,0,All Firm Sizes,All Firm Sizes,5441842,2182014,7623856,3081508,989549,4071057,1,1,10,1,1,10 +2018,2,0,1,All Firm Sizes,0-19 Employees,908669,389983,1298652,486132,177375,663507,1,1,10,1,1,10 +2018,2,0,2,All Firm Sizes,20-49 Employees,541073,214785,755858,286565,93199,379764,1,1,10,1,1,10 +2018,2,0,3,All Firm Sizes,50-249 Employees,877532,334789,1212321,481842,148563,630405,1,1,10,1,1,10 +2018,2,0,4,All Firm Sizes,250-499 Employees,316075,122327,438402,176185,53811,229996,1,1,10,1,1,10 +2018,2,0,5,All Firm Sizes,500+ Employees,2564370,1029929,3594299,1494535,467623,1962158,1,1,10,1,1,10 +2018,2,1,0,0-19 Employees,All Firm Sizes,747471,340471,1087942,405713,168044,573757,1,1,10,1,1,10 +2018,2,1,1,0-19 Employees,0-19 Employees,,,,,,,11,11,11,11,11,11 +2018,2,1,2,0-19 Employees,20-49 Employees,,,,,,,11,11,11,11,11,11 +2018,2,1,3,0-19 Employees,50-249 Employees,,,,,,,11,11,11,11,11,11 +2018,2,1,4,0-19 Employees,250-499 Employees,,,,,,,11,11,11,11,11,11 +2018,2,1,5,0-19 Employees,500+ Employees,,,,,,,11,11,11,11,11,11 +2018,2,2,0,20-49 Employees,All Firm Sizes,533910,218509,752419,286889,100278,387167,1,1,10,1,1,10 +2018,2,2,1,20-49 Employees,0-19 Employees,,,,,,,11,11,11,11,11,11 +2018,2,2,2,20-49 Employees,20-49 Employees,,,,,,,11,11,11,11,11,11 +2018,2,2,3,20-49 Employees,50-249 Employees,,,,,,,11,11,11,11,11,11 +2018,2,2,4,20-49 Employees,250-499 Employees,,,,,,,11,11,11,11,11,11 +2018,2,2,5,20-49 Employees,500+ Employees,,,,,,,11,11,11,11,11,11 +2018,2,3,0,50-249 Employees,All Firm Sizes,866363,339108,1205471,476262,154792,631054,1,1,10,1,1,10 +2018,2,3,1,50-249 Employees,0-19 Employees,,,,,,,11,11,11,11,11,11 +2018,2,3,2,50-249 Employees,20-49 Employees,,,,,,,11,11,11,11,11,11 +2018,2,3,3,50-249 Employees,50-249 Employees,,,,,,,11,11,11,11,11,11 +2018,2,3,4,50-249 Employees,250-499 Employees,,,,,,,11,11,11,11,11,11 +2018,2,3,5,50-249 Employees,500+ Employees,,,,,,,11,11,11,11,11,11 +2018,2,4,0,250-499 Employees,All Firm Sizes,320286,122756,443042,177017,55386,232403,1,1,10,1,1,10 +2018,2,4,1,250-499 Employees,0-19 Employees,,,,,,,11,11,11,11,11,11 +2018,2,4,2,250-499 Employees,20-49 Employees,,,,,,,11,11,11,11,11,11 +2018,2,4,3,250-499 Employees,50-249 Employees,,,,,,,11,11,11,11,11,11 +2018,2,4,4,250-499 Employees,250-499 Employees,,,,,,,11,11,11,11,11,11 +2018,2,4,5,250-499 Employees,500+ Employees,,,,,,,11,11,11,11,11,11 +2018,2,5,0,500+ Employees,All Firm Sizes,2738535,1087353,3825888,1587400,471555,2058955,1,1,10,1,1,10 +2018,2,5,1,500+ Employees,0-19 Employees,,,,,,,11,11,11,11,11,11 +2018,2,5,2,500+ Employees,20-49 Employees,,,,,,,11,11,11,11,11,11 +2018,2,5,3,500+ Employees,50-249 Employees,,,,,,,11,11,11,11,11,11 +2018,2,5,4,500+ Employees,250-499 Employees,,,,,,,11,11,11,11,11,11 +2018,2,5,5,500+ Employees,500+ Employees,,,,,,,11,11,11,11,11,11 +2018,3,0,0,All Firm Sizes,All Firm Sizes,5833308,2370111,8203419,3327851,1237671,4565522,1,1,10,1,1,10 +2018,3,0,1,All Firm Sizes,0-19 Employees,877522,386698,1264220,461934,191863,653797,1,1,10,1,1,10 +2018,3,0,2,All Firm Sizes,20-49 Employees,545259,214860,760119,286532,104228,390760,1,1,10,1,1,10 +2018,3,0,3,All Firm Sizes,50-249 Employees,898211,342210,1240421,489917,171150,661067,1,1,10,1,1,10 +2018,3,0,4,All Firm Sizes,250-499 Employees,330497,127473,457970,181234,62589,243823,1,1,10,1,1,10 +2018,3,0,5,All Firm Sizes,500+ Employees,2740247,1096478,3836725,1558845,554727,2113572,1,1,10,1,1,10 +2018,3,1,0,0-19 Employees,All Firm Sizes,850207,361700,1211907,432604,182589,615193,1,1,10,1,1,10 +2018,3,1,1,0-19 Employees,0-19 Employees,,,,,,,11,11,11,11,11,11 +2018,3,1,2,0-19 Employees,20-49 Employees,,,,,,,11,11,11,11,11,11 +2018,3,1,3,0-19 Employees,50-249 Employees,,,,,,,11,11,11,11,11,11 +2018,3,1,4,0-19 Employees,250-499 Employees,,,,,,,11,11,11,11,11,11 +2018,3,1,5,0-19 Employees,500+ Employees,,,,,,,11,11,11,11,11,11 +2018,3,2,0,20-49 Employees,All Firm Sizes,565918,229339,795257,300620,112204,412824,1,1,10,1,1,10 +2018,3,2,1,20-49 Employees,0-19 Employees,,,,,,,11,11,11,11,11,11 +2018,3,2,2,20-49 Employees,20-49 Employees,,,,,,,11,11,11,11,11,11 +2018,3,2,3,20-49 Employees,50-249 Employees,,,,,,,11,11,11,11,11,11 +2018,3,2,4,20-49 Employees,250-499 Employees,,,,,,,11,11,11,11,11,11 +2018,3,2,5,20-49 Employees,500+ Employees,,,,,,,11,11,11,11,11,11 +2018,3,3,0,50-249 Employees,All Firm Sizes,911704,354629,1266333,499217,175172,674389,1,1,10,1,1,10 +2018,3,3,1,50-249 Employees,0-19 Employees,,,,,,,11,11,11,11,11,11 +2018,3,3,2,50-249 Employees,20-49 Employees,,,,,,,11,11,11,11,11,11 +2018,3,3,3,50-249 Employees,50-249 Employees,,,,,,,11,11,11,11,11,11 +2018,3,3,4,50-249 Employees,250-499 Employees,,,,,,,11,11,11,11,11,11 +2018,3,3,5,50-249 Employees,500+ Employees,,,,,,,11,11,11,11,11,11 +2018,3,4,0,250-499 Employees,All Firm Sizes,333633,130408,464041,183755,64128,247883,1,1,10,1,1,10 +2018,3,4,1,250-499 Employees,0-19 Employees,,,,,,,11,11,11,11,11,11 +2018,3,4,2,250-499 Employees,20-49 Employees,,,,,,,11,11,11,11,11,11 +2018,3,4,3,250-499 Employees,50-249 Employees,,,,,,,11,11,11,11,11,11 +2018,3,4,4,250-499 Employees,250-499 Employees,,,,,,,11,11,11,11,11,11 +2018,3,4,5,250-499 Employees,500+ Employees,,,,,,,11,11,11,11,11,11 +2018,3,5,0,500+ Employees,All Firm Sizes,2796396,1089357,3885753,1623676,553331,2177007,1,1,10,1,1,10 +2018,3,5,1,500+ Employees,0-19 Employees,,,,,,,11,11,11,11,11,11 +2018,3,5,2,500+ Employees,20-49 Employees,,,,,,,11,11,11,11,11,11 +2018,3,5,3,500+ Employees,50-249 Employees,,,,,,,11,11,11,11,11,11 +2018,3,5,4,500+ Employees,250-499 Employees,,,,,,,11,11,11,11,11,11 +2018,3,5,5,500+ Employees,500+ Employees,,,,,,,11,11,11,11,11,11 +2018,4,0,0,All Firm Sizes,All Firm Sizes,5051098,2267476,7318574,2821473,1030223,3851696,1,1,10,1,1,10 +2018,4,0,1,All Firm Sizes,0-19 Employees,710451,350033,1060484,393137,164187,557324,1,1,10,1,1,10 +2018,4,0,2,All Firm Sizes,20-49 Employees,445684,199856,645540,239730,86701,326431,1,1,10,1,1,10 +2018,4,0,3,All Firm Sizes,50-249 Employees,776057,321458,1097515,425331,142532,567863,1,1,10,1,1,10 +2018,4,0,4,All Firm Sizes,250-499 Employees,296091,122292,418383,161533,53809,215342,1,1,10,1,1,10 +2018,4,0,5,All Firm Sizes,500+ Employees,2579920,1147729,3727649,1425966,506735,1932701,1,1,10,1,1,10 +2018,4,1,0,0-19 Employees,All Firm Sizes,762628,404800,1167428,406213,171568,577781,1,1,10,1,1,10 +2018,4,1,1,0-19 Employees,0-19 Employees,,,,,,,11,11,11,11,11,11 +2018,4,1,2,0-19 Employees,20-49 Employees,,,,,,,11,11,11,11,11,11 +2018,4,1,3,0-19 Employees,50-249 Employees,,,,,,,11,11,11,11,11,11 +2018,4,1,4,0-19 Employees,250-499 Employees,,,,,,,11,11,11,11,11,11 +2018,4,1,5,0-19 Employees,500+ Employees,,,,,,,11,11,11,11,11,11 +2018,4,2,0,20-49 Employees,All Firm Sizes,484126,236264,720390,259825,103084,362909,1,1,10,1,1,10 +2018,4,2,1,20-49 Employees,0-19 Employees,,,,,,,11,11,11,11,11,11 +2018,4,2,2,20-49 Employees,20-49 Employees,,,,,,,11,11,11,11,11,11 +2018,4,2,3,20-49 Employees,50-249 Employees,,,,,,,11,11,11,11,11,11 +2018,4,2,4,20-49 Employees,250-499 Employees,,,,,,,11,11,11,11,11,11 +2018,4,2,5,20-49 Employees,500+ Employees,,,,,,,11,11,11,11,11,11 +2018,4,3,0,50-249 Employees,All Firm Sizes,786359,351793,1138152,432067,156450,588517,1,1,10,1,1,10 +2018,4,3,1,50-249 Employees,0-19 Employees,,,,,,,11,11,11,11,11,11 +2018,4,3,2,50-249 Employees,20-49 Employees,,,,,,,11,11,11,11,11,11 +2018,4,3,3,50-249 Employees,50-249 Employees,,,,,,,11,11,11,11,11,11 +2018,4,3,4,50-249 Employees,250-499 Employees,,,,,,,11,11,11,11,11,11 +2018,4,3,5,50-249 Employees,500+ Employees,,,,,,,11,11,11,11,11,11 +2018,4,4,0,250-499 Employees,All Firm Sizes,293660,125210,418870,160610,55865,216475,1,1,10,1,1,10 +2018,4,4,1,250-499 Employees,0-19 Employees,,,,,,,11,11,11,11,11,11 +2018,4,4,2,250-499 Employees,20-49 Employees,,,,,,,11,11,11,11,11,11 +2018,4,4,3,250-499 Employees,50-249 Employees,,,,,,,11,11,11,11,11,11 +2018,4,4,4,250-499 Employees,250-499 Employees,,,,,,,11,11,11,11,11,11 +2018,4,4,5,250-499 Employees,500+ Employees,,,,,,,11,11,11,11,11,11 +2018,4,5,0,500+ Employees,All Firm Sizes,2528579,1034885,3563464,1427625,483885,1911510,1,1,10,1,1,10 +2018,4,5,1,500+ Employees,0-19 Employees,,,,,,,11,11,11,11,11,11 +2018,4,5,2,500+ Employees,20-49 Employees,,,,,,,11,11,11,11,11,11 +2018,4,5,3,500+ Employees,50-249 Employees,,,,,,,11,11,11,11,11,11 +2018,4,5,4,500+ Employees,250-499 Employees,,,,,,,11,11,11,11,11,11 +2018,4,5,5,500+ Employees,500+ Employees,,,,,,,11,11,11,11,11,11 +2019,1,0,0,All Firm Sizes,All Firm Sizes,4676152,2172740,6848892,2662877,1063634,3726511,1,1,10,1,1,10 +2019,1,0,1,All Firm Sizes,0-19 Employees,666314,375395,1041709,373504,195623,569127,1,1,10,1,1,10 +2019,1,0,2,All Firm Sizes,20-49 Employees,449903,208586,658489,242182,96105,338287,1,1,10,1,1,10 +2019,1,0,3,All Firm Sizes,50-249 Employees,753497,327526,1081023,416614,154071,570685,1,1,10,1,1,10 +2019,1,0,4,All Firm Sizes,250-499 Employees,286177,124001,410178,159062,57409,216471,1,1,10,1,1,10 +2019,1,0,5,All Firm Sizes,500+ Employees,2295865,1039139,3335004,1309777,504849,1814626,1,1,10,1,1,10 +2019,1,1,0,0-19 Employees,All Firm Sizes,614219,428540,1042759,356105,216113,572218,1,1,10,1,1,10 +2019,1,1,1,0-19 Employees,0-19 Employees,,,,,,,11,11,11,11,11,11 +2019,1,1,2,0-19 Employees,20-49 Employees,,,,,,,11,11,11,11,11,11 +2019,1,1,3,0-19 Employees,50-249 Employees,,,,,,,11,11,11,11,11,11 +2019,1,1,4,0-19 Employees,250-499 Employees,,,,,,,11,11,11,11,11,11 +2019,1,1,5,0-19 Employees,500+ Employees,,,,,,,11,11,11,11,11,11 +2019,1,2,0,20-49 Employees,All Firm Sizes,436882,217382,654264,245747,102311,348058,1,1,10,1,1,10 +2019,1,2,1,20-49 Employees,0-19 Employees,,,,,,,11,11,11,11,11,11 +2019,1,2,2,20-49 Employees,20-49 Employees,,,,,,,11,11,11,11,11,11 +2019,1,2,3,20-49 Employees,50-249 Employees,,,,,,,11,11,11,11,11,11 +2019,1,2,4,20-49 Employees,250-499 Employees,,,,,,,11,11,11,11,11,11 +2019,1,2,5,20-49 Employees,500+ Employees,,,,,,,11,11,11,11,11,11 +2019,1,3,0,50-249 Employees,All Firm Sizes,720778,326816,1047594,408813,155278,564091,1,1,10,1,1,10 +2019,1,3,1,50-249 Employees,0-19 Employees,,,,,,,11,11,11,11,11,11 +2019,1,3,2,50-249 Employees,20-49 Employees,,,,,,,11,11,11,11,11,11 +2019,1,3,3,50-249 Employees,50-249 Employees,,,,,,,11,11,11,11,11,11 +2019,1,3,4,50-249 Employees,250-499 Employees,,,,,,,11,11,11,11,11,11 +2019,1,3,5,50-249 Employees,500+ Employees,,,,,,,11,11,11,11,11,11 +2019,1,4,0,250-499 Employees,All Firm Sizes,277706,117025,394731,157839,54683,212522,1,1,10,1,1,10 +2019,1,4,1,250-499 Employees,0-19 Employees,,,,,,,11,11,11,11,11,11 +2019,1,4,2,250-499 Employees,20-49 Employees,,,,,,,11,11,11,11,11,11 +2019,1,4,3,250-499 Employees,50-249 Employees,,,,,,,11,11,11,11,11,11 +2019,1,4,4,250-499 Employees,250-499 Employees,,,,,,,11,11,11,11,11,11 +2019,1,4,5,250-499 Employees,500+ Employees,,,,,,,11,11,11,11,11,11 +2019,1,5,0,500+ Employees,All Firm Sizes,2440465,1005896,3446361,1362959,492865,1855824,1,1,10,1,1,10 +2019,1,5,1,500+ Employees,0-19 Employees,,,,,,,11,11,11,11,11,11 +2019,1,5,2,500+ Employees,20-49 Employees,,,,,,,11,11,11,11,11,11 +2019,1,5,3,500+ Employees,50-249 Employees,,,,,,,11,11,11,11,11,11 +2019,1,5,4,500+ Employees,250-499 Employees,,,,,,,11,11,11,11,11,11 +2019,1,5,5,500+ Employees,500+ Employees,,,,,,,11,11,11,11,11,11 +2019,2,0,0,All Firm Sizes,All Firm Sizes,5519742,2227459,7747201,3148556,1006565,4155121,1,1,10,1,1,10 +2019,2,0,1,All Firm Sizes,0-19 Employees,905404,388783,1294187,486587,175431,662018,1,1,10,1,1,10 +2019,2,0,2,All Firm Sizes,20-49 Employees,544152,217918,762070,290594,93932,384526,1,1,10,1,1,10 +2019,2,0,3,All Firm Sizes,50-249 Employees,880432,336631,1217063,488374,148540,636914,1,1,10,1,1,10 +2019,2,0,4,All Firm Sizes,250-499 Employees,326731,127529,454260,182950,56395,239345,1,1,10,1,1,10 +2019,2,0,5,All Firm Sizes,500+ Employees,2617722,1062503,3680225,1534305,480653,2014958,1,1,10,1,1,10 +2019,2,1,0,0-19 Employees,All Firm Sizes,749273,340064,1089337,411202,167253,578455,1,1,10,1,1,10 +2019,2,1,1,0-19 Employees,0-19 Employees,,,,,,,11,11,11,11,11,11 +2019,2,1,2,0-19 Employees,20-49 Employees,,,,,,,11,11,11,11,11,11 +2019,2,1,3,0-19 Employees,50-249 Employees,,,,,,,11,11,11,11,11,11 +2019,2,1,4,0-19 Employees,250-499 Employees,,,,,,,11,11,11,11,11,11 +2019,2,1,5,0-19 Employees,500+ Employees,,,,,,,11,11,11,11,11,11 +2019,2,2,0,20-49 Employees,All Firm Sizes,538303,222414,760717,290809,102021,392830,1,1,10,1,1,10 +2019,2,2,1,20-49 Employees,0-19 Employees,,,,,,,11,11,11,11,11,11 +2019,2,2,2,20-49 Employees,20-49 Employees,,,,,,,11,11,11,11,11,11 +2019,2,2,3,20-49 Employees,50-249 Employees,,,,,,,11,11,11,11,11,11 +2019,2,2,4,20-49 Employees,250-499 Employees,,,,,,,11,11,11,11,11,11 +2019,2,2,5,20-49 Employees,500+ Employees,,,,,,,11,11,11,11,11,11 +2019,2,3,0,50-249 Employees,All Firm Sizes,868486,342045,1210531,482188,156252,638440,1,1,10,1,1,10 +2019,2,3,1,50-249 Employees,0-19 Employees,,,,,,,11,11,11,11,11,11 +2019,2,3,2,50-249 Employees,20-49 Employees,,,,,,,11,11,11,11,11,11 +2019,2,3,3,50-249 Employees,50-249 Employees,,,,,,,11,11,11,11,11,11 +2019,2,3,4,50-249 Employees,250-499 Employees,,,,,,,11,11,11,11,11,11 +2019,2,3,5,50-249 Employees,500+ Employees,,,,,,,11,11,11,11,11,11 +2019,2,4,0,250-499 Employees,All Firm Sizes,333796,128876,462672,186532,58268,244800,1,1,10,1,1,10 +2019,2,4,1,250-499 Employees,0-19 Employees,,,,,,,11,11,11,11,11,11 +2019,2,4,2,250-499 Employees,20-49 Employees,,,,,,,11,11,11,11,11,11 +2019,2,4,3,250-499 Employees,50-249 Employees,,,,,,,11,11,11,11,11,11 +2019,2,4,4,250-499 Employees,250-499 Employees,,,,,,,11,11,11,11,11,11 +2019,2,4,5,250-499 Employees,500+ Employees,,,,,,,11,11,11,11,11,11 +2019,2,5,0,500+ Employees,All Firm Sizes,2789798,1118372,3908170,1624233,481375,2105608,1,1,10,1,1,10 +2019,2,5,1,500+ Employees,0-19 Employees,,,,,,,11,11,11,11,11,11 +2019,2,5,2,500+ Employees,20-49 Employees,,,,,,,11,11,11,11,11,11 +2019,2,5,3,500+ Employees,50-249 Employees,,,,,,,11,11,11,11,11,11 +2019,2,5,4,500+ Employees,250-499 Employees,,,,,,,11,11,11,11,11,11 +2019,2,5,5,500+ Employees,500+ Employees,,,,,,,11,11,11,11,11,11 +2019,3,0,0,All Firm Sizes,All Firm Sizes,5859008,2403753,8262761,3359194,1268592,4627786,1,1,10,1,1,10 +2019,3,0,1,All Firm Sizes,0-19 Employees,872426,387155,1259581,461798,194371,656169,1,1,10,1,1,10 +2019,3,0,2,All Firm Sizes,20-49 Employees,545257,217974,763231,286738,106796,393534,1,1,10,1,1,10 +2019,3,0,3,All Firm Sizes,50-249 Employees,890364,341330,1231694,489479,172859,662338,1,1,10,1,1,10 +2019,3,0,4,All Firm Sizes,250-499 Employees,333395,129243,462638,185369,65112,250481,1,1,10,1,1,10 +2019,3,0,5,All Firm Sizes,500+ Employees,2760764,1117790,3878554,1574653,571962,2146615,1,1,10,1,1,10 +2019,3,1,0,0-19 Employees,All Firm Sizes,841892,362442,1204334,431689,185570,617259,1,1,10,1,1,10 +2019,3,1,1,0-19 Employees,0-19 Employees,,,,,,,11,11,11,11,11,11 +2019,3,1,2,0-19 Employees,20-49 Employees,,,,,,,11,11,11,11,11,11 +2019,3,1,3,0-19 Employees,50-249 Employees,,,,,,,11,11,11,11,11,11 +2019,3,1,4,0-19 Employees,250-499 Employees,,,,,,,11,11,11,11,11,11 +2019,3,1,5,0-19 Employees,500+ Employees,,,,,,,11,11,11,11,11,11 +2019,3,2,0,20-49 Employees,All Firm Sizes,567600,232768,800368,303903,116418,420321,1,1,10,1,1,10 +2019,3,2,1,20-49 Employees,0-19 Employees,,,,,,,11,11,11,11,11,11 +2019,3,2,2,20-49 Employees,20-49 Employees,,,,,,,11,11,11,11,11,11 +2019,3,2,3,20-49 Employees,50-249 Employees,,,,,,,11,11,11,11,11,11 +2019,3,2,4,20-49 Employees,250-499 Employees,,,,,,,11,11,11,11,11,11 +2019,3,2,5,20-49 Employees,500+ Employees,,,,,,,11,11,11,11,11,11 +2019,3,3,0,50-249 Employees,All Firm Sizes,905035,357099,1262134,500563,179825,680388,1,1,10,1,1,10 +2019,3,3,1,50-249 Employees,0-19 Employees,,,,,,,11,11,11,11,11,11 +2019,3,3,2,50-249 Employees,20-49 Employees,,,,,,,11,11,11,11,11,11 +2019,3,3,3,50-249 Employees,50-249 Employees,,,,,,,11,11,11,11,11,11 +2019,3,3,4,50-249 Employees,250-499 Employees,,,,,,,11,11,11,11,11,11 +2019,3,3,5,50-249 Employees,500+ Employees,,,,,,,11,11,11,11,11,11 +2019,3,4,0,250-499 Employees,All Firm Sizes,343961,134456,478417,191724,66994,258718,1,1,10,1,1,10 +2019,3,4,1,250-499 Employees,0-19 Employees,,,,,,,11,11,11,11,11,11 +2019,3,4,2,250-499 Employees,20-49 Employees,,,,,,,11,11,11,11,11,11 +2019,3,4,3,250-499 Employees,50-249 Employees,,,,,,,11,11,11,11,11,11 +2019,3,4,4,250-499 Employees,250-499 Employees,,,,,,,11,11,11,11,11,11 +2019,3,4,5,250-499 Employees,500+ Employees,,,,,,,11,11,11,11,11,11 +2019,3,5,0,500+ Employees,All Firm Sizes,2818700,1107643,3926343,1638308,568188,2206496,1,1,10,1,1,10 +2019,3,5,1,500+ Employees,0-19 Employees,,,,,,,11,11,11,11,11,11 +2019,3,5,2,500+ Employees,20-49 Employees,,,,,,,11,11,11,11,11,11 +2019,3,5,3,500+ Employees,50-249 Employees,,,,,,,11,11,11,11,11,11 +2019,3,5,4,500+ Employees,250-499 Employees,,,,,,,11,11,11,11,11,11 +2019,3,5,5,500+ Employees,500+ Employees,,,,,,,11,11,11,11,11,11 +2019,4,0,0,All Firm Sizes,All Firm Sizes,5083380,2309581,7392961,2696094,967417,3663511,1,1,10,1,1,10 +2019,4,0,1,All Firm Sizes,0-19 Employees,707528,348699,1056227,356000,144258,500258,1,1,10,1,1,10 +2019,4,0,2,All Firm Sizes,20-49 Employees,442701,202473,645174,217925,78147,296072,1,1,10,1,1,10 +2019,4,0,3,All Firm Sizes,50-249 Employees,758526,320234,1078760,392373,130725,523098,1,1,10,1,1,10 +2019,4,0,4,All Firm Sizes,250-499 Employees,293163,124620,417783,155902,52316,208218,1,1,10,1,1,10 +2019,4,0,5,All Firm Sizes,500+ Employees,2624377,1180481,3804858,1394214,486595,1880809,1,1,10,1,1,10 +2019,4,1,0,0-19 Employees,All Firm Sizes,752047,404074,1156121,367429,155333,522762,1,1,10,1,1,10 +2019,4,1,1,0-19 Employees,0-19 Employees,,,,,,,11,11,11,11,11,11 +2019,4,1,2,0-19 Employees,20-49 Employees,,,,,,,11,11,11,11,11,11 +2019,4,1,3,0-19 Employees,50-249 Employees,,,,,,,11,11,11,11,11,11 +2019,4,1,4,0-19 Employees,250-499 Employees,,,,,,,11,11,11,11,11,11 +2019,4,1,5,0-19 Employees,500+ Employees,,,,,,,11,11,11,11,11,11 +2019,4,2,0,20-49 Employees,All Firm Sizes,481787,241275,723062,239025,95203,334228,1,1,10,1,1,10 +2019,4,2,1,20-49 Employees,0-19 Employees,,,,,,,11,11,11,11,11,11 +2019,4,2,2,20-49 Employees,20-49 Employees,,,,,,,11,11,11,11,11,11 +2019,4,2,3,20-49 Employees,50-249 Employees,,,,,,,11,11,11,11,11,11 +2019,4,2,4,20-49 Employees,250-499 Employees,,,,,,,11,11,11,11,11,11 +2019,4,2,5,20-49 Employees,500+ Employees,,,,,,,11,11,11,11,11,11 +2019,4,3,0,50-249 Employees,All Firm Sizes,776592,358111,1134703,403010,147355,550365,1,1,10,1,1,10 +2019,4,3,1,50-249 Employees,0-19 Employees,,,,,,,11,11,11,11,11,11 +2019,4,3,2,50-249 Employees,20-49 Employees,,,,,,,11,11,11,11,11,11 +2019,4,3,3,50-249 Employees,50-249 Employees,,,,,,,11,11,11,11,11,11 +2019,4,3,4,50-249 Employees,250-499 Employees,,,,,,,11,11,11,11,11,11 +2019,4,3,5,50-249 Employees,500+ Employees,,,,,,,11,11,11,11,11,11 +2019,4,4,0,250-499 Employees,All Firm Sizes,298815,134427,433242,157943,56546,214489,1,1,10,1,1,10 +2019,4,4,1,250-499 Employees,0-19 Employees,,,,,,,11,11,11,11,11,11 +2019,4,4,2,250-499 Employees,20-49 Employees,,,,,,,11,11,11,11,11,11 +2019,4,4,3,250-499 Employees,50-249 Employees,,,,,,,11,11,11,11,11,11 +2019,4,4,4,250-499 Employees,250-499 Employees,,,,,,,11,11,11,11,11,11 +2019,4,4,5,250-499 Employees,500+ Employees,,,,,,,11,11,11,11,11,11 +2019,4,5,0,500+ Employees,All Firm Sizes,2574241,1055555,3629796,1396437,457593,1854030,1,1,10,1,1,10 +2019,4,5,1,500+ Employees,0-19 Employees,,,,,,,11,11,11,11,11,11 +2019,4,5,2,500+ Employees,20-49 Employees,,,,,,,11,11,11,11,11,11 +2019,4,5,3,500+ Employees,50-249 Employees,,,,,,,11,11,11,11,11,11 +2019,4,5,4,500+ Employees,250-499 Employees,,,,,,,11,11,11,11,11,11 +2019,4,5,5,500+ Employees,500+ Employees,,,,,,,11,11,11,11,11,11 +2020,1,0,0,All Firm Sizes,All Firm Sizes,4471714,1962923,6434637,2601017,1007875,3608892,1,1,10,1,1,10 +2020,1,0,1,All Firm Sizes,0-19 Employees,617679,317007,934686,361275,173674,534949,1,1,10,1,1,10 +2020,1,0,2,All Firm Sizes,20-49 Employees,408073,177366,585439,228981,86853,315834,1,1,10,1,1,10 +2020,1,0,3,All Firm Sizes,50-249 Employees,708906,291884,1000790,402078,143375,545453,1,1,10,1,1,10 +2020,1,0,4,All Firm Sizes,250-499 Employees,268068,113950,382018,150815,55252,206067,1,1,10,1,1,10 +2020,1,0,5,All Firm Sizes,500+ Employees,2232292,973059,3205351,1290286,495625,1785911,1,1,10,1,1,10 +2020,1,1,0,0-19 Employees,All Firm Sizes,579273,366365,945638,344063,192006,536069,1,1,10,1,1,10 +2020,1,1,1,0-19 Employees,0-19 Employees,,,,,,,11,11,11,11,11,11 +2020,1,1,2,0-19 Employees,20-49 Employees,,,,,,,11,11,11,11,11,11 +2020,1,1,3,0-19 Employees,50-249 Employees,,,,,,,11,11,11,11,11,11 +2020,1,1,4,0-19 Employees,250-499 Employees,,,,,,,11,11,11,11,11,11 +2020,1,1,5,0-19 Employees,500+ Employees,,,,,,,11,11,11,11,11,11 +2020,1,2,0,20-49 Employees,All Firm Sizes,411712,191459,603171,238569,94688,333257,1,1,10,1,1,10 +2020,1,2,1,20-49 Employees,0-19 Employees,,,,,,,11,11,11,11,11,11 +2020,1,2,2,20-49 Employees,20-49 Employees,,,,,,,11,11,11,11,11,11 +2020,1,2,3,20-49 Employees,50-249 Employees,,,,,,,11,11,11,11,11,11 +2020,1,2,4,20-49 Employees,250-499 Employees,,,,,,,11,11,11,11,11,11 +2020,1,2,5,20-49 Employees,500+ Employees,,,,,,,11,11,11,11,11,11 +2020,1,3,0,50-249 Employees,All Firm Sizes,687652,290311,977963,399279,144795,544074,1,1,10,1,1,10 +2020,1,3,1,50-249 Employees,0-19 Employees,,,,,,,11,11,11,11,11,11 +2020,1,3,2,50-249 Employees,20-49 Employees,,,,,,,11,11,11,11,11,11 +2020,1,3,3,50-249 Employees,50-249 Employees,,,,,,,11,11,11,11,11,11 +2020,1,3,4,50-249 Employees,250-499 Employees,,,,,,,11,11,11,11,11,11 +2020,1,3,5,50-249 Employees,500+ Employees,,,,,,,11,11,11,11,11,11 +2020,1,4,0,250-499 Employees,All Firm Sizes,262894,110066,372960,152380,54630,207010,1,1,10,1,1,10 +2020,1,4,1,250-499 Employees,0-19 Employees,,,,,,,11,11,11,11,11,11 +2020,1,4,2,250-499 Employees,20-49 Employees,,,,,,,11,11,11,11,11,11 +2020,1,4,3,250-499 Employees,50-249 Employees,,,,,,,11,11,11,11,11,11 +2020,1,4,4,250-499 Employees,250-499 Employees,,,,,,,11,11,11,11,11,11 +2020,1,4,5,250-499 Employees,500+ Employees,,,,,,,11,11,11,11,11,11 +2020,1,5,0,500+ Employees,All Firm Sizes,2342302,939367,3281669,1335230,483182,1818412,1,1,10,1,1,10 +2020,1,5,1,500+ Employees,0-19 Employees,,,,,,,11,11,11,11,11,11 +2020,1,5,2,500+ Employees,20-49 Employees,,,,,,,11,11,11,11,11,11 +2020,1,5,3,500+ Employees,50-249 Employees,,,,,,,11,11,11,11,11,11 +2020,1,5,4,500+ Employees,250-499 Employees,,,,,,,11,11,11,11,11,11 +2020,1,5,5,500+ Employees,500+ Employees,,,,,,,11,11,11,11,11,11 +2020,2,0,0,All Firm Sizes,All Firm Sizes,2998111,1881847,4879958,1721936,855945,2577881,1,1,10,1,1,10 +2020,2,0,1,All Firm Sizes,0-19 Employees,505363,365913,871276,276406,166098,442504,1,1,10,1,1,10 +2020,2,0,2,All Firm Sizes,20-49 Employees,278369,181154,459523,151917,79849,231766,1,1,10,1,1,10 +2020,2,0,3,All Firm Sizes,50-249 Employees,460131,268044,728175,256607,120527,377134,1,1,10,1,1,10 +2020,2,0,4,All Firm Sizes,250-499 Employees,166329,95507,261836,92913,42819,135732,1,1,10,1,1,10 +2020,2,0,5,All Firm Sizes,500+ Employees,1472361,899210,2371571,859312,404511,1263823,1,1,10,1,1,10 +2020,2,1,0,0-19 Employees,All Firm Sizes,372481,302785,675266,204558,150265,354823,1,1,10,1,1,10 +2020,2,1,1,0-19 Employees,0-19 Employees,,,,,,,11,11,11,11,11,11 +2020,2,1,2,0-19 Employees,20-49 Employees,,,,,,,11,11,11,11,11,11 +2020,2,1,3,0-19 Employees,50-249 Employees,,,,,,,11,11,11,11,11,11 +2020,2,1,4,0-19 Employees,250-499 Employees,,,,,,,11,11,11,11,11,11 +2020,2,1,5,0-19 Employees,500+ Employees,,,,,,,11,11,11,11,11,11 +2020,2,2,0,20-49 Employees,All Firm Sizes,268015,209065,477080,147917,97924,245841,1,1,10,1,1,10 +2020,2,2,1,20-49 Employees,0-19 Employees,,,,,,,11,11,11,11,11,11 +2020,2,2,2,20-49 Employees,20-49 Employees,,,,,,,11,11,11,11,11,11 +2020,2,2,3,20-49 Employees,50-249 Employees,,,,,,,11,11,11,11,11,11 +2020,2,2,4,20-49 Employees,250-499 Employees,,,,,,,11,11,11,11,11,11 +2020,2,2,5,20-49 Employees,500+ Employees,,,,,,,11,11,11,11,11,11 +2020,2,3,0,50-249 Employees,All Firm Sizes,470270,303630,773900,262520,139853,402373,1,1,10,1,1,10 +2020,2,3,1,50-249 Employees,0-19 Employees,,,,,,,11,11,11,11,11,11 +2020,2,3,2,50-249 Employees,20-49 Employees,,,,,,,11,11,11,11,11,11 +2020,2,3,3,50-249 Employees,50-249 Employees,,,,,,,11,11,11,11,11,11 +2020,2,3,4,50-249 Employees,250-499 Employees,,,,,,,11,11,11,11,11,11 +2020,2,3,5,50-249 Employees,500+ Employees,,,,,,,11,11,11,11,11,11 +2020,2,4,0,250-499 Employees,All Firm Sizes,188564,107479,296043,105192,48831,154023,1,1,10,1,1,10 +2020,2,4,1,250-499 Employees,0-19 Employees,,,,,,,11,11,11,11,11,11 +2020,2,4,2,250-499 Employees,20-49 Employees,,,,,,,11,11,11,11,11,11 +2020,2,4,3,250-499 Employees,50-249 Employees,,,,,,,11,11,11,11,11,11 +2020,2,4,4,250-499 Employees,250-499 Employees,,,,,,,11,11,11,11,11,11 +2020,2,4,5,250-499 Employees,500+ Employees,,,,,,,11,11,11,11,11,11 +2020,2,5,0,500+ Employees,All Firm Sizes,1562004,888787,2450791,913399,382925,1296324,1,1,10,1,1,10 +2020,2,5,1,500+ Employees,0-19 Employees,,,,,,,11,11,11,11,11,11 +2020,2,5,2,500+ Employees,20-49 Employees,,,,,,,11,11,11,11,11,11 +2020,2,5,3,500+ Employees,50-249 Employees,,,,,,,11,11,11,11,11,11 +2020,2,5,4,500+ Employees,250-499 Employees,,,,,,,11,11,11,11,11,11 +2020,2,5,5,500+ Employees,500+ Employees,,,,,,,11,11,11,11,11,11 +2020,3,0,0,All Firm Sizes,All Firm Sizes,4504794,2106838,6611632,2677182,1137127,3814309,1,1,10,1,1,10 +2020,3,0,1,All Firm Sizes,0-19 Employees,724124,364043,1088167,412813,193520,606333,1,1,10,1,1,10 +2020,3,0,2,All Firm Sizes,20-49 Employees,422376,196661,619037,239499,103150,342649,1,1,10,1,1,10 +2020,3,0,3,All Firm Sizes,50-249 Employees,678342,306639,984981,396094,163532,559626,1,1,10,1,1,10 +2020,3,0,4,All Firm Sizes,250-499 Employees,245077,111205,356282,142809,57909,200718,1,1,10,1,1,10 +2020,3,0,5,All Firm Sizes,500+ Employees,2133188,970831,3104019,1241326,499209,1740535,1,1,10,1,1,10 +2020,3,1,0,0-19 Employees,All Firm Sizes,633135,280531,913666,337471,147727,485198,1,1,10,1,1,10 +2020,3,1,1,0-19 Employees,0-19 Employees,,,,,,,11,11,11,11,11,11 +2020,3,1,2,0-19 Employees,20-49 Employees,,,,,,,11,11,11,11,11,11 +2020,3,1,3,0-19 Employees,50-249 Employees,,,,,,,11,11,11,11,11,11 +2020,3,1,4,0-19 Employees,250-499 Employees,,,,,,,11,11,11,11,11,11 +2020,3,1,5,0-19 Employees,500+ Employees,,,,,,,11,11,11,11,11,11 +2020,3,2,0,20-49 Employees,All Firm Sizes,424368,193737,618105,243018,101030,344048,1,1,10,1,1,10 +2020,3,2,1,20-49 Employees,0-19 Employees,,,,,,,11,11,11,11,11,11 +2020,3,2,2,20-49 Employees,20-49 Employees,,,,,,,11,11,11,11,11,11 +2020,3,2,3,20-49 Employees,50-249 Employees,,,,,,,11,11,11,11,11,11 +2020,3,2,4,20-49 Employees,250-499 Employees,,,,,,,11,11,11,11,11,11 +2020,3,2,5,20-49 Employees,500+ Employees,,,,,,,11,11,11,11,11,11 +2020,3,3,0,50-249 Employees,All Firm Sizes,692178,318638,1010816,407546,166974,574520,1,1,10,1,1,10 +2020,3,3,1,50-249 Employees,0-19 Employees,,,,,,,11,11,11,11,11,11 +2020,3,3,2,50-249 Employees,20-49 Employees,,,,,,,11,11,11,11,11,11 +2020,3,3,3,50-249 Employees,50-249 Employees,,,,,,,11,11,11,11,11,11 +2020,3,3,4,50-249 Employees,250-499 Employees,,,,,,,11,11,11,11,11,11 +2020,3,3,5,50-249 Employees,500+ Employees,,,,,,,11,11,11,11,11,11 +2020,3,4,0,250-499 Employees,All Firm Sizes,261656,124272,385928,154145,63839,217984,1,1,10,1,1,10 +2020,3,4,1,250-499 Employees,0-19 Employees,,,,,,,11,11,11,11,11,11 +2020,3,4,2,250-499 Employees,20-49 Employees,,,,,,,11,11,11,11,11,11 +2020,3,4,3,250-499 Employees,50-249 Employees,,,,,,,11,11,11,11,11,11 +2020,3,4,4,250-499 Employees,250-499 Employees,,,,,,,11,11,11,11,11,11 +2020,3,4,5,250-499 Employees,500+ Employees,,,,,,,11,11,11,11,11,11 +2020,3,5,0,500+ Employees,All Firm Sizes,2220094,1014491,3234585,1315456,531967,1847423,1,1,10,1,1,10 +2020,3,5,1,500+ Employees,0-19 Employees,,,,,,,11,11,11,11,11,11 +2020,3,5,2,500+ Employees,20-49 Employees,,,,,,,11,11,11,11,11,11 +2020,3,5,3,500+ Employees,50-249 Employees,,,,,,,11,11,11,11,11,11 +2020,3,5,4,500+ Employees,250-499 Employees,,,,,,,11,11,11,11,11,11 +2020,3,5,5,500+ Employees,500+ Employees,,,,,,,11,11,11,11,11,11 +2020,4,0,0,All Firm Sizes,All Firm Sizes,4472385,1934098,6406483,2444202,988073,3432275,1,1,10,1,1,10 +2020,4,0,1,All Firm Sizes,0-19 Employees,618217,295129,913346,339647,156301,495948,1,1,10,1,1,10 +2020,4,0,2,All Firm Sizes,20-49 Employees,369365,160689,530054,195728,80121,275849,1,1,10,1,1,10 +2020,4,0,3,All Firm Sizes,50-249 Employees,647405,263228,910633,351926,134814,486740,1,1,10,1,1,10 +2020,4,0,4,All Firm Sizes,250-499 Employees,252888,100748,353636,136599,51075,187674,1,1,10,1,1,10 +2020,4,0,5,All Firm Sizes,500+ Employees,2387154,1022137,3409291,1280693,504302,1784995,1,1,10,1,1,10 +2020,4,1,0,0-19 Employees,All Firm Sizes,633374,314490,947864,320283,145228,465511,1,1,10,1,1,10 +2020,4,1,1,0-19 Employees,0-19 Employees,,,,,,,11,11,11,11,11,11 +2020,4,1,2,0-19 Employees,20-49 Employees,,,,,,,11,11,11,11,11,11 +2020,4,1,3,0-19 Employees,50-249 Employees,,,,,,,11,11,11,11,11,11 +2020,4,1,4,0-19 Employees,250-499 Employees,,,,,,,11,11,11,11,11,11 +2020,4,1,5,0-19 Employees,500+ Employees,,,,,,,11,11,11,11,11,11 +2020,4,2,0,20-49 Employees,All Firm Sizes,402347,190347,592694,208541,95326,303867,1,1,10,1,1,10 +2020,4,2,1,20-49 Employees,0-19 Employees,,,,,,,11,11,11,11,11,11 +2020,4,2,2,20-49 Employees,20-49 Employees,,,,,,,11,11,11,11,11,11 +2020,4,2,3,20-49 Employees,50-249 Employees,,,,,,,11,11,11,11,11,11 +2020,4,2,4,20-49 Employees,250-499 Employees,,,,,,,11,11,11,11,11,11 +2020,4,2,5,20-49 Employees,500+ Employees,,,,,,,11,11,11,11,11,11 +2020,4,3,0,50-249 Employees,All Firm Sizes,663417,294742,958159,358900,152666,511566,1,1,10,1,1,10 +2020,4,3,1,50-249 Employees,0-19 Employees,,,,,,,11,11,11,11,11,11 +2020,4,3,2,50-249 Employees,20-49 Employees,,,,,,,11,11,11,11,11,11 +2020,4,3,3,50-249 Employees,50-249 Employees,,,,,,,11,11,11,11,11,11 +2020,4,3,4,50-249 Employees,250-499 Employees,,,,,,,11,11,11,11,11,11 +2020,4,3,5,50-249 Employees,500+ Employees,,,,,,,11,11,11,11,11,11 +2020,4,4,0,250-499 Employees,All Firm Sizes,256645,108719,365364,140018,56510,196528,1,1,10,1,1,10 +2020,4,4,1,250-499 Employees,0-19 Employees,,,,,,,11,11,11,11,11,11 +2020,4,4,2,250-499 Employees,20-49 Employees,,,,,,,11,11,11,11,11,11 +2020,4,4,3,250-499 Employees,50-249 Employees,,,,,,,11,11,11,11,11,11 +2020,4,4,4,250-499 Employees,250-499 Employees,,,,,,,11,11,11,11,11,11 +2020,4,4,5,250-499 Employees,500+ Employees,,,,,,,11,11,11,11,11,11 +2020,4,5,0,500+ Employees,All Firm Sizes,2343566,937814,3281380,1295757,482816,1778573,1,1,10,1,1,10 +2020,4,5,1,500+ Employees,0-19 Employees,,,,,,,11,11,11,11,11,11 +2020,4,5,2,500+ Employees,20-49 Employees,,,,,,,11,11,11,11,11,11 +2020,4,5,3,500+ Employees,50-249 Employees,,,,,,,11,11,11,11,11,11 +2020,4,5,4,500+ Employees,250-499 Employees,,,,,,,11,11,11,11,11,11 +2020,4,5,5,500+ Employees,500+ Employees,,,,,,,11,11,11,11,11,11 +2021,1,0,0,All Firm Sizes,All Firm Sizes,4027481,1891939,5919420,2200794,914271,3115065,1,1,10,1,1,10 +2021,1,0,1,All Firm Sizes,0-19 Employees,581507,323788,905295,322382,163816,486198,1,1,10,1,1,10 +2021,1,0,2,All Firm Sizes,20-49 Employees,369446,170322,539768,192902,75565,268467,1,1,10,1,1,10 +2021,1,0,3,All Firm Sizes,50-249 Employees,624073,270457,894530,335061,124875,459936,1,1,10,1,1,10 +2021,1,0,4,All Firm Sizes,250-499 Employees,234097,101952,336049,125597,47162,172759,1,1,10,1,1,10 +2021,1,0,5,All Firm Sizes,500+ Employees,2047655,950158,2997813,1105500,459646,1565146,1,1,10,1,1,10 +2021,1,1,0,0-19 Employees,All Firm Sizes,507937,344186,852123,287112,161625,448737,1,1,10,1,1,10 +2021,1,1,1,0-19 Employees,0-19 Employees,,,,,,,11,11,11,11,11,11 +2021,1,1,2,0-19 Employees,20-49 Employees,,,,,,,11,11,11,11,11,11 +2021,1,1,3,0-19 Employees,50-249 Employees,,,,,,,11,11,11,11,11,11 +2021,1,1,4,0-19 Employees,250-499 Employees,,,,,,,11,11,11,11,11,11 +2021,1,1,5,0-19 Employees,500+ Employees,,,,,,,11,11,11,11,11,11 +2021,1,2,0,20-49 Employees,All Firm Sizes,352854,181343,534197,193680,81172,274852,1,1,10,1,1,10 +2021,1,2,1,20-49 Employees,0-19 Employees,,,,,,,11,11,11,11,11,11 +2021,1,2,2,20-49 Employees,20-49 Employees,,,,,,,11,11,11,11,11,11 +2021,1,2,3,20-49 Employees,50-249 Employees,,,,,,,11,11,11,11,11,11 +2021,1,2,4,20-49 Employees,250-499 Employees,,,,,,,11,11,11,11,11,11 +2021,1,2,5,20-49 Employees,500+ Employees,,,,,,,11,11,11,11,11,11 +2021,1,3,0,50-249 Employees,All Firm Sizes,600667,275258,875925,331047,129388,460435,1,1,10,1,1,10 +2021,1,3,1,50-249 Employees,0-19 Employees,,,,,,,11,11,11,11,11,11 +2021,1,3,2,50-249 Employees,20-49 Employees,,,,,,,11,11,11,11,11,11 +2021,1,3,3,50-249 Employees,50-249 Employees,,,,,,,11,11,11,11,11,11 +2021,1,3,4,50-249 Employees,250-499 Employees,,,,,,,11,11,11,11,11,11 +2021,1,3,5,50-249 Employees,500+ Employees,,,,,,,11,11,11,11,11,11 +2021,1,4,0,250-499 Employees,All Firm Sizes,230444,98693,329137,126488,46376,172864,1,1,10,1,1,10 +2021,1,4,1,250-499 Employees,0-19 Employees,,,,,,,11,11,11,11,11,11 +2021,1,4,2,250-499 Employees,20-49 Employees,,,,,,,11,11,11,11,11,11 +2021,1,4,3,250-499 Employees,50-249 Employees,,,,,,,11,11,11,11,11,11 +2021,1,4,4,250-499 Employees,250-499 Employees,,,,,,,11,11,11,11,11,11 +2021,1,4,5,250-499 Employees,500+ Employees,,,,,,,11,11,11,11,11,11 +2021,1,5,0,500+ Employees,All Firm Sizes,2180488,929220,3109708,1156666,459802,1616468,1,1,10,1,1,10 +2021,1,5,1,500+ Employees,0-19 Employees,,,,,,,11,11,11,11,11,11 +2021,1,5,2,500+ Employees,20-49 Employees,,,,,,,11,11,11,11,11,11 +2021,1,5,3,500+ Employees,50-249 Employees,,,,,,,11,11,11,11,11,11 +2021,1,5,4,500+ Employees,250-499 Employees,,,,,,,11,11,11,11,11,11 +2021,1,5,5,500+ Employees,500+ Employees,,,,,,,11,11,11,11,11,11 +2021,2,0,0,All Firm Sizes,All Firm Sizes,5711727,2019040,7730767,3307865,859265,4167130,1,1,10,1,1,10 +2021,2,0,1,All Firm Sizes,0-19 Employees,929052,356367,1285419,516962,156399,673361,1,1,10,1,1,10 +2021,2,0,2,All Firm Sizes,20-49 Employees,557287,194805,752092,306742,78837,385579,1,1,10,1,1,10 +2021,2,0,3,All Firm Sizes,50-249 Employees,888668,297493,1186161,510033,125407,635440,1,1,10,1,1,10 +2021,2,0,4,All Firm Sizes,250-499 Employees,320223,108788,429011,186155,46496,232651,1,1,10,1,1,10 +2021,2,0,5,All Firm Sizes,500+ Employees,2795352,981834,3777186,1636733,410584,2047317,1,1,10,1,1,10 +2021,2,1,0,0-19 Employees,All Firm Sizes,739817,297280,1037097,411249,140763,552012,1,1,10,1,1,10 +2021,2,1,1,0-19 Employees,0-19 Employees,,,,,,,11,11,11,11,11,11 +2021,2,1,2,0-19 Employees,20-49 Employees,,,,,,,11,11,11,11,11,11 +2021,2,1,3,0-19 Employees,50-249 Employees,,,,,,,11,11,11,11,11,11 +2021,2,1,4,0-19 Employees,250-499 Employees,,,,,,,11,11,11,11,11,11 +2021,2,1,5,0-19 Employees,500+ Employees,,,,,,,11,11,11,11,11,11 +2021,2,2,0,20-49 Employees,All Firm Sizes,525958,190124,716082,292840,84237,377077,1,1,10,1,1,10 +2021,2,2,1,20-49 Employees,0-19 Employees,,,,,,,11,11,11,11,11,11 +2021,2,2,2,20-49 Employees,20-49 Employees,,,,,,,11,11,11,11,11,11 +2021,2,2,3,20-49 Employees,50-249 Employees,,,,,,,11,11,11,11,11,11 +2021,2,2,4,20-49 Employees,250-499 Employees,,,,,,,11,11,11,11,11,11 +2021,2,2,5,20-49 Employees,500+ Employees,,,,,,,11,11,11,11,11,11 +2021,2,3,0,50-249 Employees,All Firm Sizes,862152,299093,1161245,494046,132115,626161,1,1,10,1,1,10 +2021,2,3,1,50-249 Employees,0-19 Employees,,,,,,,11,11,11,11,11,11 +2021,2,3,2,50-249 Employees,20-49 Employees,,,,,,,11,11,11,11,11,11 +2021,2,3,3,50-249 Employees,50-249 Employees,,,,,,,11,11,11,11,11,11 +2021,2,3,4,50-249 Employees,250-499 Employees,,,,,,,11,11,11,11,11,11 +2021,2,3,5,50-249 Employees,500+ Employees,,,,,,,11,11,11,11,11,11 +2021,2,4,0,250-499 Employees,All Firm Sizes,329360,110080,439440,189419,47210,236629,1,1,10,1,1,10 +2021,2,4,1,250-499 Employees,0-19 Employees,,,,,,,11,11,11,11,11,11 +2021,2,4,2,250-499 Employees,20-49 Employees,,,,,,,11,11,11,11,11,11 +2021,2,4,3,250-499 Employees,50-249 Employees,,,,,,,11,11,11,11,11,11 +2021,2,4,4,250-499 Employees,250-499 Employees,,,,,,,11,11,11,11,11,11 +2021,2,4,5,250-499 Employees,500+ Employees,,,,,,,11,11,11,11,11,11 +2021,2,5,0,500+ Employees,All Firm Sizes,3026540,1054469,4081009,1770027,418100,2188127,1,1,10,1,1,10 +2021,2,5,1,500+ Employees,0-19 Employees,,,,,,,11,11,11,11,11,11 +2021,2,5,2,500+ Employees,20-49 Employees,,,,,,,11,11,11,11,11,11 +2021,2,5,3,500+ Employees,50-249 Employees,,,,,,,11,11,11,11,11,11 +2021,2,5,4,500+ Employees,250-499 Employees,,,,,,,11,11,11,11,11,11 +2021,2,5,5,500+ Employees,500+ Employees,,,,,,,11,11,11,11,11,11 +2021,3,0,0,All Firm Sizes,All Firm Sizes,6417839,2415787,8833626,3691889,1273376,4965265,1,1,10,1,1,10 +2021,3,0,1,All Firm Sizes,0-19 Employees,924211,379531,1303742,498287,195399,693686,1,1,10,1,1,10 +2021,3,0,2,All Firm Sizes,20-49 Employees,573838,210275,784113,304256,104503,408759,1,1,10,1,1,10 +2021,3,0,3,All Firm Sizes,50-249 Employees,942865,333338,1276203,527351,171002,698353,1,1,10,1,1,10 +2021,3,0,4,All Firm Sizes,250-499 Employees,350243,125581,475824,197419,63492,260911,1,1,10,1,1,10 +2021,3,0,5,All Firm Sizes,500+ Employees,3156084,1177311,4333395,1792516,596277,2388793,1,1,10,1,1,10 +2021,3,1,0,0-19 Employees,All Firm Sizes,898276,351133,1249409,460814,180601,641415,1,1,10,1,1,10 +2021,3,1,1,0-19 Employees,0-19 Employees,,,,,,,11,11,11,11,11,11 +2021,3,1,2,0-19 Employees,20-49 Employees,,,,,,,11,11,11,11,11,11 +2021,3,1,3,0-19 Employees,50-249 Employees,,,,,,,11,11,11,11,11,11 +2021,3,1,4,0-19 Employees,250-499 Employees,,,,,,,11,11,11,11,11,11 +2021,3,1,5,0-19 Employees,500+ Employees,,,,,,,11,11,11,11,11,11 +2021,3,2,0,20-49 Employees,All Firm Sizes,590954,220631,811585,314730,111232,425962,1,1,10,1,1,10 +2021,3,2,1,20-49 Employees,0-19 Employees,,,,,,,11,11,11,11,11,11 +2021,3,2,2,20-49 Employees,20-49 Employees,,,,,,,11,11,11,11,11,11 +2021,3,2,3,20-49 Employees,50-249 Employees,,,,,,,11,11,11,11,11,11 +2021,3,2,4,20-49 Employees,250-499 Employees,,,,,,,11,11,11,11,11,11 +2021,3,2,5,20-49 Employees,500+ Employees,,,,,,,11,11,11,11,11,11 +2021,3,3,0,50-249 Employees,All Firm Sizes,952310,344010,1296320,532215,175857,708072,1,1,10,1,1,10 +2021,3,3,1,50-249 Employees,0-19 Employees,,,,,,,11,11,11,11,11,11 +2021,3,3,2,50-249 Employees,20-49 Employees,,,,,,,11,11,11,11,11,11 +2021,3,3,3,50-249 Employees,50-249 Employees,,,,,,,11,11,11,11,11,11 +2021,3,3,4,50-249 Employees,250-499 Employees,,,,,,,11,11,11,11,11,11 +2021,3,3,5,50-249 Employees,500+ Employees,,,,,,,11,11,11,11,11,11 +2021,3,4,0,250-499 Employees,All Firm Sizes,354915,129131,484046,201874,65197,267071,1,1,10,1,1,10 +2021,3,4,1,250-499 Employees,0-19 Employees,,,,,,,11,11,11,11,11,11 +2021,3,4,2,250-499 Employees,20-49 Employees,,,,,,,11,11,11,11,11,11 +2021,3,4,3,250-499 Employees,50-249 Employees,,,,,,,11,11,11,11,11,11 +2021,3,4,4,250-499 Employees,250-499 Employees,,,,,,,11,11,11,11,11,11 +2021,3,4,5,250-499 Employees,500+ Employees,,,,,,,11,11,11,11,11,11 +2021,3,5,0,500+ Employees,All Firm Sizes,3200096,1187393,4387489,1854896,605117,2460013,1,1,10,1,1,10 +2021,3,5,1,500+ Employees,0-19 Employees,,,,,,,11,11,11,11,11,11 +2021,3,5,2,500+ Employees,20-49 Employees,,,,,,,11,11,11,11,11,11 +2021,3,5,3,500+ Employees,50-249 Employees,,,,,,,11,11,11,11,11,11 +2021,3,5,4,500+ Employees,250-499 Employees,,,,,,,11,11,11,11,11,11 +2021,3,5,5,500+ Employees,500+ Employees,,,,,,,11,11,11,11,11,11 +2021,4,0,0,All Firm Sizes,All Firm Sizes,5986687,2419203,8405890,3381896,1127373,4509269,1,1,10,1,1,10 +2021,4,0,1,All Firm Sizes,0-19 Employees,791736,361701,1153437,442805,172764,615569,1,1,10,1,1,10 +2021,4,0,2,All Firm Sizes,20-49 Employees,488366,203836,692202,264761,89420,354181,1,1,10,1,1,10 +2021,4,0,3,All Firm Sizes,50-249 Employees,857391,329045,1186436,477320,150105,627425,1,1,10,1,1,10 +2021,4,0,4,All Firm Sizes,250-499 Employees,331565,124332,455897,187134,58033,245167,1,1,10,1,1,10 +2021,4,0,5,All Firm Sizes,500+ Employees,3226296,1267929,4494225,1798691,575005,2373696,1,1,10,1,1,10 +2021,4,1,0,0-19 Employees,All Firm Sizes,837198,419890,1257088,450707,181065,631772,1,1,10,1,1,10 +2021,4,1,1,0-19 Employees,0-19 Employees,,,,,,,11,11,11,11,11,11 +2021,4,1,2,0-19 Employees,20-49 Employees,,,,,,,11,11,11,11,11,11 +2021,4,1,3,0-19 Employees,50-249 Employees,,,,,,,11,11,11,11,11,11 +2021,4,1,4,0-19 Employees,250-499 Employees,,,,,,,11,11,11,11,11,11 +2021,4,1,5,0-19 Employees,500+ Employees,,,,,,,11,11,11,11,11,11 +2021,4,2,0,20-49 Employees,All Firm Sizes,532083,243913,775996,285590,107453,393043,1,1,10,1,1,10 +2021,4,2,1,20-49 Employees,0-19 Employees,,,,,,,11,11,11,11,11,11 +2021,4,2,2,20-49 Employees,20-49 Employees,,,,,,,11,11,11,11,11,11 +2021,4,2,3,20-49 Employees,50-249 Employees,,,,,,,11,11,11,11,11,11 +2021,4,2,4,20-49 Employees,250-499 Employees,,,,,,,11,11,11,11,11,11 +2021,4,2,5,20-49 Employees,500+ Employees,,,,,,,11,11,11,11,11,11 +2021,4,3,0,50-249 Employees,All Firm Sizes,873502,359352,1232854,488566,165966,654532,1,1,10,1,1,10 +2021,4,3,1,50-249 Employees,0-19 Employees,,,,,,,11,11,11,11,11,11 +2021,4,3,2,50-249 Employees,20-49 Employees,,,,,,,11,11,11,11,11,11 +2021,4,3,3,50-249 Employees,50-249 Employees,,,,,,,11,11,11,11,11,11 +2021,4,3,4,50-249 Employees,250-499 Employees,,,,,,,11,11,11,11,11,11 +2021,4,3,5,50-249 Employees,500+ Employees,,,,,,,11,11,11,11,11,11 +2021,4,4,0,250-499 Employees,All Firm Sizes,337812,128405,466217,189514,59873,249387,1,1,10,1,1,10 +2021,4,4,1,250-499 Employees,0-19 Employees,,,,,,,11,11,11,11,11,11 +2021,4,4,2,250-499 Employees,20-49 Employees,,,,,,,11,11,11,11,11,11 +2021,4,4,3,250-499 Employees,50-249 Employees,,,,,,,11,11,11,11,11,11 +2021,4,4,4,250-499 Employees,250-499 Employees,,,,,,,11,11,11,11,11,11 +2021,4,4,5,250-499 Employees,500+ Employees,,,,,,,11,11,11,11,11,11 +2021,4,5,0,500+ Employees,All Firm Sizes,3141271,1145291,4286562,1781168,542299,2323467,1,1,10,1,1,10 +2021,4,5,1,500+ Employees,0-19 Employees,,,,,,,11,11,11,11,11,11 +2021,4,5,2,500+ Employees,20-49 Employees,,,,,,,11,11,11,11,11,11 +2021,4,5,3,500+ Employees,50-249 Employees,,,,,,,11,11,11,11,11,11 +2021,4,5,4,500+ Employees,250-499 Employees,,,,,,,11,11,11,11,11,11 +2021,4,5,5,500+ Employees,500+ Employees,,,,,,,11,11,11,11,11,11 +2022,1,0,0,All Firm Sizes,All Firm Sizes,5250106,2450953,7701059,2970989,1191533,4162522,1,1,10,1,1,10 +2022,1,0,1,All Firm Sizes,0-19 Employees,725814,402487,1128301,407668,209097,616765,1,1,10,1,1,10 +2022,1,0,2,All Firm Sizes,20-49 Employees,467643,216520,684163,251236,99191,350427,1,1,10,1,1,10 +2022,1,0,3,All Firm Sizes,50-249 Employees,785567,342022,1127589,437887,161024,598911,1,1,10,1,1,10 +2022,1,0,4,All Firm Sizes,250-499 Employees,298620,130237,428857,167043,61288,228331,1,1,10,1,1,10 +2022,1,0,5,All Firm Sizes,500+ Employees,2729237,1252061,3981298,1532998,598035,2131033,1,1,10,1,1,10 +2022,1,1,0,0-19 Employees,All Firm Sizes,693453,451551,1145004,399843,227122,626965,1,1,10,1,1,10 +2022,1,1,1,0-19 Employees,0-19 Employees,,,,,,,11,11,11,11,11,11 +2022,1,1,2,0-19 Employees,20-49 Employees,,,,,,,11,11,11,11,11,11 +2022,1,1,3,0-19 Employees,50-249 Employees,,,,,,,11,11,11,11,11,11 +2022,1,1,4,0-19 Employees,250-499 Employees,,,,,,,11,11,11,11,11,11 +2022,1,1,5,0-19 Employees,500+ Employees,,,,,,,11,11,11,11,11,11 +2022,1,2,0,20-49 Employees,All Firm Sizes,469242,234615,703857,261729,109638,371367,1,1,10,1,1,10 +2022,1,2,1,20-49 Employees,0-19 Employees,,,,,,,11,11,11,11,11,11 +2022,1,2,2,20-49 Employees,20-49 Employees,,,,,,,11,11,11,11,11,11 +2022,1,2,3,20-49 Employees,50-249 Employees,,,,,,,11,11,11,11,11,11 +2022,1,2,4,20-49 Employees,250-499 Employees,,,,,,,11,11,11,11,11,11 +2022,1,2,5,20-49 Employees,500+ Employees,,,,,,,11,11,11,11,11,11 +2022,1,3,0,50-249 Employees,All Firm Sizes,770507,351201,1121708,436206,168045,604251,1,1,10,1,1,10 +2022,1,3,1,50-249 Employees,0-19 Employees,,,,,,,11,11,11,11,11,11 +2022,1,3,2,50-249 Employees,20-49 Employees,,,,,,,11,11,11,11,11,11 +2022,1,3,3,50-249 Employees,50-249 Employees,,,,,,,11,11,11,11,11,11 +2022,1,3,4,50-249 Employees,250-499 Employees,,,,,,,11,11,11,11,11,11 +2022,1,3,5,50-249 Employees,500+ Employees,,,,,,,11,11,11,11,11,11 +2022,1,4,0,250-499 Employees,All Firm Sizes,290720,129291,420011,164876,61042,225918,1,1,10,1,1,10 +2022,1,4,1,250-499 Employees,0-19 Employees,,,,,,,11,11,11,11,11,11 +2022,1,4,2,250-499 Employees,20-49 Employees,,,,,,,11,11,11,11,11,11 +2022,1,4,3,250-499 Employees,50-249 Employees,,,,,,,11,11,11,11,11,11 +2022,1,4,4,250-499 Employees,250-499 Employees,,,,,,,11,11,11,11,11,11 +2022,1,4,5,250-499 Employees,500+ Employees,,,,,,,11,11,11,11,11,11 +2022,1,5,0,500+ Employees,All Firm Sizes,2796342,1192790,3989132,1543559,571922,2115481,1,1,10,1,1,10 +2022,1,5,1,500+ Employees,0-19 Employees,,,,,,,11,11,11,11,11,11 +2022,1,5,2,500+ Employees,20-49 Employees,,,,,,,11,11,11,11,11,11 +2022,1,5,3,500+ Employees,50-249 Employees,,,,,,,11,11,11,11,11,11 +2022,1,5,4,500+ Employees,250-499 Employees,,,,,,,11,11,11,11,11,11 +2022,1,5,5,500+ Employees,500+ Employees,,,,,,,11,11,11,11,11,11 +2022,2,0,0,All Firm Sizes,All Firm Sizes,6243476,2389107,8632583,3593136,1058325,4651461,1,1,10,1,1,10 +2022,2,0,1,All Firm Sizes,0-19 Employees,980033,406708,1386741,529352,184253,713605,1,1,10,1,1,10 +2022,2,0,2,All Firm Sizes,20-49 Employees,576269,218012,794281,310368,91569,401937,1,1,10,1,1,10 +2022,2,0,3,All Firm Sizes,50-249 Employees,942315,343346,1285661,532274,148835,681109,1,1,10,1,1,10 +2022,2,0,4,All Firm Sizes,250-499 Employees,349304,128113,477417,199865,55614,255479,1,1,10,1,1,10 +2022,2,0,5,All Firm Sizes,500+ Employees,3122950,1188788,4311738,1830593,519869,2350462,1,1,10,1,1,10 +2022,2,1,0,0-19 Employees,All Firm Sizes,838893,372955,1211848,468017,183636,651653,1,1,10,1,1,10 +2022,2,1,1,0-19 Employees,0-19 Employees,,,,,,,11,11,11,11,11,11 +2022,2,1,2,0-19 Employees,20-49 Employees,,,,,,,11,11,11,11,11,11 +2022,2,1,3,0-19 Employees,50-249 Employees,,,,,,,11,11,11,11,11,11 +2022,2,1,4,0-19 Employees,250-499 Employees,,,,,,,11,11,11,11,11,11 +2022,2,1,5,0-19 Employees,500+ Employees,,,,,,,11,11,11,11,11,11 +2022,2,2,0,20-49 Employees,All Firm Sizes,570905,228524,799429,314354,103159,417513,1,1,10,1,1,10 +2022,2,2,1,20-49 Employees,0-19 Employees,,,,,,,11,11,11,11,11,11 +2022,2,2,2,20-49 Employees,20-49 Employees,,,,,,,11,11,11,11,11,11 +2022,2,2,3,20-49 Employees,50-249 Employees,,,,,,,11,11,11,11,11,11 +2022,2,2,4,20-49 Employees,250-499 Employees,,,,,,,11,11,11,11,11,11 +2022,2,2,5,20-49 Employees,500+ Employees,,,,,,,11,11,11,11,11,11 +2022,2,3,0,50-249 Employees,All Firm Sizes,921365,346222,1267587,523884,155309,679193,1,1,10,1,1,10 +2022,2,3,1,50-249 Employees,0-19 Employees,,,,,,,11,11,11,11,11,11 +2022,2,3,2,50-249 Employees,20-49 Employees,,,,,,,11,11,11,11,11,11 +2022,2,3,3,50-249 Employees,50-249 Employees,,,,,,,11,11,11,11,11,11 +2022,2,3,4,50-249 Employees,250-499 Employees,,,,,,,11,11,11,11,11,11 +2022,2,3,5,50-249 Employees,500+ Employees,,,,,,,11,11,11,11,11,11 +2022,2,4,0,250-499 Employees,All Firm Sizes,348325,125030,473355,198698,55496,254194,1,1,10,1,1,10 +2022,2,4,1,250-499 Employees,0-19 Employees,,,,,,,11,11,11,11,11,11 +2022,2,4,2,250-499 Employees,20-49 Employees,,,,,,,11,11,11,11,11,11 +2022,2,4,3,250-499 Employees,50-249 Employees,,,,,,,11,11,11,11,11,11 +2022,2,4,4,250-499 Employees,250-499 Employees,,,,,,,11,11,11,11,11,11 +2022,2,4,5,250-499 Employees,500+ Employees,,,,,,,11,11,11,11,11,11 +2022,2,5,0,500+ Employees,All Firm Sizes,3282284,1229227,4511511,1897395,511169,2408564,1,1,10,1,1,10 +2022,2,5,1,500+ Employees,0-19 Employees,,,,,,,11,11,11,11,11,11 +2022,2,5,2,500+ Employees,20-49 Employees,,,,,,,11,11,11,11,11,11 +2022,2,5,3,500+ Employees,50-249 Employees,,,,,,,11,11,11,11,11,11 +2022,2,5,4,500+ Employees,250-499 Employees,,,,,,,11,11,11,11,11,11 +2022,2,5,5,500+ Employees,500+ Employees,,,,,,,11,11,11,11,11,11 +2022,3,0,0,All Firm Sizes,All Firm Sizes,6773350,2692350,9465700,3960509,1421865,5382374,1,1,10,1,1,10 +2022,3,0,1,All Firm Sizes,0-19 Employees,956209,408725,1364934,518977,207826,726803,1,1,10,1,1,10 +2022,3,0,2,All Firm Sizes,20-49 Employees,585967,226553,812520,315209,111702,426911,1,1,10,1,1,10 +2022,3,0,3,All Firm Sizes,50-249 Employees,972436,363007,1335443,549660,185339,734999,1,1,10,1,1,10 +2022,3,0,4,All Firm Sizes,250-499 Employees,364214,138988,503202,207195,69919,277114,1,1,10,1,1,10 +2022,3,0,5,All Firm Sizes,500+ Employees,3353859,1320458,4674317,1941213,672264,2613477,1,1,10,1,1,10 +2022,3,1,0,0-19 Employees,All Firm Sizes,967740,403378,1371118,515022,210819,725841,1,1,10,1,1,10 +2022,3,1,1,0-19 Employees,0-19 Employees,,,,,,,11,11,11,11,11,11 +2022,3,1,2,0-19 Employees,20-49 Employees,,,,,,,11,11,11,11,11,11 +2022,3,1,3,0-19 Employees,50-249 Employees,,,,,,,11,11,11,11,11,11 +2022,3,1,4,0-19 Employees,250-499 Employees,,,,,,,11,11,11,11,11,11 +2022,3,1,5,0-19 Employees,500+ Employees,,,,,,,11,11,11,11,11,11 +2022,3,2,0,20-49 Employees,All Firm Sizes,620354,246813,867167,340628,125415,466043,1,1,10,1,1,10 +2022,3,2,1,20-49 Employees,0-19 Employees,,,,,,,11,11,11,11,11,11 +2022,3,2,2,20-49 Employees,20-49 Employees,,,,,,,11,11,11,11,11,11 +2022,3,2,3,20-49 Employees,50-249 Employees,,,,,,,11,11,11,11,11,11 +2022,3,2,4,20-49 Employees,250-499 Employees,,,,,,,11,11,11,11,11,11 +2022,3,2,5,20-49 Employees,500+ Employees,,,,,,,11,11,11,11,11,11 +2022,3,3,0,50-249 Employees,All Firm Sizes,987370,377141,1364511,559748,193234,752982,1,1,10,1,1,10 +2022,3,3,1,50-249 Employees,0-19 Employees,,,,,,,11,11,11,11,11,11 +2022,3,3,2,50-249 Employees,20-49 Employees,,,,,,,11,11,11,11,11,11 +2022,3,3,3,50-249 Employees,50-249 Employees,,,,,,,11,11,11,11,11,11 +2022,3,3,4,50-249 Employees,250-499 Employees,,,,,,,11,11,11,11,11,11 +2022,3,3,5,50-249 Employees,500+ Employees,,,,,,,11,11,11,11,11,11 +2022,3,4,0,250-499 Employees,All Firm Sizes,366587,137898,504485,207953,69046,276999,1,1,10,1,1,10 +2022,3,4,1,250-499 Employees,0-19 Employees,,,,,,,11,11,11,11,11,11 +2022,3,4,2,250-499 Employees,20-49 Employees,,,,,,,11,11,11,11,11,11 +2022,3,4,3,250-499 Employees,50-249 Employees,,,,,,,11,11,11,11,11,11 +2022,3,4,4,250-499 Employees,250-499 Employees,,,,,,,11,11,11,11,11,11 +2022,3,4,5,250-499 Employees,500+ Employees,,,,,,,11,11,11,11,11,11 +2022,3,5,0,500+ Employees,All Firm Sizes,3374972,1301349,4676321,1974169,653700,2627869,1,1,10,1,1,10 +2022,3,5,1,500+ Employees,0-19 Employees,,,,,,,11,11,11,11,11,11 +2022,3,5,2,500+ Employees,20-49 Employees,,,,,,,11,11,11,11,11,11 +2022,3,5,3,500+ Employees,50-249 Employees,,,,,,,11,11,11,11,11,11 +2022,3,5,4,500+ Employees,250-499 Employees,,,,,,,11,11,11,11,11,11 +2022,3,5,5,500+ Employees,500+ Employees,,,,,,,11,11,11,11,11,11 +2022,4,0,0,All Firm Sizes,All Firm Sizes,5257157,2437070,7694227,2925250,1130772,4056022,1,1,10,1,1,10 +2022,4,0,1,All Firm Sizes,0-19 Employees,715869,364263,1080132,395999,173982,569981,1,1,10,1,1,10 +2022,4,0,2,All Firm Sizes,20-49 Employees,441819,206884,648703,235256,90675,325931,1,1,10,1,1,10 +2022,4,0,3,All Firm Sizes,50-249 Employees,771427,336141,1107568,421670,153253,574923,1,1,10,1,1,10 +2022,4,0,4,All Firm Sizes,250-499 Employees,293657,126751,420408,161246,57232,218478,1,1,10,1,1,10 +2022,4,0,5,All Firm Sizes,500+ Employees,2751936,1256145,4008081,1508972,565004,2073976,1,1,10,1,1,10 +2022,4,1,0,0-19 Employees,All Firm Sizes,779825,428687,1208512,423411,188350,611761,1,1,10,1,1,10 +2022,4,1,1,0-19 Employees,0-19 Employees,,,,,,,11,11,11,11,11,11 +2022,4,1,2,0-19 Employees,20-49 Employees,,,,,,,11,11,11,11,11,11 +2022,4,1,3,0-19 Employees,50-249 Employees,,,,,,,11,11,11,11,11,11 +2022,4,1,4,0-19 Employees,250-499 Employees,,,,,,,11,11,11,11,11,11 +2022,4,1,5,0-19 Employees,500+ Employees,,,,,,,11,11,11,11,11,11 +2022,4,2,0,20-49 Employees,All Firm Sizes,478798,243546,722344,258288,109851,368139,1,1,10,1,1,10 +2022,4,2,1,20-49 Employees,0-19 Employees,,,,,,,11,11,11,11,11,11 +2022,4,2,2,20-49 Employees,20-49 Employees,,,,,,,11,11,11,11,11,11 +2022,4,2,3,20-49 Employees,50-249 Employees,,,,,,,11,11,11,11,11,11 +2022,4,2,4,20-49 Employees,250-499 Employees,,,,,,,11,11,11,11,11,11 +2022,4,2,5,20-49 Employees,500+ Employees,,,,,,,11,11,11,11,11,11 +2022,4,3,0,50-249 Employees,All Firm Sizes,771019,358384,1129403,424311,164654,588965,1,1,10,1,1,10 +2022,4,3,1,50-249 Employees,0-19 Employees,,,,,,,11,11,11,11,11,11 +2022,4,3,2,50-249 Employees,20-49 Employees,,,,,,,11,11,11,11,11,11 +2022,4,3,3,50-249 Employees,50-249 Employees,,,,,,,11,11,11,11,11,11 +2022,4,3,4,50-249 Employees,250-499 Employees,,,,,,,11,11,11,11,11,11 +2022,4,3,5,50-249 Employees,500+ Employees,,,,,,,11,11,11,11,11,11 +2022,4,4,0,250-499 Employees,All Firm Sizes,291722,129231,420953,160147,59602,219749,1,1,10,1,1,10 +2022,4,4,1,250-499 Employees,0-19 Employees,,,,,,,11,11,11,11,11,11 +2022,4,4,2,250-499 Employees,20-49 Employees,,,,,,,11,11,11,11,11,11 +2022,4,4,3,250-499 Employees,50-249 Employees,,,,,,,11,11,11,11,11,11 +2022,4,4,4,250-499 Employees,250-499 Employees,,,,,,,11,11,11,11,11,11 +2022,4,4,5,250-499 Employees,500+ Employees,,,,,,,11,11,11,11,11,11 +2022,4,5,0,500+ Employees,All Firm Sizes,2710970,1160593,3871563,1502401,541622,2044023,1,1,10,1,1,10 +2022,4,5,1,500+ Employees,0-19 Employees,,,,,,,11,11,11,11,11,11 +2022,4,5,2,500+ Employees,20-49 Employees,,,,,,,11,11,11,11,11,11 +2022,4,5,3,500+ Employees,50-249 Employees,,,,,,,11,11,11,11,11,11 +2022,4,5,4,500+ Employees,250-499 Employees,,,,,,,11,11,11,11,11,11 +2022,4,5,5,500+ Employees,500+ Employees,,,,,,,11,11,11,11,11,11 +2023,1,0,0,All Firm Sizes,All Firm Sizes,4939710,2409065,7348775,2845410,1197075,4042485,1,1,10,1,1,10 +2023,1,0,1,All Firm Sizes,0-19 Employees,666178,375913,1042091,383665,199139,582804,1,1,10,1,1,10 +2023,1,0,2,All Firm Sizes,20-49 Employees,456349,217516,673865,249645,101781,351426,1,1,10,1,1,10 +2023,1,0,3,All Firm Sizes,50-249 Employees,769212,351148,1120360,431868,168203,600071,1,1,10,1,1,10 +2023,1,0,4,All Firm Sizes,250-499 Employees,284370,132459,416829,162970,64956,227926,1,1,10,1,1,10 +2023,1,0,5,All Firm Sizes,500+ Employees,2501940,1214247,3716187,1427101,593893,2020994,1,1,10,1,1,10 +2023,1,1,0,0-19 Employees,All Firm Sizes,617335,454872,1072207,368311,236347,604658,1,1,10,1,1,10 +2023,1,1,1,0-19 Employees,0-19 Employees,,,,,,,11,11,11,11,11,11 +2023,1,1,2,0-19 Employees,20-49 Employees,,,,,,,11,11,11,11,11,11 +2023,1,1,3,0-19 Employees,50-249 Employees,,,,,,,11,11,11,11,11,11 +2023,1,1,4,0-19 Employees,250-499 Employees,,,,,,,11,11,11,11,11,11 +2023,1,1,5,0-19 Employees,500+ Employees,,,,,,,11,11,11,11,11,11 +2023,1,2,0,20-49 Employees,All Firm Sizes,449258,230010,679268,255227,111022,366249,1,1,10,1,1,10 +2023,1,2,1,20-49 Employees,0-19 Employees,,,,,,,11,11,11,11,11,11 +2023,1,2,2,20-49 Employees,20-49 Employees,,,,,,,11,11,11,11,11,11 +2023,1,2,3,20-49 Employees,50-249 Employees,,,,,,,11,11,11,11,11,11 +2023,1,2,4,20-49 Employees,250-499 Employees,,,,,,,11,11,11,11,11,11 +2023,1,2,5,20-49 Employees,500+ Employees,,,,,,,11,11,11,11,11,11 +2023,1,3,0,50-249 Employees,All Firm Sizes,746342,346174,1092516,426594,169871,596465,1,1,10,1,1,10 +2023,1,3,1,50-249 Employees,0-19 Employees,,,,,,,11,11,11,11,11,11 +2023,1,3,2,50-249 Employees,20-49 Employees,,,,,,,11,11,11,11,11,11 +2023,1,3,3,50-249 Employees,50-249 Employees,,,,,,,11,11,11,11,11,11 +2023,1,3,4,50-249 Employees,250-499 Employees,,,,,,,11,11,11,11,11,11 +2023,1,3,5,50-249 Employees,500+ Employees,,,,,,,11,11,11,11,11,11 +2023,1,4,0,250-499 Employees,All Firm Sizes,280063,126914,406977,161920,61560,223480,1,1,10,1,1,10 +2023,1,4,1,250-499 Employees,0-19 Employees,,,,,,,11,11,11,11,11,11 +2023,1,4,2,250-499 Employees,20-49 Employees,,,,,,,11,11,11,11,11,11 +2023,1,4,3,250-499 Employees,50-249 Employees,,,,,,,11,11,11,11,11,11 +2023,1,4,4,250-499 Employees,250-499 Employees,,,,,,,11,11,11,11,11,11 +2023,1,4,5,250-499 Employees,500+ Employees,,,,,,,11,11,11,11,11,11 +2023,1,5,0,500+ Employees,All Firm Sizes,2634699,1166631,3801330,1485112,571249,2056361,1,1,10,1,1,10 +2023,1,5,1,500+ Employees,0-19 Employees,,,,,,,11,11,11,11,11,11 +2023,1,5,2,500+ Employees,20-49 Employees,,,,,,,11,11,11,11,11,11 +2023,1,5,3,500+ Employees,50-249 Employees,,,,,,,11,11,11,11,11,11 +2023,1,5,4,500+ Employees,250-499 Employees,,,,,,,11,11,11,11,11,11 +2023,1,5,5,500+ Employees,500+ Employees,,,,,,,11,11,11,11,11,11 +2023,2,0,0,All Firm Sizes,All Firm Sizes,5443275,2298634,7741909,3104311,1094205,4198516,1,1,10,1,1,10 +2023,2,0,1,All Firm Sizes,0-19 Employees,850848,373389,1224237,461284,178221,639505,1,1,10,1,1,10 +2023,2,0,2,All Firm Sizes,20-49 Employees,520383,215500,735883,277799,97579,375378,1,1,10,1,1,10 +2023,2,0,3,All Firm Sizes,50-249 Employees,855656,346070,1201726,473958,161588,635546,1,1,10,1,1,10 +2023,2,0,4,All Firm Sizes,250-499 Employees,304857,125881,430738,173787,60137,233924,1,1,10,1,1,10 +2023,2,0,5,All Firm Sizes,500+ Employees,2637507,1125414,3762921,1528261,530825,2059086,1,1,10,1,1,10 +2023,2,1,0,0-19 Employees,All Firm Sizes,705682,332590,1038272,390652,172409,563061,1,1,10,1,1,10 +2023,2,1,1,0-19 Employees,0-19 Employees,,,,,,,11,11,11,11,11,11 +2023,2,1,2,0-19 Employees,20-49 Employees,,,,,,,11,11,11,11,11,11 +2023,2,1,3,0-19 Employees,50-249 Employees,,,,,,,11,11,11,11,11,11 +2023,2,1,4,0-19 Employees,250-499 Employees,,,,,,,11,11,11,11,11,11 +2023,2,1,5,0-19 Employees,500+ Employees,,,,,,,11,11,11,11,11,11 +2023,2,2,0,20-49 Employees,All Firm Sizes,515280,221545,736825,279333,105744,385077,1,1,10,1,1,10 +2023,2,2,1,20-49 Employees,0-19 Employees,,,,,,,11,11,11,11,11,11 +2023,2,2,2,20-49 Employees,20-49 Employees,,,,,,,11,11,11,11,11,11 +2023,2,2,3,20-49 Employees,50-249 Employees,,,,,,,11,11,11,11,11,11 +2023,2,2,4,20-49 Employees,250-499 Employees,,,,,,,11,11,11,11,11,11 +2023,2,2,5,20-49 Employees,500+ Employees,,,,,,,11,11,11,11,11,11 +2023,2,3,0,50-249 Employees,All Firm Sizes,832208,348037,1180245,462485,166091,628576,1,1,10,1,1,10 +2023,2,3,1,50-249 Employees,0-19 Employees,,,,,,,11,11,11,11,11,11 +2023,2,3,2,50-249 Employees,20-49 Employees,,,,,,,11,11,11,11,11,11 +2023,2,3,3,50-249 Employees,50-249 Employees,,,,,,,11,11,11,11,11,11 +2023,2,3,4,50-249 Employees,250-499 Employees,,,,,,,11,11,11,11,11,11 +2023,2,3,5,50-249 Employees,500+ Employees,,,,,,,11,11,11,11,11,11 +2023,2,4,0,250-499 Employees,All Firm Sizes,308826,127091,435917,174497,61354,235851,1,1,10,1,1,10 +2023,2,4,1,250-499 Employees,0-19 Employees,,,,,,,11,11,11,11,11,11 +2023,2,4,2,250-499 Employees,20-49 Employees,,,,,,,11,11,11,11,11,11 +2023,2,4,3,250-499 Employees,50-249 Employees,,,,,,,11,11,11,11,11,11 +2023,2,4,4,250-499 Employees,250-499 Employees,,,,,,,11,11,11,11,11,11 +2023,2,4,5,250-499 Employees,500+ Employees,,,,,,,11,11,11,11,11,11 +2023,2,5,0,500+ Employees,All Firm Sizes,2825753,1187288,4013041,1633883,541679,2175562,1,1,10,1,1,10 +2023,2,5,1,500+ Employees,0-19 Employees,,,,,,,11,11,11,11,11,11 +2023,2,5,2,500+ Employees,20-49 Employees,,,,,,,11,11,11,11,11,11 +2023,2,5,3,500+ Employees,50-249 Employees,,,,,,,11,11,11,11,11,11 +2023,2,5,4,500+ Employees,250-499 Employees,,,,,,,11,11,11,11,11,11 +2023,2,5,5,500+ Employees,500+ Employees,,,,,,,11,11,11,11,11,11 +2023,3,0,0,All Firm Sizes,All Firm Sizes,5679397,2505341,8184738,3317672,1353943,4671615,1,1,10,1,1,10 +2023,3,0,1,All Firm Sizes,0-19 Employees,801281,369767,1171048,437528,191768,629296,1,1,10,1,1,10 +2023,3,0,2,All Firm Sizes,20-49 Employees,509233,215227,724460,273756,108434,382190,1,1,10,1,1,10 +2023,3,0,3,All Firm Sizes,50-249 Employees,853471,354900,1208371,477407,183790,661197,1,1,10,1,1,10 +2023,3,0,4,All Firm Sizes,250-499 Employees,306040,128464,434504,174110,67265,241375,1,1,10,1,1,10 +2023,3,0,5,All Firm Sizes,500+ Employees,2704993,1194882,3899875,1556794,620946,2177740,1,1,10,1,1,10 +2023,3,1,0,0-19 Employees,All Firm Sizes,784639,349203,1133842,416042,184852,600894,1,1,10,1,1,10 +2023,3,1,1,0-19 Employees,0-19 Employees,,,,,,,11,11,11,11,11,11 +2023,3,1,2,0-19 Employees,20-49 Employees,,,,,,,11,11,11,11,11,11 +2023,3,1,3,0-19 Employees,50-249 Employees,,,,,,,11,11,11,11,11,11 +2023,3,1,4,0-19 Employees,250-499 Employees,,,,,,,11,11,11,11,11,11 +2023,3,1,5,0-19 Employees,500+ Employees,,,,,,,11,11,11,11,11,11 +2023,3,2,0,20-49 Employees,All Firm Sizes,535493,232283,767776,292882,119225,412107,1,1,10,1,1,10 +2023,3,2,1,20-49 Employees,0-19 Employees,,,,,,,11,11,11,11,11,11 +2023,3,2,2,20-49 Employees,20-49 Employees,,,,,,,11,11,11,11,11,11 +2023,3,2,3,20-49 Employees,50-249 Employees,,,,,,,11,11,11,11,11,11 +2023,3,2,4,20-49 Employees,250-499 Employees,,,,,,,11,11,11,11,11,11 +2023,3,2,5,20-49 Employees,500+ Employees,,,,,,,11,11,11,11,11,11 +2023,3,3,0,50-249 Employees,All Firm Sizes,859743,363099,1222842,481094,188454,669548,1,1,10,1,1,10 +2023,3,3,1,50-249 Employees,0-19 Employees,,,,,,,11,11,11,11,11,11 +2023,3,3,2,50-249 Employees,20-49 Employees,,,,,,,11,11,11,11,11,11 +2023,3,3,3,50-249 Employees,50-249 Employees,,,,,,,11,11,11,11,11,11 +2023,3,3,4,50-249 Employees,250-499 Employees,,,,,,,11,11,11,11,11,11 +2023,3,3,5,50-249 Employees,500+ Employees,,,,,,,11,11,11,11,11,11 +2023,3,4,0,250-499 Employees,All Firm Sizes,311972,131706,443678,178192,68453,246645,1,1,10,1,1,10 +2023,3,4,1,250-499 Employees,0-19 Employees,,,,,,,11,11,11,11,11,11 +2023,3,4,2,250-499 Employees,20-49 Employees,,,,,,,11,11,11,11,11,11 +2023,3,4,3,250-499 Employees,50-249 Employees,,,,,,,11,11,11,11,11,11 +2023,3,4,4,250-499 Employees,250-499 Employees,,,,,,,11,11,11,11,11,11 +2023,3,4,5,250-499 Employees,500+ Employees,,,,,,,11,11,11,11,11,11 +2023,3,5,0,500+ Employees,All Firm Sizes,2790059,1214445,4004504,1639693,633880,2273573,1,1,10,1,1,10 +2023,3,5,1,500+ Employees,0-19 Employees,,,,,,,11,11,11,11,11,11 +2023,3,5,2,500+ Employees,20-49 Employees,,,,,,,11,11,11,11,11,11 +2023,3,5,3,500+ Employees,50-249 Employees,,,,,,,11,11,11,11,11,11 +2023,3,5,4,500+ Employees,250-499 Employees,,,,,,,11,11,11,11,11,11 +2023,3,5,5,500+ Employees,500+ Employees,,,,,,,11,11,11,11,11,11 +2023,4,0,0,All Firm Sizes,All Firm Sizes,4686818,2286142,6972960,2662807,1097108,3759915,1,1,10,1,1,10 +2023,4,0,1,All Firm Sizes,0-19 Employees,625815,326802,952617,355474,160768,516242,1,1,10,1,1,10 +2023,4,0,2,All Firm Sizes,20-49 Employees,402619,196564,599183,219609,89114,308723,1,1,10,1,1,10 +2023,4,0,3,All Firm Sizes,50-249 Employees,714960,327772,1042732,396134,153332,549466,1,1,10,1,1,10 +2023,4,0,4,All Firm Sizes,250-499 Employees,260913,118786,379699,148215,56786,205001,1,1,10,1,1,10 +2023,4,0,5,All Firm Sizes,500+ Employees,2407782,1165926,3573708,1345005,544853,1889858,1,1,10,1,1,10 +2023,4,1,0,0-19 Employees,All Firm Sizes,673906,376930,1050836,372551,169848,542399,1,1,10,1,1,10 +2023,4,1,1,0-19 Employees,0-19 Employees,,,,,,,11,11,11,11,11,11 +2023,4,1,2,0-19 Employees,20-49 Employees,,,,,,,11,11,11,11,11,11 +2023,4,1,3,0-19 Employees,50-249 Employees,,,,,,,11,11,11,11,11,11 +2023,4,1,4,0-19 Employees,250-499 Employees,,,,,,,11,11,11,11,11,11 +2023,4,1,5,0-19 Employees,500+ Employees,,,,,,,11,11,11,11,11,11 +2023,4,2,0,20-49 Employees,All Firm Sizes,438504,230237,668741,241252,106786,348038,1,1,10,1,1,10 +2023,4,2,1,20-49 Employees,0-19 Employees,,,,,,,11,11,11,11,11,11 +2023,4,2,2,20-49 Employees,20-49 Employees,,,,,,,11,11,11,11,11,11 +2023,4,2,3,20-49 Employees,50-249 Employees,,,,,,,11,11,11,11,11,11 +2023,4,2,4,20-49 Employees,250-499 Employees,,,,,,,11,11,11,11,11,11 +2023,4,2,5,20-49 Employees,500+ Employees,,,,,,,11,11,11,11,11,11 +2023,4,3,0,50-249 Employees,All Firm Sizes,717524,349793,1067317,399486,165290,564776,1,1,10,1,1,10 +2023,4,3,1,50-249 Employees,0-19 Employees,,,,,,,11,11,11,11,11,11 +2023,4,3,2,50-249 Employees,20-49 Employees,,,,,,,11,11,11,11,11,11 +2023,4,3,3,50-249 Employees,50-249 Employees,,,,,,,11,11,11,11,11,11 +2023,4,3,4,50-249 Employees,250-499 Employees,,,,,,,11,11,11,11,11,11 +2023,4,3,5,50-249 Employees,500+ Employees,,,,,,,11,11,11,11,11,11 +2023,4,4,0,250-499 Employees,All Firm Sizes,263605,124439,388044,149280,60512,209792,1,1,10,1,1,10 +2023,4,4,1,250-499 Employees,0-19 Employees,,,,,,,11,11,11,11,11,11 +2023,4,4,2,250-499 Employees,20-49 Employees,,,,,,,11,11,11,11,11,11 +2023,4,4,3,250-499 Employees,50-249 Employees,,,,,,,11,11,11,11,11,11 +2023,4,4,4,250-499 Employees,250-499 Employees,,,,,,,11,11,11,11,11,11 +2023,4,4,5,250-499 Employees,500+ Employees,,,,,,,11,11,11,11,11,11 +2023,4,5,0,500+ Employees,All Firm Sizes,2391232,1088841,3480073,1359774,530804,1890578,1,1,10,1,1,10 +2023,4,5,1,500+ Employees,0-19 Employees,,,,,,,11,11,11,11,11,11 +2023,4,5,2,500+ Employees,20-49 Employees,,,,,,,11,11,11,11,11,11 +2023,4,5,3,500+ Employees,50-249 Employees,,,,,,,11,11,11,11,11,11 +2023,4,5,4,500+ Employees,250-499 Employees,,,,,,,11,11,11,11,11,11 +2023,4,5,5,500+ Employees,500+ Employees,,,,,,,11,11,11,11,11,11 +2024,1,0,0,All Firm Sizes,All Firm Sizes,4437907,2221566,6659473,2604995,1157724,3762719,1,1,10,1,1,10 +2024,1,0,1,All Firm Sizes,0-19 Employees,603197,347315,950512,355010,191414,546424,1,1,10,1,1,10 +2024,1,0,2,All Firm Sizes,20-49 Employees,409693,200954,610647,228287,98393,326680,1,1,10,1,1,10 +2024,1,0,3,All Firm Sizes,50-249 Employees,705044,334707,1039751,399571,168133,567704,1,1,10,1,1,10 +2024,1,0,4,All Firm Sizes,250-499 Employees,252060,121858,373918,146716,62808,209524,1,1,10,1,1,10 +2024,1,0,5,All Firm Sizes,500+ Employees,2221076,1103385,3324461,1297201,569138,1866339,1,1,10,1,1,10 +2024,1,1,0,0-19 Employees,All Firm Sizes,563427,401504,964931,340290,214373,554663,1,1,10,1,1,10 +2024,1,1,1,0-19 Employees,0-19 Employees,,,,,,,11,11,11,11,11,11 +2024,1,1,2,0-19 Employees,20-49 Employees,,,,,,,11,11,11,11,11,11 +2024,1,1,3,0-19 Employees,50-249 Employees,,,,,,,11,11,11,11,11,11 +2024,1,1,4,0-19 Employees,250-499 Employees,,,,,,,11,11,11,11,11,11 +2024,1,1,5,0-19 Employees,500+ Employees,,,,,,,11,11,11,11,11,11 +2024,1,2,0,20-49 Employees,All Firm Sizes,408455,217427,625882,237246,110401,347647,1,1,10,1,1,10 +2024,1,2,1,20-49 Employees,0-19 Employees,,,,,,,11,11,11,11,11,11 +2024,1,2,2,20-49 Employees,20-49 Employees,,,,,,,11,11,11,11,11,11 +2024,1,2,3,20-49 Employees,50-249 Employees,,,,,,,11,11,11,11,11,11 +2024,1,2,4,20-49 Employees,250-499 Employees,,,,,,,11,11,11,11,11,11 +2024,1,2,5,20-49 Employees,500+ Employees,,,,,,,11,11,11,11,11,11 +2024,1,3,0,50-249 Employees,All Firm Sizes,694767,333958,1028725,398169,170405,568574,1,1,10,1,1,10 +2024,1,3,1,50-249 Employees,0-19 Employees,,,,,,,11,11,11,11,11,11 +2024,1,3,2,50-249 Employees,20-49 Employees,,,,,,,11,11,11,11,11,11 +2024,1,3,3,50-249 Employees,50-249 Employees,,,,,,,11,11,11,11,11,11 +2024,1,3,4,50-249 Employees,250-499 Employees,,,,,,,11,11,11,11,11,11 +2024,1,3,5,50-249 Employees,500+ Employees,,,,,,,11,11,11,11,11,11 +2024,1,4,0,250-499 Employees,All Firm Sizes,249127,121147,370274,146794,63067,209861,1,1,10,1,1,10 +2024,1,4,1,250-499 Employees,0-19 Employees,,,,,,,11,11,11,11,11,11 +2024,1,4,2,250-499 Employees,20-49 Employees,,,,,,,11,11,11,11,11,11 +2024,1,4,3,250-499 Employees,50-249 Employees,,,,,,,11,11,11,11,11,11 +2024,1,4,4,250-499 Employees,250-499 Employees,,,,,,,11,11,11,11,11,11 +2024,1,4,5,250-499 Employees,500+ Employees,,,,,,,11,11,11,11,11,11 +2024,1,5,0,500+ Employees,All Firm Sizes,2330366,1066894,3397260,1348486,552906,1901392,1,1,10,1,1,10 +2024,1,5,1,500+ Employees,0-19 Employees,,,,,,,11,11,11,11,11,11 +2024,1,5,2,500+ Employees,20-49 Employees,,,,,,,11,11,11,11,11,11 +2024,1,5,3,500+ Employees,50-249 Employees,,,,,,,11,11,11,11,11,11 +2024,1,5,4,500+ Employees,250-499 Employees,,,,,,,11,11,11,11,11,11 +2024,1,5,5,500+ Employees,500+ Employees,,,,,,,11,11,11,11,11,11 +2024,2,0,0,All Firm Sizes,All Firm Sizes,5000391,2149166,7149557,2916011,1049055,3965066,1,1,10,1,1,10 +2024,2,0,1,All Firm Sizes,0-19 Employees,775807,347595,1123402,431383,170487,601870,1,1,10,1,1,10 +2024,2,0,2,All Firm Sizes,20-49 Employees,473525,200824,674349,258895,93316,352211,1,1,10,1,1,10 +2024,2,0,3,All Firm Sizes,50-249 Employees,792088,329252,1121340,445648,156602,602250,1,1,10,1,1,10 +2024,2,0,4,All Firm Sizes,250-499 Employees,278225,116498,394723,160896,56794,217690,1,1,10,1,1,10 +2024,2,0,5,All Firm Sizes,500+ Employees,2421423,1044770,3466193,1440766,506667,1947433,1,1,10,1,1,10 +2024,2,1,0,0-19 Employees,All Firm Sizes,649014,311447,960461,367142,163583,530725,1,1,10,1,1,10 +2024,2,1,1,0-19 Employees,0-19 Employees,,,,,,,11,11,11,11,11,11 +2024,2,1,2,0-19 Employees,20-49 Employees,,,,,,,11,11,11,11,11,11 +2024,2,1,3,0-19 Employees,50-249 Employees,,,,,,,11,11,11,11,11,11 +2024,2,1,4,0-19 Employees,250-499 Employees,,,,,,,11,11,11,11,11,11 +2024,2,1,5,0-19 Employees,500+ Employees,,,,,,,11,11,11,11,11,11 +2024,2,2,0,20-49 Employees,All Firm Sizes,474361,210147,684508,263562,103394,366956,1,1,10,1,1,10 +2024,2,2,1,20-49 Employees,0-19 Employees,,,,,,,11,11,11,11,11,11 +2024,2,2,2,20-49 Employees,20-49 Employees,,,,,,,11,11,11,11,11,11 +2024,2,2,3,20-49 Employees,50-249 Employees,,,,,,,11,11,11,11,11,11 +2024,2,2,4,20-49 Employees,250-499 Employees,,,,,,,11,11,11,11,11,11 +2024,2,2,5,20-49 Employees,500+ Employees,,,,,,,11,11,11,11,11,11 +2024,2,3,0,50-249 Employees,All Firm Sizes,784177,337967,1122144,443398,163581,606979,1,1,10,1,1,10 +2024,2,3,1,50-249 Employees,0-19 Employees,,,,,,,11,11,11,11,11,11 +2024,2,3,2,50-249 Employees,20-49 Employees,,,,,,,11,11,11,11,11,11 +2024,2,3,3,50-249 Employees,50-249 Employees,,,,,,,11,11,11,11,11,11 +2024,2,3,4,50-249 Employees,250-499 Employees,,,,,,,11,11,11,11,11,11 +2024,2,3,5,50-249 Employees,500+ Employees,,,,,,,11,11,11,11,11,11 +2024,2,4,0,250-499 Employees,All Firm Sizes,282218,119297,401515,163375,59445,222820,1,1,10,1,1,10 +2024,2,4,1,250-499 Employees,0-19 Employees,,,,,,,11,11,11,11,11,11 +2024,2,4,2,250-499 Employees,20-49 Employees,,,,,,,11,11,11,11,11,11 +2024,2,4,3,250-499 Employees,50-249 Employees,,,,,,,11,11,11,11,11,11 +2024,2,4,4,250-499 Employees,250-499 Employees,,,,,,,11,11,11,11,11,11 +2024,2,4,5,250-499 Employees,500+ Employees,,,,,,,11,11,11,11,11,11 +2024,2,5,0,500+ Employees,All Firm Sizes,2569298,1087174,3656472,1524830,512041,2036871,1,1,10,1,1,10 +2024,2,5,1,500+ Employees,0-19 Employees,,,,,,,11,11,11,11,11,11 +2024,2,5,2,500+ Employees,20-49 Employees,,,,,,,11,11,11,11,11,11 +2024,2,5,3,500+ Employees,50-249 Employees,,,,,,,11,11,11,11,11,11 +2024,2,5,4,500+ Employees,250-499 Employees,,,,,,,11,11,11,11,11,11 +2024,2,5,5,500+ Employees,500+ Employees,,,,,,,11,11,11,11,11,11 +2024,3,0,0,All Firm Sizes,All Firm Sizes,5254119,2332072,7586191,3143717,1301044,4444761,1,1,10,1,1,10 +2024,3,0,1,All Firm Sizes,0-19 Employees,729250,340154,1069404,404629,181600,586229,1,1,10,1,1,10 +2024,3,0,2,All Firm Sizes,20-49 Employees,463804,199140,662944,255742,104084,359826,1,1,10,1,1,10 +2024,3,0,3,All Firm Sizes,50-249 Employees,793041,334094,1127135,450326,177583,627909,1,1,10,1,1,10 +2024,3,0,4,All Firm Sizes,250-499 Employees,283065,120993,404058,166127,65850,231977,1,1,10,1,1,10 +2024,3,0,5,All Firm Sizes,500+ Employees,2512982,1109336,3622318,1493828,600038,2093866,1,1,10,1,1,10 +2024,3,1,0,0-19 Employees,All Firm Sizes,717280,321619,1038899,388707,173880,562587,1,1,10,1,1,10 +2024,3,1,1,0-19 Employees,0-19 Employees,,,,,,,11,11,11,11,11,11 +2024,3,1,2,0-19 Employees,20-49 Employees,,,,,,,11,11,11,11,11,11 +2024,3,1,3,0-19 Employees,50-249 Employees,,,,,,,11,11,11,11,11,11 +2024,3,1,4,0-19 Employees,250-499 Employees,,,,,,,11,11,11,11,11,11 +2024,3,1,5,0-19 Employees,500+ Employees,,,,,,,11,11,11,11,11,11 +2024,3,2,0,20-49 Employees,All Firm Sizes,492856,216345,709201,276762,115046,391808,1,1,10,1,1,10 +2024,3,2,1,20-49 Employees,0-19 Employees,,,,,,,11,11,11,11,11,11 +2024,3,2,2,20-49 Employees,20-49 Employees,,,,,,,11,11,11,11,11,11 +2024,3,2,3,20-49 Employees,50-249 Employees,,,,,,,11,11,11,11,11,11 +2024,3,2,4,20-49 Employees,250-499 Employees,,,,,,,11,11,11,11,11,11 +2024,3,2,5,20-49 Employees,500+ Employees,,,,,,,11,11,11,11,11,11 +2024,3,3,0,50-249 Employees,All Firm Sizes,807030,347369,1154399,460514,185669,646183,1,1,10,1,1,10 +2024,3,3,1,50-249 Employees,0-19 Employees,,,,,,,11,11,11,11,11,11 +2024,3,3,2,50-249 Employees,20-49 Employees,,,,,,,11,11,11,11,11,11 +2024,3,3,3,50-249 Employees,50-249 Employees,,,,,,,11,11,11,11,11,11 +2024,3,3,4,50-249 Employees,250-499 Employees,,,,,,,11,11,11,11,11,11 +2024,3,3,5,50-249 Employees,500+ Employees,,,,,,,11,11,11,11,11,11 +2024,3,4,0,250-499 Employees,All Firm Sizes,286534,124557,411091,167929,67205,235134,1,1,10,1,1,10 +2024,3,4,1,250-499 Employees,0-19 Employees,,,,,,,11,11,11,11,11,11 +2024,3,4,2,250-499 Employees,20-49 Employees,,,,,,,11,11,11,11,11,11 +2024,3,4,3,250-499 Employees,50-249 Employees,,,,,,,11,11,11,11,11,11 +2024,3,4,4,250-499 Employees,250-499 Employees,,,,,,,11,11,11,11,11,11 +2024,3,4,5,250-499 Employees,500+ Employees,,,,,,,11,11,11,11,11,11 +2024,3,5,0,500+ Employees,All Firm Sizes,2570000,1113249,3683249,1552704,603918,2156622,1,1,10,1,1,10 +2024,3,5,1,500+ Employees,0-19 Employees,,,,,,,11,11,11,11,11,11 +2024,3,5,2,500+ Employees,20-49 Employees,,,,,,,11,11,11,11,11,11 +2024,3,5,3,500+ Employees,50-249 Employees,,,,,,,11,11,11,11,11,11 +2024,3,5,4,500+ Employees,250-499 Employees,,,,,,,11,11,11,11,11,11 +2024,3,5,5,500+ Employees,500+ Employees,,,,,,,11,11,11,11,11,11 +2024,4,0,0,All Firm Sizes,All Firm Sizes,4411959,2156061,6568020,2567324,1057578,3624902,1,1,10,1,1,10 +2024,4,0,1,All Firm Sizes,0-19 Employees,584578,305083,889661,338091,152974,491065,1,1,10,1,1,10 +2024,4,0,2,All Firm Sizes,20-49 Employees,371709,183222,554931,207679,86089,293768,1,1,10,1,1,10 +2024,4,0,3,All Firm Sizes,50-249 Employees,674769,314808,989577,381168,150125,531293,1,1,10,1,1,10 +2024,4,0,4,All Firm Sizes,250-499 Employees,245243,112641,357884,143017,55423,198440,1,1,10,1,1,10 +2024,4,0,5,All Firm Sizes,500+ Employees,2282886,1099811,3382697,1314438,525379,1839817,1,1,10,1,1,10 +2024,4,1,0,0-19 Employees,All Firm Sizes,626249,350913,977162,351222,160931,512153,1,1,10,1,1,10 +2024,4,1,1,0-19 Employees,0-19 Employees,,,,,,,11,11,11,11,11,11 +2024,4,1,2,0-19 Employees,20-49 Employees,,,,,,,11,11,11,11,11,11 +2024,4,1,3,0-19 Employees,50-249 Employees,,,,,,,11,11,11,11,11,11 +2024,4,1,4,0-19 Employees,250-499 Employees,,,,,,,11,11,11,11,11,11 +2024,4,1,5,0-19 Employees,500+ Employees,,,,,,,11,11,11,11,11,11 +2024,4,2,0,20-49 Employees,All Firm Sizes,405410,216552,621962,228944,103292,332236,1,1,10,1,1,10 +2024,4,2,1,20-49 Employees,0-19 Employees,,,,,,,11,11,11,11,11,11 +2024,4,2,2,20-49 Employees,20-49 Employees,,,,,,,11,11,11,11,11,11 +2024,4,2,3,20-49 Employees,50-249 Employees,,,,,,,11,11,11,11,11,11 +2024,4,2,4,20-49 Employees,250-499 Employees,,,,,,,11,11,11,11,11,11 +2024,4,2,5,20-49 Employees,500+ Employees,,,,,,,11,11,11,11,11,11 +2024,4,3,0,50-249 Employees,All Firm Sizes,684820,337386,1022206,387341,163052,550393,1,1,10,1,1,10 +2024,4,3,1,50-249 Employees,0-19 Employees,,,,,,,11,11,11,11,11,11 +2024,4,3,2,50-249 Employees,20-49 Employees,,,,,,,11,11,11,11,11,11 +2024,4,3,3,50-249 Employees,50-249 Employees,,,,,,,11,11,11,11,11,11 +2024,4,3,4,50-249 Employees,250-499 Employees,,,,,,,11,11,11,11,11,11 +2024,4,3,5,50-249 Employees,500+ Employees,,,,,,,11,11,11,11,11,11 +2024,4,4,0,250-499 Employees,All Firm Sizes,247217,116047,363264,144175,57369,201544,1,1,10,1,1,10 +2024,4,4,1,250-499 Employees,0-19 Employees,,,,,,,11,11,11,11,11,11 +2024,4,4,2,250-499 Employees,20-49 Employees,,,,,,,11,11,11,11,11,11 +2024,4,4,3,250-499 Employees,50-249 Employees,,,,,,,11,11,11,11,11,11 +2024,4,4,4,250-499 Employees,250-499 Employees,,,,,,,11,11,11,11,11,11 +2024,4,4,5,250-499 Employees,500+ Employees,,,,,,,11,11,11,11,11,11 +2024,4,5,0,500+ Employees,All Firm Sizes,2257158,1017094,3274252,1324058,506676,1830734,1,1,10,1,1,10 +2024,4,5,1,500+ Employees,0-19 Employees,,,,,,,11,11,11,11,11,11 +2024,4,5,2,500+ Employees,20-49 Employees,,,,,,,11,11,11,11,11,11 +2024,4,5,3,500+ Employees,50-249 Employees,,,,,,,11,11,11,11,11,11 +2024,4,5,4,500+ Employees,250-499 Employees,,,,,,,11,11,11,11,11,11 +2024,4,5,5,500+ Employees,500+ Employees,,,,,,,11,11,11,11,11,11 +2025,1,0,0,All Firm Sizes,All Firm Sizes,4161176,2058002,6219178,2492622,1102224,3594846,1,1,10,1,1,10 +2025,1,0,1,All Firm Sizes,0-19 Employees,578616,329276,907892,345741,184463,530204,1,1,10,1,1,10 +2025,1,0,2,All Firm Sizes,20-49 Employees,379091,183038,562129,215868,92373,308241,1,1,10,1,1,10 +2025,1,0,3,All Firm Sizes,50-249 Employees,662704,307595,970299,382091,157325,539416,1,1,10,1,1,10 +2025,1,0,4,All Firm Sizes,250-499 Employees,243284,112467,355751,144666,58573,203239,1,1,10,1,1,10 +2025,1,0,5,All Firm Sizes,500+ Employees,2074930,1021639,3096569,1242969,546130,1789099,1,1,10,1,1,10 +2025,1,1,0,0-19 Employees,All Firm Sizes,530005,367808,897813,323014,199147,522161,1,1,10,1,1,10 +2025,1,1,1,0-19 Employees,0-19 Employees,,,,,,,11,11,11,11,11,11 +2025,1,1,2,0-19 Employees,20-49 Employees,,,,,,,11,11,11,11,11,11 +2025,1,1,3,0-19 Employees,50-249 Employees,,,,,,,11,11,11,11,11,11 +2025,1,1,4,0-19 Employees,250-499 Employees,,,,,,,11,11,11,11,11,11 +2025,1,1,5,0-19 Employees,500+ Employees,,,,,,,11,11,11,11,11,11 +2025,1,2,0,20-49 Employees,All Firm Sizes,377660,197105,574765,223684,101694,325378,1,1,10,1,1,10 +2025,1,2,1,20-49 Employees,0-19 Employees,,,,,,,11,11,11,11,11,11 +2025,1,2,2,20-49 Employees,20-49 Employees,,,,,,,11,11,11,11,11,11 +2025,1,2,3,20-49 Employees,50-249 Employees,,,,,,,11,11,11,11,11,11 +2025,1,2,4,20-49 Employees,250-499 Employees,,,,,,,11,11,11,11,11,11 +2025,1,2,5,20-49 Employees,500+ Employees,,,,,,,11,11,11,11,11,11 +2025,1,3,0,50-249 Employees,All Firm Sizes,648991,311830,960821,380775,161818,542593,1,1,10,1,1,10 +2025,1,3,1,50-249 Employees,0-19 Employees,,,,,,,11,11,11,11,11,11 +2025,1,3,2,50-249 Employees,20-49 Employees,,,,,,,11,11,11,11,11,11 +2025,1,3,3,50-249 Employees,50-249 Employees,,,,,,,11,11,11,11,11,11 +2025,1,3,4,50-249 Employees,250-499 Employees,,,,,,,11,11,11,11,11,11 +2025,1,3,5,50-249 Employees,500+ Employees,,,,,,,11,11,11,11,11,11 +2025,1,4,0,250-499 Employees,All Firm Sizes,237000,110795,347795,143912,58887,202799,1,1,10,1,1,10 +2025,1,4,1,250-499 Employees,0-19 Employees,,,,,,,11,11,11,11,11,11 +2025,1,4,2,250-499 Employees,20-49 Employees,,,,,,,11,11,11,11,11,11 +2025,1,4,3,250-499 Employees,50-249 Employees,,,,,,,11,11,11,11,11,11 +2025,1,4,4,250-499 Employees,250-499 Employees,,,,,,,11,11,11,11,11,11 +2025,1,4,5,250-499 Employees,500+ Employees,,,,,,,11,11,11,11,11,11 +2025,1,5,0,500+ Employees,All Firm Sizes,2190348,992112,3182460,1295120,533903,1829023,1,1,10,1,1,10 +2025,1,5,1,500+ Employees,0-19 Employees,,,,,,,11,11,11,11,11,11 +2025,1,5,2,500+ Employees,20-49 Employees,,,,,,,11,11,11,11,11,11 +2025,1,5,3,500+ Employees,50-249 Employees,,,,,,,11,11,11,11,11,11 +2025,1,5,4,500+ Employees,250-499 Employees,,,,,,,11,11,11,11,11,11 +2025,1,5,5,500+ Employees,500+ Employees,,,,,,,11,11,11,11,11,11 diff --git a/scripts/fetch_employer_firm_targets.py b/scripts/fetch_employer_firm_targets.py index 1ed32d80..d7d4eed2 100644 --- a/scripts/fetch_employer_firm_targets.py +++ b/scripts/fetch_employer_firm_targets.py @@ -28,6 +28,22 @@ job-to-job hire/separation flows by firm size x NAICS sector, 2015Q1 on (the ``year >= 2015`` filter; matches the provenance note). Feeds E11's national margin. +* **J2J R2026Q1 (us, sex x age, no firm characteristics)** -- national + job-to-job hire/separation flows by sex x age group, all-industry + margin only (the committed-extract size cap rules out the full + sector detail), 2015Q1 on. Feeds gate E2's age x sex + separation/hire/J2J rate references. NOTE: LEHD calls the sex x + age tabulation ``sa`` (``se`` is sex x *education*). +* **J2JOD R2026Q1 (us, origin x destination firm size)** -- national + job-to-job flows by origin firm size x destination firm size, + 2015Q1 on. Feeds gate E11's origin/destination size-ladder + reference. The LEHD flat J2JOD files publish only the one-sided + firm-size margins, so the full cross comes from the LED Extraction + Tool query API (``ledextract.ces.census.gov``), which serves the + current release (probed 2026-07-17: schema V4.14.0 = R2026Q1). + The full detail is released for 2015Q1-2016Q1 only; later + quarters are suppressed (status flag 11) and only the margins + remain published -- see the provenance note. Run from the repository root:: @@ -42,7 +58,10 @@ import gzip import hashlib +import json import tempfile +import urllib.error +import urllib.parse import urllib.request from pathlib import Path @@ -52,6 +71,9 @@ OUT_DIR = ROOT / "data" / "external" RETRIEVED = "2026-07-14" +#: Fetch date of the second-wave extracts (sex x age J2J, J2JOD +#: origin x destination firm size). +RETRIEVED_WAVE2 = "2026-07-17" #: Pinned raw source files: url -> sha256 of the download performed on #: RETRIEVED. A digest mismatch means the agency re-issued the file; @@ -83,6 +105,15 @@ "j2j_us_d_fs_gn_ns_oslp_u.csv.gz", "abdd573d414d66f864828952501cee0a6ef6c8db88cb789da38af1a3" "c9d55c6f", ), + "j2j_us_sa_f_gn_ns_oslp_u.csv.gz": ( + "https://lehd.ces.census.gov/data/j2j/R2026Q1/us/j2j/" + "j2j_us_sa_f_gn_ns_oslp_u.csv.gz", + "0e043fc8796bd3e11231ff6d174fdfebed926c9d40da4f069a3ad31e" "ed55aba0", + ), + "label_agegrp.csv": ( + "https://lehd.ces.census.gov/data/schema/latest/" "label_agegrp.csv", + "eb478c6eda6c12a57609afaf89bbb42dd4d9fb2ee883f6dd0399fb71" "7b27889b", + ), "label_firmsize.csv": ( "https://lehd.ces.census.gov/data/schema/latest/" "label_firmsize.csv", "29dfd8fed594be600c6c554b4cb27bd590c45da549c30e32824cea42" "48dffe1f", @@ -103,6 +134,66 @@ 5: "500+ Employees", } +#: LEHD sex code -> label (pinned from the J2J schema). +SEX_LABELS = {0: "All Sexes", 1: "Male", 2: "Female"} + +#: LEHD age-group code -> label (pinned from label_agegrp.csv). +AGEGRP_LABELS = { + "A00": "All Ages (14-99)", + "A01": "14-18", + "A02": "19-21", + "A03": "22-24", + "A04": "25-34", + "A05": "35-44", + "A06": "45-54", + "A07": "55-64", + "A08": "65-99", +} + +# ---------------------------------------------------------------- +# LED Extraction Tool (the J2JOD origin x destination firm-size +# cross is not published in the LEHD flat files -- they carry only +# the one-sided firm-size margins -- so it is pulled through the +# LED Extraction Tool's query API instead). +# ---------------------------------------------------------------- + +LED_BASE = "https://ledextract.ces.census.gov" + +#: Query submitted to the LED Extraction Tool (POST /j2j/download). +#: ``oq`` is the ordinal quarter, year * 4 + (quarter - 1): +#: 8060 = 2015Q1 .. 8100 = 2025Q1 (the last quarter in R2026Q1). +#: Origin-destination queries must carry the ``*_orig`` keys. +LED_J2JOD_REQUEST = { + "version": "V4.14.0", + "seasonadj": ["U"], + "geography": ["00"], + "geography_orig": ["00"], + "industry": ["00"], + "industry_orig": ["00"], + "firmage": ["0"], + "firmage_orig": ["0"], + "firmsize": ["0", "1", "2", "3", "4", "5"], + "firmsize_orig": ["0", "1", "2", "3", "4", "5"], + "sex": ["0"], + "agegrp": ["A00"], + "education": ["E0"], + "race": ["A0"], + "ethnicity": ["A0"], + "indicator": ["J2J", "EE", "AQHire", "J2JS", "EES", "AQHireS"], + "oq": list(range(8060, 8101)), + "export_labels": False, +} + +#: sha256 of the CSV returned by the LED Extraction Tool for +#: LED_J2JOD_REQUEST on RETRIEVED_WAVE2 (release R2026Q1, schema +#: V4.14.0; the fetch was repeated and is byte-stable). The tool +#: serves the *current* release, so this pin breaks -- loudly, by +#: design -- when LEHD rotates to R2026Q2; re-pin deliberately and +#: update the provenance note. +LED_J2JOD_SHA256 = ( + "adbd16e2c23ee3a87a22c5f6520eca37b09f8036131d4147c081c89d" "6a5a867f" +) + QWI_MEASURES = [ "Emp", "EmpEnd", @@ -136,6 +227,68 @@ ] +J2JOD_MEASURES = ["EE", "AQHire", "J2J", "EES", "AQHireS", "J2JS"] + + +class _NoRedirect(urllib.request.HTTPRedirectHandler): + """Surface the LED tool's 303 instead of following it (the + redirect target is the HTML results page; the CSV lives at + ``download.csv`` with the same query string).""" + + def redirect_request(self, *args, **kwargs): + return None + + +def fetch_led_j2jod(cache_dir: Path) -> Path: + """Fetch the J2JOD firm-size cross via the LED Extraction Tool. + + POST the JSON query to ``/j2j/download``; the tool answers 303 + with the encoded query string, and ``/j2j/download.csv?`` + serves the extract. The result is cached and its sha256 verified + against the pinned digest (see :data:`LED_J2JOD_SHA256`). + """ + path = cache_dir / "led_j2jod_us_fsfs_2015on.csv" + if not path.exists(): + print("querying the LED Extraction Tool (J2JOD firm-size cross)") + req = urllib.request.Request( + LED_BASE + "/j2j/download", + data=json.dumps(LED_J2JOD_REQUEST).encode(), + headers={ + "Content-Type": "application/json", + "User-Agent": "populace-dynamics fetch script", + }, + ) + opener = urllib.request.build_opener(_NoRedirect()) + try: + resp = opener.open(req, timeout=300) + raise RuntimeError( + "LED Extraction Tool did not redirect (HTTP " + f"{resp.status}); the query API may have changed." + ) + except urllib.error.HTTPError as err: + if err.code != 303: + raise + location = err.headers["Location"] + query = urllib.parse.urlsplit(location).query + csv_req = urllib.request.Request( + LED_BASE + "/j2j/download.csv?" + query, + headers={"User-Agent": "populace-dynamics fetch script"}, + ) + tmp = path.with_suffix(path.suffix + ".part") + with urllib.request.urlopen(csv_req, timeout=300) as resp: + tmp.write_bytes(resp.read()) + tmp.replace(path) + digest = hashlib.sha256(path.read_bytes()).hexdigest() + if digest != LED_J2JOD_SHA256: + raise RuntimeError( + f"LED J2JOD extract: sha256 {digest} != pinned " + f"{LED_J2JOD_SHA256}. The LED Extraction Tool serves the " + "current release; if LEHD rotated releases, re-pin " + "deliberately and update the provenance note." + ) + return path + + def fetch(name: str, cache_dir: Path) -> Path: """Download (or reuse) a pinned raw file and verify its sha256.""" url, expected = SOURCES[name] @@ -289,6 +442,66 @@ def build_j2j(cache_dir: Path) -> None: print(f"j2j_us_firmsize_sector_2015on.csv: {len(out)} rows") +def build_j2j_sexage(cache_dir: Path) -> None: + """National J2J flows by sex x age group (all-industry margin). + + The raw ``sa`` file is sex x age x NAICS sector; the committed + extract keeps the all-industry margin (``industry == "00"``) only + -- with the full sector detail the file would breach the 1 MB + extract cap -- but keeps the complete sex (0-2) x age (A00-A08) + grid, margins included, so aggregation identities stay testable. + Pure row/column filter, no re-aggregation, from LEHD_START_YEAR + on. + """ + path = fetch("j2j_us_sa_f_gn_ns_oslp_u.csv.gz", cache_dir) + with gzip.open(path, "rt") as fh: + raw = pd.read_csv(fh, low_memory=False) + keep = raw[ + (raw["year"] >= LEHD_START_YEAR) + & (raw["industry"].astype(str) == "00") + ].copy() + id_cols = ["year", "quarter", "sex", "agegrp"] + flag_cols = [f"s{m}" for m in J2J_MEASURES] + out = keep[id_cols + J2J_MEASURES + flag_cols].copy() + out.insert(3, "sex_label", out["sex"].map(SEX_LABELS)) + out.insert(5, "agegrp_label", out["agegrp"].map(AGEGRP_LABELS)) + out = out.sort_values(id_cols).reset_index(drop=True) + out.to_csv( + OUT_DIR / "j2j_us_sexage_2015on.csv", + index=False, + float_format="%.10g", + ) + print(f"j2j_us_sexage_2015on.csv: {len(out)} rows") + + +def build_j2jod_firmsize(cache_dir: Path) -> None: + """National J2J flows by origin x destination firm size. + + From the LED Extraction Tool (see :func:`fetch_led_j2jod`); the + committed extract keeps the full 6 x 6 grid (codes 0-5 on both + sides: the 25 detail cells plus the tool's aggregated margins, + status flag 10/12). Column subset and sort only, no + re-aggregation. Suppressed cells (status flag 11) load as NaN. + NOTE: the tool's margins are aggregates of the firm-size-coded + tabulation, so they sit slightly below the flat-file ``d_fs`` + margins, which include public-sector (firm size "N") flows. + """ + raw = pd.read_csv(fetch_led_j2jod(cache_dir), low_memory=False) + keep = raw[raw["year"] >= LEHD_START_YEAR].copy() + id_cols = ["year", "quarter", "firmsize_orig", "firmsize"] + flag_cols = [f"s{m}" for m in J2JOD_MEASURES] + out = keep[id_cols + J2JOD_MEASURES + flag_cols].copy() + out.insert(4, "firmsize_orig_label", _firmsize_label(out["firmsize_orig"])) + out.insert(5, "firmsize_label", _firmsize_label(out["firmsize"])) + out = out.sort_values(id_cols).reset_index(drop=True) + out.to_csv( + OUT_DIR / "j2jod_us_firmsize_od_2015on.csv", + index=False, + float_format="%.10g", + ) + print(f"j2jod_us_firmsize_od_2015on.csv: {len(out)} rows") + + def main() -> None: cache_dir = Path(tempfile.gettempdir()) / "employer_firm_raw_cache" cache_dir.mkdir(parents=True, exist_ok=True) @@ -297,6 +510,8 @@ def main() -> None: build_bds(cache_dir) build_qwi(cache_dir) build_j2j(cache_dir) + build_j2j_sexage(cache_dir) + build_j2jod_firmsize(cache_dir) for f in sorted(OUT_DIR.glob("*_us_*2015on.csv")) + [ OUT_DIR / "susb_us_sector_size_2022.csv", OUT_DIR / "bds_us_firm_size_1978_2022.csv", diff --git a/src/populace_dynamics/firms/targets.py b/src/populace_dynamics/firms/targets.py index 805e90a5..c71eec3e 100644 --- a/src/populace_dynamics/firms/targets.py +++ b/src/populace_dynamics/firms/targets.py @@ -30,6 +30,8 @@ "load_bds_firm_size", "load_qwi_firmsize_sector", "load_j2j_firmsize_sector", + "load_j2j_sexage", + "load_j2jod_firmsize", ] EXTERNAL_DIR = Path(__file__).resolve().parents[3] / "data" / "external" @@ -37,6 +39,11 @@ BDS_PATH = EXTERNAL_DIR / "bds_us_firm_size_1978_2022.csv" QWI_PATH = EXTERNAL_DIR / "qwi_us_firmsize_sector_2015on.csv" J2J_PATH = EXTERNAL_DIR / "j2j_us_firmsize_sector_2015on.csv" +J2J_SEXAGE_PATH = EXTERNAL_DIR / "j2j_us_sexage_2015on.csv" +J2JOD_PATH = EXTERNAL_DIR / "j2jod_us_firmsize_od_2015on.csv" + +#: LEHD age-group codes (A00 is the all-ages margin). +LEHD_DETAIL_AGEGRPS = {f"A0{i}" for i in range(1, 9)} #: SUSB 2022 US total-employment pin (all sectors, ENTRSIZE 01), #: verified against the published table at fetch time. @@ -170,20 +177,36 @@ def _load_bds_firm_size(path: str | None = None) -> pd.DataFrame: return df -def _load_lehd(path: Path, measures: list[str], name: str) -> pd.DataFrame: +def _load_lehd( + path: Path, + measures: list[str], + name: str, + id_cols: list[str] | None = None, + key_cols: list[str] | None = None, +) -> pd.DataFrame: + if id_cols is None: + id_cols = [ + "year", + "quarter", + "industry", + "firmsize", + "firmsize_label", + ] + if key_cols is None: + key_cols = ["year", "quarter", "industry", "firmsize"] df = _read(path) - id_cols = ["year", "quarter", "industry", "firmsize", "firmsize_label"] missing = [c for c in id_cols + measures if c not in df.columns] if missing: raise ValueError(f"{name} extract is missing columns {missing}.") - if set(df["firmsize"].unique()) != LEHD_DETAIL_FIRMSIZES: - raise ValueError( - f"{name} firmsize codes changed: " - f"{sorted(df['firmsize'].unique())}" - ) + if "firmsize" in key_cols and "firmsize_orig" not in key_cols: + if set(df["firmsize"].unique()) != LEHD_DETAIL_FIRMSIZES: + raise ValueError( + f"{name} firmsize codes changed: " + f"{sorted(df['firmsize'].unique())}" + ) if not df["quarter"].isin([1, 2, 3, 4]).all(): raise ValueError(f"{name} quarter values out of range.") - dupes = df.duplicated(["year", "quarter", "industry", "firmsize"]) + dupes = df.duplicated(key_cols) if dupes.any(): raise ValueError(f"{name} extract has duplicate cells.") return df @@ -276,3 +299,115 @@ def _load_j2j_firmsize_sector(path: str | None = None) -> pd.DataFrame: if not observed.between(0.0, 1.0).all(): raise ValueError(f"J2J derived {col} outside [0, 1].") return df + + +def load_j2j_sexage(path: str | None = None) -> pd.DataFrame: + """National J2J flows by sex x age group, 2015Q1 on (jobs). + + All-industry margin only (gate E2's age x sex reference); the + full sex (0-2) x age (A00-A08) grid including margins. Adds + derived per-job quarterly rates ``hire_rate`` (MHire / MainB), + ``separation_rate`` (MSep / MainB), ``j2j_hire_rate`` + (J2JHire / MainB) and ``j2j_separation_rate`` (J2JSep / MainB). + Returns a fresh copy on each call (see + :func:`load_susb_sector_size`). + """ + return _load_j2j_sexage(path).copy() + + +@lru_cache(maxsize=1) +def _load_j2j_sexage(path: str | None = None) -> pd.DataFrame: + measures = [ + "MainB", + "MainE", + "MHire", + "MSep", + "EEHire", + "EESep", + "J2JHire", + "J2JSep", + "NEHire", + "ENSep", + ] + id_cols = ["year", "quarter", "sex", "sex_label", "agegrp"] + key_cols = ["year", "quarter", "sex", "agegrp"] + df = _load_lehd( + Path(path) if path is not None else J2J_SEXAGE_PATH, + measures, + "J2J sex-age", + id_cols=id_cols, + key_cols=key_cols, + ) + if set(df["sex"].unique()) != {0, 1, 2}: + raise ValueError("J2J sex-age extract sex codes changed.") + if set(df["agegrp"].unique()) != LEHD_DETAIL_AGEGRPS | {"A00"}: + raise ValueError("J2J sex-age extract age groups changed.") + if (df[measures] < 0).any().any(): + raise ValueError("J2J sex-age counts must be non-negative.") + for m in measures: + missing = df[m].isna() + if not df.loc[missing, f"s{m}"].isin([-1, 5]).all(): + raise ValueError(f"J2J sex-age {m} has unexplained missing cells.") + df = df.copy() + base = df["MainB"].where(df["MainB"] > 0) + df["hire_rate"] = df["MHire"] / base + df["separation_rate"] = df["MSep"] / base + df["j2j_hire_rate"] = df["J2JHire"] / base + df["j2j_separation_rate"] = df["J2JSep"] / base + for col in ( + "hire_rate", + "separation_rate", + "j2j_hire_rate", + "j2j_separation_rate", + ): + observed = df[col].dropna() + if not observed.between(0.0, 1.0).all(): + raise ValueError(f"J2J sex-age derived {col} outside [0, 1].") + return df + + +def load_j2jod_firmsize(path: str | None = None) -> pd.DataFrame: + """National J2J flows by origin x destination firm size, 2015Q1 on. + + From the LED Extraction Tool (gate E11's origin/destination + size-ladder reference): the full 6 x 6 firm-size grid, codes 0-5 + on both sides (0 is the tool's aggregated margin, status flag + 10/12; suppressed cells, flag 11, load as NaN). The 5 x 5 + detail is published for 2015Q1-2016Q1 only; later quarters + carry the margins only (provenance note entry 6). Counts are + jobs, as for QWI/J2J. Returns a fresh copy on each call (see + :func:`load_susb_sector_size`). + """ + return _load_j2jod_firmsize(path).copy() + + +@lru_cache(maxsize=1) +def _load_j2jod_firmsize(path: str | None = None) -> pd.DataFrame: + measures = ["EE", "AQHire", "J2J", "EES", "AQHireS", "J2JS"] + id_cols = [ + "year", + "quarter", + "firmsize_orig", + "firmsize", + "firmsize_orig_label", + "firmsize_label", + ] + key_cols = ["year", "quarter", "firmsize_orig", "firmsize"] + df = _load_lehd( + Path(path) if path is not None else J2JOD_PATH, + measures, + "J2JOD", + id_cols=id_cols, + key_cols=key_cols, + ) + all_sizes = LEHD_DETAIL_FIRMSIZES | {0} + for col in ("firmsize", "firmsize_orig"): + if set(df[col].unique()) != all_sizes: + raise ValueError(f"J2JOD {col} codes changed.") + if (df[measures] < 0).any().any(): + raise ValueError("J2JOD counts must be non-negative.") + for m in measures: + missing = df[m].isna() + if not df.loc[missing, f"s{m}"].isin([-1, 5, 11]).all(): + raise ValueError(f"J2JOD {m} has unexplained missing cells.") + return df diff --git a/tests/test_firms_targets.py b/tests/test_firms_targets.py index 4b91b256..b92ba081 100644 --- a/tests/test_firms_targets.py +++ b/tests/test_firms_targets.py @@ -228,6 +228,136 @@ def test_j2j_flows_are_subsets_of_market_flows(j2j): assert (ok["EESep"] <= ok["J2JSep"]).all() +# --------------------------------------------------------------- +# J2J sex x age (gate E2 reference) +# --------------------------------------------------------------- + + +@pytest.fixture(scope="module") +def j2j_sexage(): + return targets.load_j2j_sexage() + + +def test_j2j_sexage_schema_and_coverage(j2j_sexage): + assert set(j2j_sexage["sex"]) == {0, 1, 2} + assert set(j2j_sexage["agegrp"]) == {f"A0{i}" for i in range(9)} + assert j2j_sexage["year"].min() == 2015 + assert j2j_sexage["year"].max() >= 2024 + # Full grid: one row per quarter x sex x age group. + quarters = j2j_sexage[["year", "quarter"]].drop_duplicates() + assert len(j2j_sexage) == len(quarters) * 3 * 9 + + +def test_j2j_sexage_rates_bounded(j2j_sexage): + for col in ( + "hire_rate", + "separation_rate", + "j2j_hire_rate", + "j2j_separation_rate", + ): + observed = j2j_sexage[col].dropna() + assert ((observed >= 0) & (observed <= 1)).all() + assert observed.median() > 0.01 + + +def test_j2j_sexage_margins_stack(j2j_sexage): + """Detail sex and age cells stack to the published margins + (exactly: LEHD margins here are published, not derived).""" + cell = j2j_sexage.set_index(["year", "quarter", "sex", "agegrp"])["MainB"] + total = cell.loc[2019, 1, 0, "A00"] + by_sex = sum(cell.loc[2019, 1, s, "A00"] for s in (1, 2)) + by_age = sum(cell.loc[2019, 1, 0, f"A0{i}"] for i in range(1, 9)) + # LEHD noise infusion rounds each published cell independently, + # so margins agree only to a few jobs out of ~130 million. + assert abs(by_sex - total) <= 5 + assert abs(by_age - total) <= 5 + + +def test_j2j_sexage_age_gradient(j2j_sexage): + """E2's sign: young workers churn faster -- the 19-21 group's + J2J hire rate exceeds the 55-64 group's, both sexes pooled.""" + us = j2j_sexage[j2j_sexage["sex"] == 0] + young = us.loc[us["agegrp"] == "A02", "j2j_hire_rate"].mean() + older = us.loc[us["agegrp"] == "A07", "j2j_hire_rate"].mean() + assert young > 2 * older + + +# --------------------------------------------------------------- +# J2JOD origin x destination firm size (gate E11 reference) +# --------------------------------------------------------------- + + +@pytest.fixture(scope="module") +def j2jod(): + return targets.load_j2jod_firmsize() + + +def test_j2jod_schema_and_coverage(j2jod): + assert set(j2jod["firmsize"]) == {0, 1, 2, 3, 4, 5} + assert set(j2jod["firmsize_orig"]) == {0, 1, 2, 3, 4, 5} + assert j2jod["year"].min() == 2015 + assert j2jod["year"].max() >= 2024 + # Full 6 x 6 grid per quarter. + quarters = j2jod[["year", "quarter"]].drop_duplicates() + assert len(j2jod) == len(quarters) * 36 + + +def test_j2jod_identity_j2j_is_ee_plus_aqhire(j2jod): + ok = j2jod.dropna(subset=["EE", "AQHire", "J2J"]) + assert (ok["J2J"] == ok["EE"] + ok["AQHire"]).all() + ok = j2jod.dropna(subset=["EES", "AQHireS", "J2JS"]) + assert (ok["J2JS"] == ok["EES"] + ok["AQHireS"]).all() + + +def test_j2jod_detail_window(j2jod): + """The full national origin x destination detail is published + only for 2015Q1-2016Q1 (later quarters carry status flag 11: a + state coverage gap blocks the national aggregate; provenance + note entry 6). Pin the window so a re-fetch that changes it + fails loudly.""" + detail = j2jod[(j2jod["firmsize"] > 0) & (j2jod["firmsize_orig"] > 0)] + published = detail[detail["EE"].notna()] + assert set(zip(published["year"], published["quarter"], strict=True)) == { + (2015, 1), + (2015, 2), + (2015, 3), + (2015, 4), + (2016, 1), + } + assert detail.loc[detail["EE"].isna(), "sEE"].isin([11]).all() + # The margins stay published for every quarter. + margin = j2jod[(j2jod["firmsize"] == 0) & (j2jod["firmsize_orig"] == 0)] + assert margin["EE"].notna().all() + + +def test_j2jod_detail_cells_below_margins(j2jod): + """Each detail origin x destination cell is bounded by both of + its one-sided margins (the margins aggregate the detail).""" + cell = j2jod.set_index(["year", "quarter", "firmsize_orig", "firmsize"])[ + "EE" + ] + for o in range(1, 6): + for d in range(1, 6): + detail = cell.loc[2015, 3, o, d] + if np.isnan(detail): + continue + assert detail <= cell.loc[2015, 3, o, 0] + assert detail <= cell.loc[2015, 3, 0, d] + + +def test_j2jod_large_firms_dominate_flows(j2jod): + """E11's sign: the 500+ x 500+ corner carries the largest + detail flow (large firms dominate both ends of the ladder).""" + us = j2jod[ + (j2jod["year"] == 2015) + & (j2jod["quarter"] == 3) + & (j2jod["firmsize"] > 0) + & (j2jod["firmsize_orig"] > 0) + ] + top = us.loc[us["EE"].idxmax()] + assert top["firmsize"] == 5 and top["firmsize_orig"] == 5 + + @pytest.mark.parametrize( "loader", [ @@ -235,6 +365,8 @@ def test_j2j_flows_are_subsets_of_market_flows(j2j): targets.load_bds_firm_size, targets.load_qwi_firmsize_sector, targets.load_j2j_firmsize_sector, + targets.load_j2j_sexage, + targets.load_j2jod_firmsize, ], ) def test_loaders_return_independent_copies(loader): From b370fb4112b0bf132fe6e42e0f33d2a63a396861 Mon Sep 17 00:00:00 2001 From: Vahid Ahmadi Date: Thu, 23 Jul 2026 10:38:42 +0100 Subject: [PATCH 02/17] Correct entry 6: margin caveat, release attribution, content pin Three corrections to the J2JOD provenance, two of them found by Workstream A's review and one by re-running the fetch. 1. The margin caveat was directionally wrong. Checked across all 41 quarters on the national all-demographics cell, the tool's all-size EE margin sits *above* the flat-file d_fs margin in 37/41 (-1.00% to +2.02%), with per-size deviations from -3.20% to +3.67% in both directions. The previous bullet generalised from one quarter (2015Q1, -0.08%) and blamed the flat file's public-sector "N" flows -- an exclusion that would bias the tool downward in *every* quarter. The deviations are two-sided and dominated by independent noise infusion. Since E11's post-2016Q1 constraints are margins-only, that +/-2-3% wobble is a noise datum for the floor build, not a footnote. Added scripts/check_j2jod_margin_agreement.py to reproduce the table. 2. The release attribution did not hold. The tool reports no release; its schema version V4.14.0 is the software version and is identical for R2026Q1 and R2026Q2, so it cannot distinguish them. Verified instead what is checkable: values for 2015Q1-2025Q1 are unchanged across the rotation (all 1,476 rows), so the extract is release-stable over its own window. 3. The byte-sha pin was brittle and is replaced by a content digest. The digest pinned on 07-17 stopped matching on 07-23 with every value unchanged -- the tool had reordered its measure columns. A pin that fires on cosmetic reordering trains the maintainer to re-pin on sight, which is how a real revision would slip through. Content drift now raises; byte drift is reported and tolerated. Also archives the raw tool response under data/external/raw/ (19 KB gzipped) and makes it the builder's default input. The tool re-runs the query against the current release, so the 2015Q1-2016Q1 detail window -- the only window in which the origin x destination cross is published at all -- was one rotation away from being unrecoverable. The committed extract rebuilds byte-identically from the archive, test-pinned. Co-Authored-By: Claude Opus 4.8 (1M context) --- data/external/employer_firm_target_sources.md | 83 ++++++++-- .../raw/led_j2jod_us_fsfs_2015on.csv.gz | Bin 0 -> 18912 bytes scripts/check_j2jod_margin_agreement.py | 156 ++++++++++++++++++ scripts/fetch_employer_firm_targets.py | 133 ++++++++++++--- tests/test_firms_targets.py | 98 +++++++++++ 5 files changed, 426 insertions(+), 44 deletions(-) create mode 100644 data/external/raw/led_j2jod_us_fsfs_2015on.csv.gz create mode 100644 scripts/check_j2jod_margin_agreement.py diff --git a/data/external/employer_firm_target_sources.md b/data/external/employer_firm_target_sources.md index 66f9cdce..a8c57ff2 100644 --- a/data/external/employer_firm_target_sources.md +++ b/data/external/employer_firm_target_sources.md @@ -136,17 +136,44 @@ flagged in PR #223's method findings; same fetch script). is not in any flat file — and the Census data API (`api.census.gov`) still requires a key (probed 2026-07-17), so the LED Extraction Tool is the pinned keyless source. -- **Release:** R2026Q1, V4.14.0 (the tool's `/j2j/schema` reports - V4.14.0; matches `version_j2jod.txt` for R2026Q1: J2JOD US - 2000:2-2025:1, `j2jodpu_us_20260312_1118`); national, all - industries, not - seasonally adjusted, ownership A00 (state/local government plus - private — the tool's reported `ownercode`; equivalent to `oslp`) -- **Fetched-CSV sha256:** `adbd16e2c23ee3a87a22c5f6520eca37b09f8036131d4147c081c89d6a5a867f` - (the query was repeated at fetch time and is byte-stable). The - tool serves the *current* release only, so this pin breaks loudly - when LEHD rotates to R2026Q2; re-pin deliberately and update this - entry. +- **Release: not reported by the tool; inferred.** The extraction + tool exposes no release identifier. Its `/j2j/schema` reports + `V4.14.0`, which is the *software* version and is **identical for + R2026Q1 and R2026Q2** (`version_j2jod.txt`: R2026Q1 = + `j2jodpu_us_20260312_1118`, 2000:2-2025:1; R2026Q2 = + `j2jodpu_us_20260618_1116`, 2000:2-2025:2), so it cannot + distinguish them. An earlier revision of this entry claimed the + schema version "matches R2026Q1" and therefore pinned the release; + that inference does not hold. What is verified: the values served + for 2015Q1-2025Q1 are unchanged across the R2026Q1 → R2026Q2 + rotation (checked 2026-07-23, all 1,476 rows), so the extract is + release-stable over its own window whichever release served it. + National, all industries, not seasonally adjusted, ownership A00 + (state/local government plus private — the tool's reported + `ownercode`; equivalent to `oslp`). +- **Archived response:** `raw/led_j2jod_us_fsfs_2015on.csv.gz` + (gzip of the tool's CSV as served 2026-07-23; raw sha256 + `7afad9f408319c54e7e7d802b068723e346f49c840d4fe861e7e55d9528d3944`). + Committed because the tool re-runs the query against whatever + release is current, so the 2015Q1-2016Q1 detail window — the only + window in which this cross is published at all (next bullet but + one) — is not re-fetchable in perpetuity. The archive is the + builder's default input; a live re-query is the verification path. +- **Integrity pin: content, not bytes.** `LED_J2JOD_CONTENT_SHA256` + = `c52ec512bc3f478d6426efb7b03cccbe1edc952309214030ed53eb42f7a83354`, + taken over the response canonicalised (columns sorted, rows sorted + by year/quarter/firmsize_orig/firmsize, fixed float format). The + byte digest is recorded but **not** enforced. + + Why: the byte digest originally pinned here + (`adbd16e2...`, fetched 2026-07-17) stopped matching on + 2026-07-23 while every one of the 1,476 rows was unchanged, value + for value. The tool had reordered its measure columns — + `EE,AQHire,EES,AQHireS,J2J,J2JS` where it previously emitted + `EE,AQHire,J2J,EES,AQHireS,J2JS`. A pin that fires on cosmetic + reordering trains the maintainer to re-pin on sight, which is + exactly how a genuine revision would slip through; so byte drift + is now reported and tolerated, and content drift raises. - **Transformation:** column subset and sort only, no re-aggregation: the full 6 x 6 firm-size grid (codes 0-5 on both origin and destination sides), 2015Q1-2025Q1 (ordinal quarters @@ -164,12 +191,34 @@ flagged in PR #223's method findings; same fetch script). margins (code 0 on either axis) remain published through 2025Q1. E11's origin x destination shape reference is therefore the 2015Q1-2016Q1 window; later quarters constrain the margins only. -- **Margin caveat:** the code-0 margins are the tool's aggregates of - the firm-size-coded tabulation (status flag 10/12), so they sit - slightly below the flat-file `d_fs` margins, which include - public-sector flows (firm size "N"): e.g. 2015Q1 all-size EE is - 3,985,308 here versus 3,988,566 in `j2jod_us_d_fs_gn_n_oslp_u`. - Detail cells that fail publication standards (status flag 11) +- **Margin caveat (corrected 2026-07-23; the earlier version of this + bullet was directionally wrong).** The code-0 margins are the + tool's aggregates of the firm-size-coded tabulation (status flag + 10/12) and they do **not** sit systematically below the flat-file + `d_fs` margins. Checked against + `j2jod_us_d_fs_gn_ns_oslp_u` (R2026Q1) across all 41 quarters, on + the all-demographics / all-industry / all-firm-age national cell: + + | comparison | quarters tool > flat | deviation range | mean | + |---|---|---|---| + | all-size EE margin | 37 / 41 | −1.00% to +2.02% | +0.75% | + | per-size margins (orig and dest, sizes 1-5) | — | −3.20% to +3.67% | — | + + The single 2015Q1 figure previously quoted (3,985,308 here versus + 3,988,566 in the flat file, −0.08%) is real but unrepresentative, + and the explanation attached to it — the flat file's inclusion of + public-sector "N" flows — is not what drives the gap: a + size-N exclusion would bias the tool's margin *downward* in every + quarter, and it is above in 37 of 41. The deviations run both ways + and are dominated by independent noise infusion applied to the two + tabulations. + + **This matters at floor scale.** E11's post-2016Q1 constraints are + margins-only, so a ±2-3% cross-source wobble on the quantity being + gated is itself an empirical noise datum for the E11 floor build, + not a footnote. Reproduce with + `scripts/check_j2jod_margin_agreement.py`. +- Detail cells that fail publication standards (status flag 11) load as NaN — common in the small-x-large corners. - **Unit caveat:** job counts, as for QWI/J2J; firm size is administrative national March employment on both sides. diff --git a/data/external/raw/led_j2jod_us_fsfs_2015on.csv.gz b/data/external/raw/led_j2jod_us_fsfs_2015on.csv.gz new file mode 100644 index 0000000000000000000000000000000000000000..fc46060d663356f4e0a55aeef8d2398ec5f8833a GIT binary patch literal 18912 zcmZTv1yoeq`;`=sl#m8NK^g?9Aw&rYLAr;O0qJg#ZV+ji0i_X!kZ$Q7x`vV*Y6uxX zK;S>V_xr!_t##JA3+~*r&fM>uZ-0C5Zk8E(HLtJuDY3Gg+Ltcy`(_JbVGY2dQ$PQ>s%Fn5;Nm0>H;H-x9hna%=l94BtB1EEWS#)~k=Qfb2jva}Il z&$flLqhgW?i3@kDW#KZj^Zx7WeB{-5E7Gm0(cx>>g^oj4O<_%a&*aSMYxY#>2J4%4 zx!Y-ZOyxLkj=gZ>k{=%oE`H1omWi@n1XQ>+o4`?8h5Js1zFYUs#x|cA?CyTo>#b*! z8e%GySSnvgc)5ElZZD=gJrA5HPk%Y`6VoHaS8_AM?@OESxrrHX7Xk0hvFDksEFIG5 z)5%Oj^QD7CVPt+2qwRq|5yn2*RsRti0AE7MUVvBsh1-5p0=`Z!%4GWI z&Go@S$i?EtU}h@qMMTBaB1$(@MAH6v^kqh_y>ET(jWrTkSyS6ukE+MH80?w8Ts(P- z+UHyRe(Hq$F$T9Y!90HR6rQ$pw(+sdwzEN{yxpt*`;QfJrb?AIx7{lvxRIVt8WbRn zi0>J!OO-adzHKdnENbg)=ljR-sDxu8TxrpK{@c2+U zr+j7=!iCY~5X+^yru_jvTiv>Jx-eE<*;IR3%xB}xH9KB&N^okI9jf4r0`B^4`%uG; z-QyeeiNNQg(N$3${(V^?ykCoEs7iotP`I^NJmk)2(vA)ny5)JKbwPEU6N8 zooqDAVl$dV<)!Mcs#((ohN zKRn=am|MjTS#o*nD-D)#=?rjkU8u!9+JypStybSVt1TdW2B6=uXgAsQl+3OmYw^=$D%~8b>9u5 zvnVP=>^+}l#U$?-*7Uz4neb))fN3k4D>>4+0JS$awSAAH-}ns3y|qF{%(tw-^eoWd zKRKeoSl=`A(aDxBs~%C9Mx!4NFF}$V1#CsQv>{1Mdbo4ep3&+};TZ2OmF9fLuKb}( zkXX*^uqPKz&qY=QKej32sa$b=>U!|7qV6NFou}G>1i4_LKQ(NjJg{*#u~rKrV;qd3s!yKnHAv5YJGeJv%cd1W zXJZdpA$~o{#`WRzVTYX*3?q&Scq$H9_H zf`rO82ET59%4DBUx>T8!-Nk7*|;{`^QvJ6&+*1G4;Nak5vDW4zeUTg$v$UtHkSyv^A?*u*lc zYhXtuBbhX>%vZTo@X7!6*~@iKV)u+Dd(8Sps}c-=fbyoE+WZ6j7m+q4W0YLMQ)!^- z5zeow*9ImlRP#eKnamfoSiw}ycy{jgCqS&TZ-=6zSgH;hWCX?$jIBS&X~YPK#jRLj zXYFM;-2HHtZQCB1vYB0@=OYliqH^sJx3Wee)mTMJb<~SM;TN|EoV{eo`^R^u7)!Q zNRRTjyrGJ=xrnEIyUP_lQr{V&2Zk6Oea@j|*eG!ZM@2huW=^_Zo~f&<=4dvONr&E( ziCVGAk<)VS*1R(fh!YgUllL#kT3nZhVX_xqL?^*}tKNfoB^`aVw}KR?#CAJJb2q$M3a zPtp6xTE%3}vnSO^f_?8oOMVV$c=dys-L>x2nt-9*i0y@2YwfV`=yRDY4;kZD+uS-5 z0}F@p#$K*BlA|3T&m&QhIqrS2=M{T2;w{o6{pe!~623e&K7L*6WE@$E4| z*|c|7QiHLWn{>_W*vfzaEe}W6t5HJKvk28w>+M|Vkp%l%omj?VwNox-m@Y8WcCE;+3y>A9G3ytu{M9qU^SJ&hhUr|6*A~6BoRayt`J@JwX1;G}9wIi2J&3$7maF7Uy zCr{>%M#m&>DVND<^X!_m5tymWw>6WB9;8a(pF}6AHiB6aISE1^;8iKSrN(EX=^Wn% zgqoIahNt(0rRSHIC0wJ$^vjo$s~+uemP#f=A$!#4pmyiL#=7O#ufsjk71f`QPV@PU z5erluwv|ow*H@i*BphI6LF}xVrUYli%8=X?9gnIfY;r}DxaZ=JY;eB^9HrR!JMvQ` zx|!d>5$!_F)$*V2ir|>ulbq@)BeIv(DT^~KyBw)aujy&920m(UbQq*h?lXMPdI7YF z$W`Bwy*sN`^4XE`jKbzVN2U9mn`AVAkl3Nc41i^X=Swtxr9n}M!z(g4>by06{=)Ck z>FKAZYj@ot**DSL|oPL;Pokr$H%^{Ae8%3wkO6zw z#AtTAn=|Hcd`^oluI|sKjRobzl-NUr7L;mVkOX;E@jGlL%pde5=04z&h>iX|I&QR0^9W^m9R1)Wq`+i7DflS{i0vr67|+tQza z^!u{fbwxnl9nH5qjvnS|sK?Z!pm%+OY$SLfELPbd9LyMf9=$8oH`oR7ia(!a61K!(J{`H;9eDUF-jHNI6Msva&A`L0k8Hm%K zNbNCu9rwBCSmA2ix7f@m<{{3mmWbg&4iQ*k^@9MH_EjqHKqG9RMN8KfQ}Go_%^_vx zJYW3&oa}>6cHS)-Z#z?3R!4 z)3Ny6G`}$iCFboUVhK6|giY2^{I|R5O%;=~{gh%nS`=}gA3OgX>ZJ$Vk2I*dwUx!K zemfE-ygOqDUTJiJk@`O}zC4|P;%+yhra?LT1Oo8lDQ?%nOQ_F>F&Zrl%4>b0^8X(RGrFzo3mK!RH* zYABxU-1t!QsVkQ1J$a$ll3I3Jy4Su+e@CgnVN$K;YDgQ)^+8lI=6s)?%Gh(fUBt)F zdX`yLSaq1I7^Ni7D4(%HlZKrX=(r$nr(fJjVFuG<7fa&2SwB%%u1uucg~)T9lrC6s zeuF%gU5VV0|L8E&Fb5*|NMuta?A@)=HGtH9bt&94*ZOG81ay!lMYd4~w7culY&V&* zP!gPWw1Y*L7Oys`IXqThuGP4!G9olP;1Ntvo#dM53)bkNSB(GgRk(B_M2YBx^yT|I zJncWdD9Noi**TuSd$DGwlij@=S@LLJn-hM z+Ba#(pB6bm_E}@%5B!EWgh{)+#%npQ>8-u|aOuXLACCC)QGVd=?{pK^iWj;_Hi(&& z7NNzFTlFxol~C?oC}+4h*MDBX{^Ai`uV(S*I!ECv%|b)RmW0CXbP-+X(>NIE)uC{| z`=_MwJ0CM)IuQ@NM&B~3O$eMR$AoxbTBvH(CoZ+L>#J6U=O~H0ob5G9zU&!qOIq)fkWx~378|KxtjC>F)K0fQ)f{&jsp}k8J{5D+GIeSzT zeo}AG=_r*6mJ8Kg>#Y}^7WV=J(=Jbx3tew6-}&28v--%!>)(!{+I^N;cCuoAo!fo- zv0aO-qIEaNFW>s-w)s(RH}|-oe9-c=dAVP2XH5?Y(+ARH&Sda#e$?q z6*}iV*PC%U9IrI7mixBeIIqkjc+B9qd(I^lP(97p@$R8jayf(HEO!Unm0wVHkg9B- z2zTgP2@gj7PY8T{Ju;k3_Bdue+}NJXueeFK6^KNy3|KGMddE2YUVpfbWpVSVee?!W zJe#c>#B3SI;?-d)$TM#enGs)6hMP4h1b`~enySE~4g%>_|nB->&3I}>)_{WLuhmW!LS_L?CzOWU=w&}?TN7&`7Y z5!shi1`?{Ix6vn3)qe>Z%YpiF@LNiT9Z?8KhwQ{f^^dK@c`N2dT2?m^0b`O5r||RB z<$dG0vfdnFs5-t>G5^#%F@kuiC0j|#u?=OuW1XXxp1#E{!N~}}tg%?zAb8%*GEl&H zJbt^wFCie&?FAi&e830%`X>T&s-*|^^o0Q+(NoLZj*{>=oTZN%QdxzV4p7%ZqFOj*ruQti!_{~XnquwWQ~a{-O& z_l{zINq9%4_rYUo#KUq0$uE64UT11=0~EMSZq7H5SMxX5QV(>0I+g!iQ9tig*dV#V z0E-UNWeBcVt-+(5aj)>;oHc=7%8nQwOrw?fXYWA5_EE*Mgnaj#HP9Bv>vp-$-l+bfDeUZGIb+Ps0 zllQx>htb}5X#!To5Y10)DvWyIZ=KY)K_v3IYIM({HT_F{A82;6`v&p z*e~Al-reWnE=pDSVERvV7B39Oet?`#c?))N0`Bdn5Is^zKWYD7F&WB<-Aj z&ariI3Lt?H1Lj_LUYB+6yd=~Y_VL`khl}gdUex;`xcROs5TCvLR}>VDZr$6A&7pde zUQ^L-KG56O0}t`C9MQQ|P=u|i75rBS;`WrYC7;)2Jb%zdAH2;YHR{a~|G|sL%-Yk> zpGhP4?%%^?1tLO=I^vYp2R#^3oyXW)ACaKK<4MP;{jw>NmB5*CMvEfTa^BwAyq9dA z7~ff)nN2_Y7|4ptR0V6wmwQcj{mNI*gO;%r!?QQracd%yan5G(N^IMYwHYKIo{M;@ z>2kd&%gzroBtQ6!E8_zba}4_??peRZh*x%G@|0rXhhQI-KYQVM?pLdyrmw%0pHFP6 z*c6P#R6EN&b$gqsrdnzg8xV~E3odDiYifM+WfpKYB9k1R)XZ!cpTG^Ao{(zyzK@7i zg3+Xa1v$k)S}rgVOvk|hxvEWzLh>X!HdDaM^AKEOw^N+oHa)pzsEglMB~JqIf;s^Jv)go%?lqF2_wU#=_QVi zezzBP52k&LuJzBNCyu^18{9sjN1l-896#Q7$ii5-HIC#!G@AgbUwFm0+v%n7KfUT$ z;MbND1@0td4Szg5<0_B8B5HUsWC|w!37+tF*$VB`{m5H;wGe+DV4uk+BHi6*^F5uX zg(XuWjA7e&+(6>Pdy#;O#{(5JAIsbg8qYa|6&48g-9=7CZKxS9f2`32?Lx*+t^MV% zaIbC4Oq@}9W1`9nqH9Lx#Jv~nFZfs?+R_VLfnHkIhv>8uc#C~dVCs4ts=j5}har~h zeeq=Y6??-O$z$r>xPdREe`cE`?cjdS_D~bevz`pnN8aGE7ItXL7pVQaxAa5%G|LJ} zx;gz^W9uo_-<5>CAAU&ZE`L5WZXtL(*1{$Ii>CZqe2QH0bk^XDX*wE<`@eFHI{u&g zA0O6G*KOM;XIoxLYkkmTdm7dh=Qg9+d?AzJ+M-TR_3Vw-|Hcki-ft~=f0 zQrN43oJKxK7XW}%l~upwQ>3OACx{`C+5q7=%Sh|qJBe>FC!CbIHY>5Q7Fy4~Bf!TF z_8=z?mpOTWY__dw@K@>$p@IHNf-8OY6R)-}IK&Qc4~ z9)VrpbS3s8M;H-nt+?LRV9v~u`nVw0m>*L8X(VrfFT|klT?`&>R4WbGq$E!)4c$`) znySRPOYD)LOmlihj?4+O40e;A&vJ4UYHO&Ll{XUXMGa*a>l`4{NN$vc>M*Yq-to_x`|-=cL)8==~TJ>4ZL6k7W`a(9KYIS^G+&X zP`030d`kF+KgZsDBW0r?g1qS7xN3PG1gHpTdGF!#5b4Lh4Mt1>0o0r=3hVrcw6Wc% zll}aad-UhRzh(UgOU1(pV7=-}YOZk;vC3iW?D(1B_(B>UP-Gz8Ul|{rebBi3Y`j6F z%8YW>H2bTa$VhuJs&2T}gsmBB>i8Gl{&5D#n>8!F;!R_RCE!xAu&2*Ngt?AjFY&c* zf69)&vibkbk3I!ET+PSw;|;Z2>pg@a`*$ch{rOvM=@@?=bF1v&aM>FmL-c;?EP5H_ zO^FH~@v^BF43%w^rfh!thE$pYNfbirEW+%CL0Z#K*WRu>X@=)jrXGo>TCmp6yH0xp zbVM(*REndC<{YvnEZtAusZ~A|M}@Z{61B~mP3CK_G@1rKvDpDwP#lZ$gYBUx`ye}bDlM^GA{{&{9q}g`@-Wa z8Y0(8*veX8U`3V?^?vc(_wMo!cl}s*=mpX{p-8OnG-CF9U`FywgIZ0J4+^a$=t}3$ z++&&Y3kw=x*z##X)WjjygXz5j1`c6y#ZZX(RPDL{Z?L=l#4rqKM@PJ^ML1P8Yh!9F zm^KdAUuq-y9d@h1t6W;F)D_>N*EjokYajvK;pO${r zx;m>glOp-$ZsV!w<IdE29lE_cH4%*1WVtm@&uB zLQ2m6U#?Uqw{tKPt43(f={rqak<@Ndw~_0sq_%SZt$?a;1bdAPbHXVq>a^3PaMPJ8F>#BQ;O$u9Ny-E{<9`cRxqF!s=s&8EeF z&3av5=+vlrVTKH*_GZ;1iv$&ZiKOCG?9WPO2t2xnE+!qdA!GNOSr&4{(rkE~Th^|? zmSL=MOVg|oB7tq+fp_lQJ@Qepvp}$#2KNnVc5J0&FXhA`@{V<;<|yme_w?B#%3hkU zsR!Ar=hdfP!;fFgiY}GgS#YW#3iXMD_ML-+G6aHX1jkvcEz8Qpz+4L2^{T}Ww!{o``r1{oX+ef@4d#Go5EX7Kq|&nO4TLbJ{0 zd9#_{Z*`~{M5GahbQ1#(aa;O?$3)vLz%vf2sqJUMTlj66W=!kdKZ!6VM%??@j|F`` zu!CEZ-VXD3u2Wr{fjyRX#4Scg6(RT3?vJTHDi^lYoD_AJe)YQM#7_&6IVd$>zZm44 z;KhC|Ua#tjDiJ5dToTJDJ_mcEA9UYz0=%RkB!XtS8xfMO2<*xi?v4lt!T^r$kQg1C zi*6Xjiq+D@QX;NYx`J4Wy|RKn(_q#y487X1*nSOiF|JwyvCnph?wA8lq2a28fS+hg z_^w*MjwS#|h=q`8@hd z;XVfR97TqiM#&r{WHCCj?Np{)1p)OeQCN;6{(R09Be|6J)diB{37$q5hm>Jik(73M z9)rjb#(6`t!dW5B`y-!nYy%F-m&tSMXvCUjn;$URF#Wu(%kvoE#JwkgG8Xpo1hhT# zOL#`)W2gK6ps@N_2k31Du%x0!el%RH5#4|lyi$lD=Yd`1D!i#a3Q6gHqlUX#sgnwj zyF{o6zG6y?@qG-{${X>*O|U`GnXx~__75?|LE3G3e!84ha=&mqk-HkMxkOi|c@T9) zK<;}F`G?3@B{YuDHn94R8&?eIkI<|3%DT2KHwmG_M)d zTAT(;*GAR5Qn#A~WetvuP5yHtP>9|MzERv_q}061YxeNF^|eVrc{={q-_gMaX|{?X zCjM~z&EweqXmJcPFuZEh_WSO(KkC%~MV!*#!#~I)%g_e#fgUtnX<(L~+wnamc7$EK zf+zV?u%WO*Abo7MuMGlh^PoCBJF%>CG8>jICM0z6W{X&@u6F~S;#pxfd|{ngb1khI zNAW{0@o}qT{_{XJ8-zD2(v347{Vx_|S0C4kOAplE0p$T|`PIi-O8MEX1_qhea0|&qph+avH8)7XqzM~JkQujY4;;+MCoF1=(tN$pJg{J45 zJA;FO$lTRe#lDYur~d!bBL3nBHlXU6cegLB!#Kx_L$U~!Er#%paCqvDxT6l9|HTdd zD37X-<>$pNWLSpkE2zctd<5}sB{Ag1--%G~k=XvRd)n^p$+xd^X0+_v(gm>qfz+vJ zkd{-LTJ@4Fn5O~up-{d72-M}`k@#!^lgNO%{S&q*;>-~n#MQ@fDvte7x82Vog39$L zGCmr&yHUyqN83l}EEWy0FYq-MzcXg$6YkI*dUE@dOYZ)zK-L7z(3#yY%~e&_^CKtO z`KkPXim9tn$p`)GSkaMg2m)GvOnt3wzL0}GmZA7I4oVbwl8~4Cj`89bAXHCq+7xP! zqw9V&AOM!50Ch=qk7HE5KW$V8v%ON+bG!p`febFSCj2Ew{F#jI?=OhoyaEatjnr;D zSP^i=Y+5;rsCQMM`1)r_`d2oZvy3V65DC+{*vP+smm^(hjuZErqt(R7%)jIyb$qrD zc4zt#sr-#KQ5oFS?xal?ovY#(KGP%f>GpxYfx#z;=PJyZc2$+li}d1B6yhBPhxAk` zHzk|B%#V8mmCRn-1};Pe*%>$zF1+>$z6{lLsJee4vtoLxph4`y&Vd8q7S^B-V=Qu^Nm2s&pFoyxI`y*$Dw#BAWjEg*D0ocZl(?xt@b({KEM zrT$RRbyDut3sLcDJWf~?IHNcD$ES*tTYphwbVY<#=Q^CL4pNeaqrUN*KiG(_I%NZF zDg;@q|Jb1c1^gC*m0uy?ad^Hy`F?dy_Tt`5MogRyzS^E~@`lu#FD=?)wNKI?+%>$s zZ=WEBZwP+tk_Iyt{J@_XNAekR28T_O(n^VNL`aD*&+J!@dOQZ+Wmx}$C_O&?EO&N) zp70jQlD-MYwMj9NAsth0JL~yd_a$3EOQD%&9>xH5Ax+HK>_g%7HQUoF;R!SXu)7ka zIW?J7Ppd_mTg7D(+g>Lln$Jq?P|5DCV;;ongJHE*Ex7czah4~$cQxY_Wdf+bgCr7!OBOxn^?hSikSB>W#1{t1=uF$pT;|oWb1H(g-ouI>pz%t4HxDwsp9iVD$VocJ6DQTz<=1D-U*(Y z%f7(h`0feTWOwwKeO$!6fmi+b%;M$9YS+gh05-~7D#)91gZpv?c;1=&JtAR%=^9Ij zh5=qeCx_jIF9zDdlXpF^6-I()gPSB7yN@?J{$G^-ld7%HEX1gr!S5#GT#m_ytr?UG zR-3G{M6rZw&CUF+5jEd^35;UH_25kZRQQ5@-tv&k9p~sJ8K#NlIL*)^BcQFhq2k|l zQKAabu@#3DE4N!AV{jU&>LZ6HL5xa4?27r{s2XL*`FxHlfW7LoxfCX$i_&h#R86mF zF}MD0f5>V<4b!DhtIiD)SGSU|AXy;z>vk*Q`hly)xA|xU)mlFHRan;dVZ*2u__dFw zxZo%*l6^+J9{wnpzQQpq&Q%JL>B$wLC#i8gllOwIaUn%;PKD_yAHVT;TlWNn+p&Yq zqQT5Pm?`#-fP;^9cgQ!5x{&j>p(}qCVaJ)c*O9{_$G1Lwa|c@i_hJC9z88HCJLgW8 zgXPq1Yahfx9Hru&6z4?(MTPNJ=2_&=3;Vl*K{01-JiwkO(D$|m4`-^C%4|}Mj)6n{ zne*p(h3am1c}Az5rv)yib#iSV^u%BL|I;Nv2SoAmV7y?`dN`bvnieL{5Y&Y*2pG4$ zoVtB%|4XX-GYsXjXax_SwN-MoygJ1PQc%$|{v-!9Lgk-`CF;-gTS}rWe$>0@Y|)TI zu4}cDS^T>%zdnF|`k>UF{tn_-WFE=<@j@8IxEp zySA;)4o_vq5UTTa)(W`|0<*X@_rr9Tk0czO_cJd@d2T05vSoVOMhL_tH`s9%`Jh{%O{fBgb+%GGw@RHQpdMI!(~f zefnX4sxp218{FV<+0I^azsSGtOD$*PbwbXO8-MhE{psUpVb5G*+{O&XT!@b}JG}YU zC}O+v`HTgC^!r?k-ZYEvFN;h+YU)QEUt=S}LMOQJ3w7_RmOlUk6-5uU!Dh45U-Wqj zq0g28 z=*?EHCUJ-BzDF++t#P5v4L6^M+p$gI1_tesU={^;d2IPC5U7e{qvxv;U}5h_sBmUS z?k0Io%7W(3fH}BDT_b;7h3oo5 z!bNQliH>T>BVpbu`cBTBLiVp8Dd11uW<&N0De|yqjT7n5^J;86yX||5UBfN1;5PLj{qkY6Sm6H&-E$0V%>- zc1>QTulq@l3!RGary^p)FZikX1TiGHx7P8QWWZ^M@dqPXq$ zR{bR1dr|_{3HL})y_B%ad?H|k6uQA_X+{9mq$kOsY86vGWSr1!&`YA@P}#LfAyuQw z$3=ijy(f;vv#VdO?j}yPwrvD6y4GpsFa^ztizn&1Q{{@JGn{NOPQT)?^g!i)0QQvw%Yb#Po2$6b_sr-8h>z}fGZQ0p!D-j$3Q zTFv#QeId4%8mTlRr@B6Q;7%-`T_Wv~?E}4@Cl{j$RooL!WJ!?9NR)9;+SFNX2q)Z?&#W6z-^rL{r=C{zi3TCI*qq(hz;1V1`muG!FxO&MzS_-c zs!5s0q3igE!L08dEzY_7a!%r2keEXliCE7a1i=!mH z8zUT+N1e5$XN$`?=i1Wm%AX9-xO?X+e{zWwRf|36DE{EB&i0yjafL!k$h zLyHB4HXzl`%{L{1zXS3BKIUpl()+&eNfrwhyJuA#$t-T<^}-V7wbNIZ?`Tv09v1`$ z%^AJkMU5LO4OlZ|cXj|P4>_xUj$enCVrSl8R~$KV1AO?-e>*JW(NGWJke$4T=lI1~ zgy3m}%Ywv+Hv;)owen4Pj!&W}6L+tqzh@)|g8YOl~tvF=BOmjnz1(CQn<6cn`9S*Muo1?FF1F%`bmZWkF6G zkk&XF6n@D@2UFl2+&GNdmF=py7Ek4*K6KTpz&uR@IeoV*|C?;*HqHAuSlpF=WX(xw zW0O9@WT-01_c33Isq0@f`40=M!RKY(j%q562 zwUcXYjat}tGG=>vNQ1|5DGRN)Xasf#mnJ+kJc@Y8**~F^ThZj3gPG|&EWw@`@g5Q( z5wKHlNUn0*<}@WBrM;r}Jq+E4h38(t&bv%mq<_!;h$z=4{QVBuR;ZVbYwVeAWm^1-6E4NS}$r&zfjr%o@D|B(H<0JGoz zyj%1dIItIEsRZ~DU$)t-+}bED9Rbytwn_P-T9S zd=&Q5N+aT#g7}l|{_X!rcU$L5w)zYD{LdpYYbSK!nGC^ zk55Kk1`ztDksP{lAs0AoV}-@EBVHHOIWm;3GW?K|Z;M=j-$rYp@P?1n#VPw7(N?EH zTea7AW4I+%Z2|-4=)hrWgKwZv7TZ!eQU)XZwGS*` ztokw<=Zu~+{WQv=OB{V#kOStPpwaO9z{C_EIu85%o#Lk@XL2)wmN)7atL3lS%02d> zI2qv(A00`r&k(*&ATk3W?Ek{`#~%VJS~P;b_b_;fto|jS&Nsl@-x@fU=HLHPC{VQ~ z*ccCV`R;Cu!u%y(|0SNHHSKbXACb0!Syo%&HM#8yZCse2N zf2SpMin<^`Hj{bsdN3EfV#>J!Q;CUgKC@H-eIr{oBFgUE^`tFH10oxp_zmL4^rh@$*!&=n@JCbn zE#5C9`fq;*l6VS1z3|U#WJyPEHy`Vmi=8-OX#@(VY)sVzs(fxvQ+?zUV-H3Vi)i#>7NYg(A8XiT0BzU zURo+2zD0CIWSi9W#Y?2%S>f{5!J^YK(-0R8LlAJvzH>oIbkG9k;KAqBhS(+w9HyoisMQht8Td zo4#*<_=Vc=7=1GaFmty|{temIw$9UDU)hulkGxuidudz#{u;9hN^qK#e}IIeyn9)T zOKoKzqS?-FkgQ%ov@sRm7(38B?>~M5xpA#ZmHCUpT~UGB&Fzy}zS zzt0-(p4G|?NQfo1s%5-$*_w**Q~JzIg5&#Jq15+kJ(NPCrs{cIsDE_;(YmLKpPov# zDFMb>NgGMAI{x2-Z&bA{bK09?MiU3d=o0=_;YDrSae=$3!@EC9&b1#cI5^L4> zDW=gpl&C#caxc{V3~13<+)ml~_1Fc#9hCQ$p!hJ@6V}cqIhm`z?g~0n(3jl zzlEdx5SG~hA%oo_>wMFr{-{PbwZ?3F;2Uf!LU>k{I8ds00*N;`_HMFa>+AI6^m%Mm z{T_PFDsZsKRV-o$ZSE*E&PIF2k3H&v=HJ`pmUri6^6d-_m*)I=o>1naGA7Y7Fqs}A ze-5qzJW5MXFV|Z}$&hUbAe*Q3YP~YP+X|@kgXhGm1f;~9Th>zoxY72)d^<$*Oi&?d zJTlUyzt$#+cInZxi@P`l+PQHPr@xAHmHo-uJ_)&jSyXaeRH|2^yG%+QPfYoe)Ev5# z=zri~lk&@IK+w6f<4w0&-;NRjIyG0o^~m5dR>1~z3&&%BMCo6V2o!0Y7>3KI%*@6h zxW)h(pfKjv7J1J%2U-6K1jRrN#NeSJJ~L7=qViTBW=F3KEQc9H0e1U;bLUTmJBRVL z#cRGL;M{~DWjWW=f`x`x{qA8YlFFiM=Ux2&-ZAL4EEfSHp0243la{-#^t6;`yjkRhL z$Tzi8iQivHj2lT1DCA5a@e47IRjE zAJ&Lb%UnJRn}e1*#^=^ri*nC;U6;1&>}z?5C26m^3gT!LmP7pQ0Oqr;BXjFdFO-Nj zEtb5?_l+8@q^Y^o^`^6;YM6k}Mn}q^$%>UwBm#Kn*Gc&O9VgwJb&ePLuG@QeYW6Zt z`Et&{jg;EK-sE@l*=;rlflB@vBrVIi1igi>oG+s#kvfLlYQL6ADG7{l_|K|~)f z@I~1-DJM}=AW;^r-okzrQ%%ElG-{r0UM?)DamSh8p7jJ85$rpoE!gfJdM=iItL5FV zR-`{|2SHAKw3owPqhh%t7T1T#`uNks<%hT|NxiuqHEqA!ZVkj?DXD$VRPRGv%@OOW zgU%K3Mo|J#soLkiJDmRKX2jLIwzAzy7iHs3jOZb}!e3<+2>Ui3CiI`&)FpJ%d1xB_ z7{GAPADsUbB43l*+7E3PKC`i)r1$(+H?S$hnSGy-z^?i{#xHU`GO0^Ug@F7gs*Vja zX=CnI!^N7Z#6H?WLz~WM)cS<4BiKKjc~f5JTf`5sm98Zo*oK+7r7<6eb(ZjP$>c^r%dSkHx$z_ZK` zg=;_@?^p{YpqIxI^8cFn*NXR(A<(Gx(f81o1moUL5?FlBA6Ph}T|$Zxpm#}>3EzF$#6nNGC5d+HZ3 zkXa%%UHdEsMMQPXlw_W%7gz-*EE{a)CuT&7?KV&8vSdDlGN;PL1k8hg^?zuBY4wCCF>j*ctzqq-hD?+r&bbD0bIkH`xQ zL&vIbvwup?xV!9s3-t_5)X)q~zfc=Z*DN8YJ-xzCY86?GiEPyO-`I$Uuo})8T;Q)v zp1A+cCAO~*?o2nN?@+=qTz#jPx@hHXGhw0L)93%`)6Ra!TvfHq1cAB93a*VZDvsBz zZGJki`47ELKNQDdy=Xt}K$eokATN|eupz2d-&Xt27tngh-_7ypqhVqO2@sKbD9$Ro z03F*?Tr4aH!=67;1;0}HxJ#;)eywP}r@C9m42=7tsjyY{)ns|PuJ2VXCBs#J{)nkZ z7P?8k#=_@fEo*|+_>rzFaG5jKM`S219#{0_EM*m&Fzi&!{9Ec8EbDp8yI&nif1AuL6-l*E z5|uvnPrS0`^|G|JvS7-SHVkbLS#_nZ3@?8%E`Ls)Nm-QJ#rl}T(s zX_H{V@^(W752<6d9Pu})Mzd>OFGO4g`Lr0&tG#8S$4GUhCQdHqlpc?lE}2>N@|K$C zo3_djcZt{Tt7d?gGvN@*d#nSfj8&9y?=Lw?2%8QV5y-sU=(G;ky0Na#TON-utQ^yv z_Aaq9W;we3J{tmU^32?JFQ}s zDso>cQy~#F$nPQ5>B5kFX7_(9zEN|xts&CVWiI>9W?zH)C zC*2=qv)g};=U25K>IV8x<^-MuPB|32se-mG{B*l^v*^+ki{*U@7kuZfGPjaw*;1GG zOLaDAJ^^*w$FFqGrODRCyCs_2_r}k+68CJ)TAWp~#nhg4_GF|TI=~UXqQJ)jM-BV= zZojx(8>XDlH)oG~Ws}}k(~s(%TTE{BIBGPY1iiS$ z^Bt2*zunwjkbEd0TO_(ab)C}rohKe>rf2mDTg$ckKMs4XKF|2~nYiEw+EL+6a_CcF7RY6l zvvU&T%XpIT_63iOp|#|{ww1zO%W7{`u6ZT%K4k7a1N}q$`B&xpZO;wcb$#pkTS|*c zLhSWl_IrgsUlCH;hoCAJzxuK@Eh{oCf6i&U%Jot6t){Yjs_I;l>x=t^zAQ=QoMg1L z;NJfw>wf0>oJwmcy#M82ezMN)-se+_L%OWom##pfj#~#VUmu>hO4r7UNnc{_r|RX? zI_)p>N1V6)?1rKcq-~FI>9@-^TX pd.DataFrame: + """Download and filter the flat file to the national margin.""" + print(f"downloading {FLAT_URL}") + with urllib.request.urlopen(FLAT_URL, timeout=300) as resp: + payload = gzip.decompress(resp.read()) + frame = pd.read_csv(io.BytesIO(payload), low_memory=False) + mask = frame["year"] >= FIRST_YEAR + for column, value in MARGIN_FILTER.items(): + mask &= frame[column].astype(type(value)) == value + out = frame[mask].copy() + out["fo"] = out["firmsize_orig"].astype(str) + out["fd"] = out["firmsize"].astype(str) + return out + + +def compare(flat: pd.DataFrame, tool: pd.DataFrame, fo: str, fd: str): + """Percent deviation of the tool's EE from the flat file's.""" + a = flat[(flat.fo == fo) & (flat.fd == fd)][ + ["year", "quarter", "EE"] + ].rename(columns={"EE": "flat"}) + b = tool[(tool.fo == fo) & (tool.fd == fd)][ + ["year", "quarter", "EE"] + ].rename(columns={"EE": "tool"}) + merged = a.merge(b, on=["year", "quarter"]).dropna() + merged = merged[merged["flat"] > 0] + if merged.empty: + return None + merged["pct"] = (merged.tool - merged.flat) / merged.flat * 100 + return merged + + +def main() -> None: + tool = pd.read_csv(EXTRACT) + tool["fo"] = tool["firmsize_orig"].astype(str) + tool["fd"] = tool["firmsize"].astype(str) + flat = load_flat() + + rows = [("all-size EE margin", "0", "0")] + rows += [(f"dest margin size {c}", "0", c) for c in "12345"] + rows += [(f"orig margin size {c}", c, "0") for c in "12345"] + + print( + f"\n{'comparison':24s} {'n':>3} {'above':>8} " + f"{'min%':>7} {'max%':>7} {'mean%':>7}" + ) + lo: list[float] = [] + hi: list[float] = [] + headline = None + for label, fo, fd in rows: + merged = compare(flat, tool, fo, fd) + if merged is None: + continue + n = len(merged) + above = int((merged.pct > 0).sum()) + print( + f"{label:24s} {n:3d} {above:4d}/{n:<3d} " + f"{merged.pct.min():7.2f} {merged.pct.max():7.2f} " + f"{merged.pct.mean():7.2f}" + ) + if label.startswith("all-size"): + headline = (n, above) + else: + lo.append(merged.pct.min()) + hi.append(merged.pct.max()) + + if headline is None or not lo: + sys.exit("no comparable cells; the flat-file layout changed") + + n, above = headline + print( + f"\nall-size margin: tool above flat in {above}/{n} quarters" + f"\nper-size envelope: {min(lo):.2f}% to {max(hi):.2f}%" + ) + # A pure size-N exclusion would put the tool below the flat file + # in every quarter. State the refutation rather than leaving the + # reader to infer it from the table. + if above > n / 2: + print( + "\nThe tool's margin is above the flat file in a majority " + "of quarters, so the gap is not the flat file's extra " + "public-sector ('N') flows: that would bias the tool's " + "margin downward everywhere. Two-sided deviations of " + "this size are consistent with independent noise " + "infusion on the two tabulations." + ) + + +if __name__ == "__main__": + main() diff --git a/scripts/fetch_employer_firm_targets.py b/scripts/fetch_employer_firm_targets.py index d7d4eed2..ee0424b3 100644 --- a/scripts/fetch_employer_firm_targets.py +++ b/scripts/fetch_employer_firm_targets.py @@ -39,11 +39,15 @@ 2015Q1 on. Feeds gate E11's origin/destination size-ladder reference. The LEHD flat J2JOD files publish only the one-sided firm-size margins, so the full cross comes from the LED Extraction - Tool query API (``ledextract.ces.census.gov``), which serves the - current release (probed 2026-07-17: schema V4.14.0 = R2026Q1). - The full detail is released for 2015Q1-2016Q1 only; later - quarters are suppressed (status flag 11) and only the margins - remain published -- see the provenance note. + Tool query API (``ledextract.ces.census.gov``), which serves + whatever release is current and reports no release identifier of + its own (its schema version V4.14.0 is the *software* version and + is identical across R2026Q1 and R2026Q2, so it cannot pin the + release -- see the provenance note). The full detail is released + for 2015Q1-2016Q1 only; later quarters are suppressed (status + flag 11) and only the margins remain published. Because the tool + re-runs the query live, that only-ever detail window is archived + under ``data/external/raw/`` and is the builder's default input. Run from the repository root:: @@ -58,6 +62,7 @@ import gzip import hashlib +import io import json import tempfile import urllib.error @@ -184,16 +189,43 @@ "export_labels": False, } -#: sha256 of the CSV returned by the LED Extraction Tool for -#: LED_J2JOD_REQUEST on RETRIEVED_WAVE2 (release R2026Q1, schema -#: V4.14.0; the fetch was repeated and is byte-stable). The tool -#: serves the *current* release, so this pin breaks -- loudly, by -#: design -- when LEHD rotates to R2026Q2; re-pin deliberately and -#: update the provenance note. +#: The archived raw tool response. The LED Extraction Tool serves +#: only its *current* release and re-runs the query live, so the +#: 2015Q1-2016Q1 origin x destination detail window -- the only +#: window in which that cross is published at all (see the +#: detail-window note in the provenance file) -- would be +#: unrecoverable the day the tool stops serving it. The response is +#: therefore committed, and it is the default input: a fetch is a +#: *verification* path, not the only path to the data. +LED_J2JOD_ARCHIVE = OUT_DIR / "raw" / "led_j2jod_us_fsfs_2015on.csv.gz" + +#: sha256 of the archived response bytes, as served on 2026-07-23. LED_J2JOD_SHA256 = ( - "adbd16e2c23ee3a87a22c5f6520eca37b09f8036131d4147c081c89d" "6a5a867f" + "7afad9f408319c54e7e7d802b068723e346f49c840d4fe861e7e55d9" "528d3944" ) +#: sha256 of the response's *content*, canonicalised (columns sorted, +#: rows sorted by year/quarter/firmsize_orig/firmsize, fixed float +#: format) before hashing. +#: +#: This -- not the byte digest -- is the integrity pin, because the +#: byte digest is not a property of the data. The response first +#: pinned on this PR (``adbd16e2...``) stopped matching six days +#: later while every one of the 1,476 rows was unchanged, value for +#: value: the tool had merely reordered its measure columns +#: (``EE,AQHire,EES,AQHireS,J2J,J2JS`` where it previously emitted +#: ``EE,AQHire,J2J,EES,AQHireS,J2JS``). A pin that fires on cosmetic +#: reordering is worse than no pin: it trains the reader to re-pin +#: on sight, so the one failure that matters -- an actual revision -- +#: arrives looking exactly like the six false alarms before it. +#: Byte drift is now reported and tolerated; content drift raises. +LED_J2JOD_CONTENT_SHA256 = ( + "c52ec512bc3f478d6426efb7b03cccbe1edc952309214030ed53eb42" "f7a83354" +) + +#: Key columns defining canonical row order for the content digest. +LED_J2JOD_KEY = ["year", "quarter", "firmsize_orig", "firmsize"] + QWI_MEASURES = [ "Emp", "EmpEnd", @@ -239,14 +271,69 @@ def redirect_request(self, *args, **kwargs): return None -def fetch_led_j2jod(cache_dir: Path) -> Path: - """Fetch the J2JOD firm-size cross via the LED Extraction Tool. +def led_j2jod_content_digest(path: Path) -> str: + """Canonical content digest of a raw LED J2JOD response. + + Columns sorted, rows sorted by :data:`LED_J2JOD_KEY`, fixed float + format — so the digest is a property of the *data*, invariant to + the tool's column ordering (see :data:`LED_J2JOD_CONTENT_SHA256` + for why that distinction is load-bearing). + """ + frame = pd.read_csv(path, low_memory=False) + canonical = ( + frame[sorted(frame.columns)] + .sort_values(LED_J2JOD_KEY) + .reset_index(drop=True) + ) + buf = io.StringIO() + canonical.to_csv(buf, index=False, float_format="%.10g") + return hashlib.sha256(buf.getvalue().encode()).hexdigest() + + +def _verify_led_j2jod(path: Path) -> Path: + """Verify a raw response by content, reporting byte drift.""" + content = led_j2jod_content_digest(path) + if content != LED_J2JOD_CONTENT_SHA256: + raise RuntimeError( + f"LED J2JOD extract: content sha256 {content} != pinned " + f"{LED_J2JOD_CONTENT_SHA256}. Values changed, not just " + "the response layout — LEHD revises across releases, so " + "re-pin only after diffing the cells and updating the " + "provenance note with the new release." + ) + digest = hashlib.sha256(path.read_bytes()).hexdigest() + if digest != LED_J2JOD_SHA256: + print( + f"note: LED J2JOD response bytes changed ({digest[:12]} != " + f"{LED_J2JOD_SHA256[:12]}) but every value is unchanged; " + "the tool reordered columns. Not an error." + ) + return path + + +def fetch_led_j2jod(cache_dir: Path, *, live: bool = False) -> Path: + """Return the raw J2JOD firm-size cross, verified by content. + + Reads the committed archive (:data:`LED_J2JOD_ARCHIVE`) by + default: the tool serves only its current release, so the + 2015Q1-2016Q1 detail window it carries is not re-fetchable in + perpetuity and the archive is the durable copy. - POST the JSON query to ``/j2j/download``; the tool answers 303 - with the encoded query string, and ``/j2j/download.csv?`` - serves the extract. The result is cached and its sha256 verified - against the pinned digest (see :data:`LED_J2JOD_SHA256`). + With ``live=True``, re-queries the tool instead — POST the JSON + query to ``/j2j/download``; it answers 303 with the encoded query + string, and ``/j2j/download.csv?`` serves the extract — + and verifies the result against the same content digest. That is + the path that detects a genuine LEHD revision. """ + if not live: + if not LED_J2JOD_ARCHIVE.exists(): + raise FileNotFoundError( + f"Archived LED J2JOD response missing at " + f"{LED_J2JOD_ARCHIVE}; re-fetch with live=True only " + "if the tool still serves the detail window." + ) + return _verify_led_j2jod(LED_J2JOD_ARCHIVE) + path = cache_dir / "led_j2jod_us_fsfs_2015on.csv" if not path.exists(): print("querying the LED Extraction Tool (J2JOD firm-size cross)") @@ -278,15 +365,7 @@ def fetch_led_j2jod(cache_dir: Path) -> Path: with urllib.request.urlopen(csv_req, timeout=300) as resp: tmp.write_bytes(resp.read()) tmp.replace(path) - digest = hashlib.sha256(path.read_bytes()).hexdigest() - if digest != LED_J2JOD_SHA256: - raise RuntimeError( - f"LED J2JOD extract: sha256 {digest} != pinned " - f"{LED_J2JOD_SHA256}. The LED Extraction Tool serves the " - "current release; if LEHD rotated releases, re-pin " - "deliberately and update the provenance note." - ) - return path + return _verify_led_j2jod(path) def fetch(name: str, cache_dir: Path) -> Path: diff --git a/tests/test_firms_targets.py b/tests/test_firms_targets.py index b92ba081..d131e08a 100644 --- a/tests/test_firms_targets.py +++ b/tests/test_firms_targets.py @@ -10,6 +10,8 @@ from __future__ import annotations +from pathlib import Path + import numpy as np import pytest @@ -393,3 +395,99 @@ def test_lehd_labels_match_banding_intervals(qwi, j2j): assert label.startswith(f"{lo}+") or "500+" in label else: assert str(int(hi)) in label + + +# --------------------------------------------------------------- +# The archived LED response and the content-based integrity pin +# --------------------------------------------------------------- + + +def _fetch_module(): + """Import the fetch script (scripts/ is not an installed package).""" + import importlib.util + + path = ( + Path(__file__).resolve().parents[1] + / "scripts" + / "fetch_employer_firm_targets.py" + ) + spec = importlib.util.spec_from_file_location("_fetch_eft", path) + module = importlib.util.module_from_spec(spec) + spec.loader.exec_module(module) + return module + + +def test_led_j2jod_archive_is_committed(): + """The only-ever detail window must not depend on the live tool. + + The LED Extraction Tool re-runs the query against whatever + release is current, and the 2015Q1-2016Q1 origin x destination + detail is the only window in which this cross is published at + all. If the archive goes missing, that window is unrecoverable. + """ + fetch = _fetch_module() + assert fetch.LED_J2JOD_ARCHIVE.exists() + + +def test_led_j2jod_content_digest_matches_the_pin(): + fetch = _fetch_module() + digest = fetch.led_j2jod_content_digest(fetch.LED_J2JOD_ARCHIVE) + assert digest == fetch.LED_J2JOD_CONTENT_SHA256 + + +def test_content_digest_ignores_column_order_but_not_values(tmp_path): + """The property that makes the pin worth having. + + The byte digest originally pinned on this extract broke within + six days purely because the tool reordered its measure columns, + with all 1,476 values unchanged. A pin that fires on cosmetic + reordering trains the maintainer to re-pin on sight, so a real + revision arrives indistinguishable from the false alarms. + """ + import pandas as pd + + fetch = _fetch_module() + frame = pd.read_csv(fetch.LED_J2JOD_ARCHIVE, low_memory=False) + + shuffled = tmp_path / "shuffled.csv" + frame[list(reversed(frame.columns))].to_csv(shuffled, index=False) + assert ( + fetch.led_j2jod_content_digest(shuffled) + == fetch.LED_J2JOD_CONTENT_SHA256 + ) + + revised = tmp_path / "revised.csv" + bumped = frame.copy() + bumped.loc[bumped.index[0], "EE"] += 1 + bumped.to_csv(revised, index=False) + assert ( + fetch.led_j2jod_content_digest(revised) + != fetch.LED_J2JOD_CONTENT_SHA256 + ) + + +def test_committed_extract_rebuilds_from_the_archive(tmp_path): + """Byte-equality of the committed extract from the archived raw.""" + import pandas as pd + + fetch = _fetch_module() + raw = pd.read_csv(fetch.fetch_led_j2jod(tmp_path), low_memory=False) + keep = raw[raw["year"] >= fetch.LEHD_START_YEAR].copy() + id_cols = ["year", "quarter", "firmsize_orig", "firmsize"] + flag_cols = [f"s{m}" for m in fetch.J2JOD_MEASURES] + out = keep[id_cols + fetch.J2JOD_MEASURES + flag_cols].copy() + out.insert( + 4, "firmsize_orig_label", fetch._firmsize_label(out["firmsize_orig"]) + ) + out.insert(5, "firmsize_label", fetch._firmsize_label(out["firmsize"])) + out = out.sort_values(id_cols).reset_index(drop=True) + + rebuilt = tmp_path / "rebuilt.csv" + out.to_csv(rebuilt, index=False, float_format="%.10g") + committed = ( + Path(__file__).resolve().parents[1] + / "data" + / "external" + / "j2jod_us_firmsize_od_2015on.csv" + ) + assert rebuilt.read_text() == committed.read_text() From 79569848f32c1b2450486d74b6b3034bac8b1cec Mon Sep 17 00:00:00 2001 From: Vahid Ahmadi Date: Thu, 23 Jul 2026 10:40:23 +0100 Subject: [PATCH 03/17] Recount tier manifest on current master (unit 740 -> 755) Co-Authored-By: Claude Opus 4.8 (1M context) --- tests/tier_counts.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/tests/tier_counts.json b/tests/tier_counts.json index 19149b24..2cda1646 100644 --- a/tests/tier_counts.json +++ b/tests/tier_counts.json @@ -1,7 +1,7 @@ { "schema_version": 1, "counts": { - "unit": 740, + "unit": 755, "artifact": 1101, "integration_psid": 804, "reproduction_legacy": 520, From 8887f237ff4315568c0b20e0b4e42ee803c59845 Mon Sep 17 00:00:00 2001 From: Vahid Ahmadi Date: Thu, 16 Jul 2026 12:38:10 +0100 Subject: [PATCH 04/17] DRAFT pre-C3 noise floors: Workstream B aggregate battery (E1/E2/E6/E7/E11, E12 deferred) Firm-side counterpart to the #212 floor battery (issue #192, reported-anchor convention: DRAFT, NOT RATIFIED, no thresholds). Temporal-stability floors on the committed aggregate extracts, with full-sample and ex-pandemic figures both on the record; banding via populace_dynamics.firms.banding only. Method findings recorded rather than adjusted away: SUSB has no sector-axis replicate (noise-flag CV bounds + BDS size-margin stability instead), the BDS 20-99 category straddles the canonical 50 edge, the committed J2J/QWI extracts carry no age x sex axis (E2 floors are aggregate-side references), E11 has no committed origin x destination extract (EE margins as proxies), and E12 (AKM) is deferred pending a committed reference extract. Co-Authored-By: Claude Fable 5 --- runs/employer_firm_floors_draft_v0.json | 1372 +++++++++++++++++++++++ scripts/build_employer_firm_floors.py | 456 ++++++++ tests/test_employer_firm_floors.py | 144 +++ 3 files changed, 1972 insertions(+) create mode 100644 runs/employer_firm_floors_draft_v0.json create mode 100644 scripts/build_employer_firm_floors.py create mode 100644 tests/test_employer_firm_floors.py diff --git a/runs/employer_firm_floors_draft_v0.json b/runs/employer_firm_floors_draft_v0.json new file mode 100644 index 00000000..cb12b9c7 --- /dev/null +++ b/runs/employer_firm_floors_draft_v0.json @@ -0,0 +1,1372 @@ +{ + "artifact": "employer_firm_floors", + "version": "draft_v0", + "status": "DRAFT - NOT RATIFIED; C3 not locked; no thresholds", + "issue": "192", + "workstream": "B", + "sources": { + "susb": "data/external/susb_us_sector_size_2022.csv", + "bds": "data/external/bds_us_firm_size_1978_2022.csv", + "qwi": "data/external/qwi_us_firmsize_sector_2015on.csv", + "j2j": "data/external/j2j_us_firmsize_sector_2015on.csv", + "provenance": "data/external/employer_firm_target_sources.md" + }, + "method": "temporal-stability floors on published administrative aggregates: year-over-year same-quarter |log ratio| per cell (QWI/J2J, 2015Q1 on; same-quarter comparison absorbs seasonality in the not-seasonally-adjusted extracts), year-over-year |log share ratio| for the BDS size margin (2012-2022), and published noise-flag CV bounds for the single-vintage SUSB table; banding via populace_dynamics.firms.banding only; thin flag at minimum cell denominator < 10000 jobs (draft choice)", + "unit_rules": [ + "QWI/J2J cells count jobs, not persons (ADR 0003): the job-to-person adjustment (~ multiple-jobholding rate, ~5%) is a pre-registered C3 item", + "QWI EarnS is MEAN monthly earnings of full-quarter employees; QWI never publishes medians; E7 is stated on means", + "J2J extract ownership is oslp (state/local + private) while QWI is private-only (op) and SUSB excludes government; NAICS 92 is dropped from the J2J extract but state/local employment embedded in other sectors (esp. 61, 62) remains \u2014 E2/E11 cells must restate on a private-comparable basis or carry this scope caveat (locks with C3)" + ], + "method_findings": { + "e1_no_sector_replicate": "the committed SUSB extract is a single 2022 cross-section: a same-source temporal or resampling floor on the size x sector cells is degenerate. The E1 floor is therefore composed of the published SUSB noise-flag CV bounds per cell plus a BDS year-over-year stability floor that exists only for the national size margin \u2014 the sector axis has no stability floor derivable from committed extracts", + "e1_bds_straddle": "the BDS '20 to 99' category straddles the canonical 50 edge (banding.bds_fsize_to_canonical is inexact there), so the BDS margin floor is stated on a coarsened partition (20_99 kept whole), not on the five canonical bands", + "e2_no_age_sex_axis": "E2 is registered by age x sex, but the committed J2J extract is the demographic-free 'd' tabulation (and the QWI extract is the all-sex all-age margin), matching the ADR 0003 partition rule that reserves the sex/age axes for gate cells. The floors here are aggregate-side (firm-size x sector) stability references only; the age x sex floor needs a J2J 'se' tabulation extract and is deferred to that extract's commit, before C3 locks", + "e11_no_od_extract": "E11's origin x destination firm-size flow reference (J2JOD) is not committed (provenance note: 'a later, separate extract'), so no E11 floor is derivable; the EE hire/separation margins of the committed extract are recorded as partial proxies", + "e12_deferred": "E12 (AKM moments) has no committed extract: AKM variance decompositions require linked employer-employee microdata, and the published decompositions are research outputs rather than a recurring aggregate release. No floor is buildable; E12 is recorded as deferred pending a committed, provenance-pinned reference extract, and must not lock with C3 without one", + "cycle_signal_in_floors": "temporal-stability floors on published aggregates include true business-cycle variation (2020-2021 most visibly) as well as source noise; both the full-sample and ex-pandemic figures are committed rather than choosing one \u2014 the C3 referee round picks the formulation with both on the record", + "e7_nominal_trend": "raw EarnS YoY variation embeds aggregate nominal wage growth (a trend, not noise); the aggregate-relative EarnS floor is committed alongside the raw one, both on the record" + }, + "e1": { + "susb_2022_share_by_sector_band": { + "11": { + "B100_499": { + "employment": 29243, + "share": 0.17341, + "noise_flag_worst": "G", + "cv_upper_bound": 0.02 + }, + "B10_49": { + "employment": 48395, + "share": 0.28698, + "noise_flag_worst": "G", + "cv_upper_bound": 0.02 + }, + "B500_PLUS": { + "employment": 28400, + "share": 0.16841, + "noise_flag_worst": "J", + "cv_upper_bound": null + }, + "B50_99": { + "employment": 16558, + "share": 0.09819, + "noise_flag_worst": "G", + "cv_upper_bound": 0.02 + }, + "LT10": { + "employment": 46038, + "share": 0.27301, + "noise_flag_worst": "G", + "cv_upper_bound": 0.02 + } + }, + "21": { + "B100_499": { + "employment": 96849, + "share": 0.19064, + "noise_flag_worst": "G", + "cv_upper_bound": 0.02 + }, + "B10_49": { + "employment": 72714, + "share": 0.14313, + "noise_flag_worst": "G", + "cv_upper_bound": 0.02 + }, + "B500_PLUS": { + "employment": 267414, + "share": 0.52638, + "noise_flag_worst": "H", + "cv_upper_bound": 0.05 + }, + "B50_99": { + "employment": 39882, + "share": 0.0785, + "noise_flag_worst": "G", + "cv_upper_bound": 0.02 + }, + "LT10": { + "employment": 31164, + "share": 0.06134, + "noise_flag_worst": "G", + "cv_upper_bound": 0.02 + } + }, + "22": { + "B100_499": { + "employment": 58348, + "share": 0.09043, + "noise_flag_worst": "G", + "cv_upper_bound": 0.02 + }, + "B10_49": { + "employment": 24877, + "share": 0.03856, + "noise_flag_worst": "G", + "cv_upper_bound": 0.02 + }, + "B500_PLUS": { + "employment": 523619, + "share": 0.81154, + "noise_flag_worst": "H", + "cv_upper_bound": 0.05 + }, + "B50_99": { + "employment": 24990, + "share": 0.03873, + "noise_flag_worst": "G", + "cv_upper_bound": 0.02 + }, + "LT10": { + "employment": 13380, + "share": 0.02074, + "noise_flag_worst": "G", + "cv_upper_bound": 0.02 + } + }, + "23": { + "B100_499": { + "employment": 1257639, + "share": 0.17083, + "noise_flag_worst": "G", + "cv_upper_bound": 0.02 + }, + "B10_49": { + "employment": 2217549, + "share": 0.30122, + "noise_flag_worst": "G", + "cv_upper_bound": 0.02 + }, + "B500_PLUS": { + "employment": 1419254, + "share": 0.19279, + "noise_flag_worst": "G", + "cv_upper_bound": 0.02 + }, + "B50_99": { + "employment": 834047, + "share": 0.11329, + "noise_flag_worst": "G", + "cv_upper_bound": 0.02 + }, + "LT10": { + "employment": 1633358, + "share": 0.22187, + "noise_flag_worst": "G", + "cv_upper_bound": 0.02 + } + }, + "31-33": { + "B100_499": { + "employment": 2184791, + "share": 0.17925, + "noise_flag_worst": "G", + "cv_upper_bound": 0.02 + }, + "B10_49": { + "employment": 1444401, + "share": 0.11851, + "noise_flag_worst": "G", + "cv_upper_bound": 0.02 + }, + "B500_PLUS": { + "employment": 7203660, + "share": 0.59103, + "noise_flag_worst": "G", + "cv_upper_bound": 0.02 + }, + "B50_99": { + "employment": 883941, + "share": 0.07252, + "noise_flag_worst": "G", + "cv_upper_bound": 0.02 + }, + "LT10": { + "employment": 471537, + "share": 0.03869, + "noise_flag_worst": "G", + "cv_upper_bound": 0.02 + } + }, + "42": { + "B100_499": { + "employment": 1091735, + "share": 0.17771, + "noise_flag_worst": "G", + "cv_upper_bound": 0.02 + }, + "B10_49": { + "employment": 1055183, + "share": 0.17176, + "noise_flag_worst": "G", + "cv_upper_bound": 0.02 + }, + "B500_PLUS": { + "employment": 2929637, + "share": 0.47689, + "noise_flag_worst": "G", + "cv_upper_bound": 0.02 + }, + "B50_99": { + "employment": 505733, + "share": 0.08232, + "noise_flag_worst": "G", + "cv_upper_bound": 0.02 + }, + "LT10": { + "employment": 560942, + "share": 0.09131, + "noise_flag_worst": "G", + "cv_upper_bound": 0.02 + } + }, + "44-45": { + "B100_499": { + "employment": 1123241, + "share": 0.07054, + "noise_flag_worst": "G", + "cv_upper_bound": 0.02 + }, + "B10_49": { + "employment": 2014328, + "share": 0.12651, + "noise_flag_worst": "G", + "cv_upper_bound": 0.02 + }, + "B500_PLUS": { + "employment": 10470141, + "share": 0.65757, + "noise_flag_worst": "G", + "cv_upper_bound": 0.02 + }, + "B50_99": { + "employment": 763829, + "share": 0.04797, + "noise_flag_worst": "G", + "cv_upper_bound": 0.02 + }, + "LT10": { + "employment": 1550899, + "share": 0.0974, + "noise_flag_worst": "G", + "cv_upper_bound": 0.02 + } + }, + "48-49": { + "B100_499": { + "employment": 622233, + "share": 0.10187, + "noise_flag_worst": "G", + "cv_upper_bound": 0.02 + }, + "B10_49": { + "employment": 639788, + "share": 0.10474, + "noise_flag_worst": "G", + "cv_upper_bound": 0.02 + }, + "B500_PLUS": { + "employment": 4080292, + "share": 0.66801, + "noise_flag_worst": "G", + "cv_upper_bound": 0.02 + }, + "B50_99": { + "employment": 372968, + "share": 0.06106, + "noise_flag_worst": "G", + "cv_upper_bound": 0.02 + }, + "LT10": { + "employment": 392840, + "share": 0.06431, + "noise_flag_worst": "G", + "cv_upper_bound": 0.02 + } + }, + "51": { + "B100_499": { + "employment": 425798, + "share": 0.11717, + "noise_flag_worst": "G", + "cv_upper_bound": 0.02 + }, + "B10_49": { + "employment": 254370, + "share": 0.07, + "noise_flag_worst": "G", + "cv_upper_bound": 0.02 + }, + "B500_PLUS": { + "employment": 2660578, + "share": 0.73213, + "noise_flag_worst": "G", + "cv_upper_bound": 0.02 + }, + "B50_99": { + "employment": 136910, + "share": 0.03767, + "noise_flag_worst": "G", + "cv_upper_bound": 0.02 + }, + "LT10": { + "employment": 156356, + "share": 0.04303, + "noise_flag_worst": "G", + "cv_upper_bound": 0.02 + } + }, + "52": { + "B100_499": { + "employment": 729538, + "share": 0.10678, + "noise_flag_worst": "G", + "cv_upper_bound": 0.02 + }, + "B10_49": { + "employment": 406149, + "share": 0.05945, + "noise_flag_worst": "G", + "cv_upper_bound": 0.02 + }, + "B500_PLUS": { + "employment": 4950276, + "share": 0.72458, + "noise_flag_worst": "G", + "cv_upper_bound": 0.02 + }, + "B50_99": { + "employment": 222014, + "share": 0.0325, + "noise_flag_worst": "G", + "cv_upper_bound": 0.02 + }, + "LT10": { + "employment": 523920, + "share": 0.07669, + "noise_flag_worst": "G", + "cv_upper_bound": 0.02 + } + }, + "53": { + "B100_499": { + "employment": 368603, + "share": 0.15799, + "noise_flag_worst": "G", + "cv_upper_bound": 0.02 + }, + "B10_49": { + "employment": 415027, + "share": 0.17788, + "noise_flag_worst": "G", + "cv_upper_bound": 0.02 + }, + "B500_PLUS": { + "employment": 780729, + "share": 0.33463, + "noise_flag_worst": "H", + "cv_upper_bound": 0.05 + }, + "B50_99": { + "employment": 160390, + "share": 0.06874, + "noise_flag_worst": "G", + "cv_upper_bound": 0.02 + }, + "LT10": { + "employment": 608376, + "share": 0.26076, + "noise_flag_worst": "H", + "cv_upper_bound": 0.05 + } + }, + "54": { + "B100_499": { + "employment": 1552879, + "share": 0.15296, + "noise_flag_worst": "G", + "cv_upper_bound": 0.02 + }, + "B10_49": { + "employment": 1765942, + "share": 0.17395, + "noise_flag_worst": "G", + "cv_upper_bound": 0.02 + }, + "B500_PLUS": { + "employment": 4529305, + "share": 0.44614, + "noise_flag_worst": "G", + "cv_upper_bound": 0.02 + }, + "B50_99": { + "employment": 710784, + "share": 0.07001, + "noise_flag_worst": "G", + "cv_upper_bound": 0.02 + }, + "LT10": { + "employment": 1593194, + "share": 0.15693, + "noise_flag_worst": "G", + "cv_upper_bound": 0.02 + } + }, + "55": { + "B100_499": { + "employment": 292129, + "share": 0.07977, + "noise_flag_worst": "G", + "cv_upper_bound": 0.02 + }, + "B10_49": { + "employment": 31786, + "share": 0.00868, + "noise_flag_worst": "G", + "cv_upper_bound": 0.02 + }, + "B500_PLUS": { + "employment": 3285090, + "share": 0.89708, + "noise_flag_worst": "G", + "cv_upper_bound": 0.02 + }, + "B50_99": { + "employment": 45684, + "share": 0.01248, + "noise_flag_worst": "G", + "cv_upper_bound": 0.02 + }, + "LT10": { + "employment": 7288, + "share": 0.00199, + "noise_flag_worst": "H", + "cv_upper_bound": 0.05 + } + }, + "56": { + "B100_499": { + "employment": 1502438, + "share": 0.11065, + "noise_flag_worst": "G", + "cv_upper_bound": 0.02 + }, + "B10_49": { + "employment": 1134105, + "share": 0.08352, + "noise_flag_worst": "G", + "cv_upper_bound": 0.02 + }, + "B500_PLUS": { + "employment": 9687197, + "share": 0.71341, + "noise_flag_worst": "G", + "cv_upper_bound": 0.02 + }, + "B50_99": { + "employment": 538533, + "share": 0.03966, + "noise_flag_worst": "G", + "cv_upper_bound": 0.02 + }, + "LT10": { + "employment": 716436, + "share": 0.05276, + "noise_flag_worst": "G", + "cv_upper_bound": 0.02 + } + }, + "61": { + "B100_499": { + "employment": 733380, + "share": 0.19589, + "noise_flag_worst": "G", + "cv_upper_bound": 0.02 + }, + "B10_49": { + "employment": 526624, + "share": 0.14066, + "noise_flag_worst": "G", + "cv_upper_bound": 0.02 + }, + "B500_PLUS": { + "employment": 1971357, + "share": 0.52656, + "noise_flag_worst": "G", + "cv_upper_bound": 0.02 + }, + "B50_99": { + "employment": 324751, + "share": 0.08674, + "noise_flag_worst": "G", + "cv_upper_bound": 0.02 + }, + "LT10": { + "employment": 187728, + "share": 0.05014, + "noise_flag_worst": "G", + "cv_upper_bound": 0.02 + } + }, + "62": { + "B100_499": { + "employment": 3432316, + "share": 0.16212, + "noise_flag_worst": "G", + "cv_upper_bound": 0.02 + }, + "B10_49": { + "employment": 2934487, + "share": 0.13861, + "noise_flag_worst": "G", + "cv_upper_bound": 0.02 + }, + "B500_PLUS": { + "employment": 11910294, + "share": 0.56257, + "noise_flag_worst": "G", + "cv_upper_bound": 0.02 + }, + "B50_99": { + "employment": 1399147, + "share": 0.06609, + "noise_flag_worst": "G", + "cv_upper_bound": 0.02 + }, + "LT10": { + "employment": 1494988, + "share": 0.07061, + "noise_flag_worst": "G", + "cv_upper_bound": 0.02 + } + }, + "71": { + "B100_499": { + "employment": 466716, + "share": 0.20131, + "noise_flag_worst": "G", + "cv_upper_bound": 0.02 + }, + "B10_49": { + "employment": 516682, + "share": 0.22287, + "noise_flag_worst": "G", + "cv_upper_bound": 0.02 + }, + "B500_PLUS": { + "employment": 841941, + "share": 0.36316, + "noise_flag_worst": "G", + "cv_upper_bound": 0.02 + }, + "B50_99": { + "employment": 250550, + "share": 0.10807, + "noise_flag_worst": "G", + "cv_upper_bound": 0.02 + }, + "LT10": { + "employment": 242468, + "share": 0.10459, + "noise_flag_worst": "G", + "cv_upper_bound": 0.02 + } + }, + "72": { + "B100_499": { + "employment": 1736736, + "share": 0.12591, + "noise_flag_worst": "G", + "cv_upper_bound": 0.02 + }, + "B10_49": { + "employment": 4370162, + "share": 0.31683, + "noise_flag_worst": "G", + "cv_upper_bound": 0.02 + }, + "B500_PLUS": { + "employment": 5135989, + "share": 0.37235, + "noise_flag_worst": "H", + "cv_upper_bound": 0.05 + }, + "B50_99": { + "employment": 1435374, + "share": 0.10406, + "noise_flag_worst": "G", + "cv_upper_bound": 0.02 + }, + "LT10": { + "employment": 1115217, + "share": 0.08085, + "noise_flag_worst": "H", + "cv_upper_bound": 0.05 + } + }, + "81": { + "B100_499": { + "employment": 619059, + "share": 0.11313, + "noise_flag_worst": "G", + "cv_upper_bound": 0.02 + }, + "B10_49": { + "employment": 1795251, + "share": 0.32808, + "noise_flag_worst": "G", + "cv_upper_bound": 0.02 + }, + "B500_PLUS": { + "employment": 822678, + "share": 0.15034, + "noise_flag_worst": "H", + "cv_upper_bound": 0.05 + }, + "B50_99": { + "employment": 484178, + "share": 0.08848, + "noise_flag_worst": "G", + "cv_upper_bound": 0.02 + }, + "LT10": { + "employment": 1750821, + "share": 0.31996, + "noise_flag_worst": "G", + "cv_upper_bound": 0.02 + } + }, + "99": { + "B10_49": { + "employment": 2887, + "share": 0.24359, + "noise_flag_worst": "J", + "cv_upper_bound": null + }, + "LT10": { + "employment": 8965, + "share": 0.75641, + "noise_flag_worst": "J", + "cv_upper_bound": null + } + } + }, + "bds_size_margin_yoy_stability": { + "window": [ + 2012, + 2022 + ], + "groups": { + "1_9": { + "bds_fsize_categories": [ + "a) 1 to 4", + "b) 5 to 9" + ], + "canonical_bands": [ + "LT10" + ], + "exact": true, + "share_2022": 0.10702, + "floor_abs_log_ratio_mean": 0.01718, + "floor_abs_log_ratio_sd": 0.01273, + "n_pairs": 11, + "ex_pandemic_mean": 0.01482, + "ex_pandemic_sd": 0.00478, + "n_pairs_ex_pandemic": 8 + }, + "10_19": { + "bds_fsize_categories": [ + "c) 10 to 19" + ], + "canonical_bands": [ + "B10_49" + ], + "exact": true, + "share_2022": 0.0666, + "floor_abs_log_ratio_mean": 0.01131, + "floor_abs_log_ratio_sd": 0.00515, + "n_pairs": 11, + "ex_pandemic_mean": 0.00915, + "ex_pandemic_sd": 0.00387, + "n_pairs_ex_pandemic": 8 + }, + "20_99": { + "bds_fsize_categories": [ + "d) 20 to 99" + ], + "canonical_bands": [ + "B10_49", + "B50_99" + ], + "exact": false, + "share_2022": 0.16113, + "floor_abs_log_ratio_mean": 0.00816, + "floor_abs_log_ratio_sd": 0.0082, + "n_pairs": 11, + "ex_pandemic_mean": 0.00404, + "ex_pandemic_sd": 0.00307, + "n_pairs_ex_pandemic": 8 + }, + "100_499": { + "bds_fsize_categories": [ + "e) 100 to 499" + ], + "canonical_bands": [ + "B100_499" + ], + "exact": true, + "share_2022": 0.13528, + "floor_abs_log_ratio_mean": 0.00563, + "floor_abs_log_ratio_sd": 0.0072, + "n_pairs": 11, + "ex_pandemic_mean": 0.0039, + "ex_pandemic_sd": 0.00257, + "n_pairs_ex_pandemic": 8 + }, + "500_plus": { + "bds_fsize_categories": [ + "f) 500 to 999", + "g) 1000 to 2499", + "h) 2500 to 4999", + "i) 5000 to 9999", + "j) 10000+" + ], + "canonical_bands": [ + "B500_PLUS" + ], + "exact": true, + "share_2022": 0.52997, + "floor_abs_log_ratio_mean": 0.00516, + "floor_abs_log_ratio_sd": 0.00221, + "n_pairs": 11, + "ex_pandemic_mean": 0.0048, + "ex_pandemic_sd": 0.00173, + "n_pairs_ex_pandemic": 8 + } + } + } + }, + "e2": { + "by_firmsize_all_industry": { + "firmsize1": { + "firmsize_label": "0-19 Employees", + "canonical_bands": [ + "LT10", + "B10_49" + ], + "exact": false, + "min_denominator_jobs": 18440372, + "thin": false, + "hire_rate": { + "level_mean": 0.13835, + "floor_abs_log_ratio_mean": 0.0565, + "floor_abs_log_ratio_sd": 0.05489, + "n_pairs": 36, + "ex_pandemic_mean": 0.02729, + "ex_pandemic_sd": 0.02112, + "n_pairs_ex_pandemic": 24 + }, + "separation_rate": { + "level_mean": 0.12446, + "floor_abs_log_ratio_mean": 0.05609, + "floor_abs_log_ratio_sd": 0.12156, + "n_pairs": 36, + "ex_pandemic_mean": 0.01837, + "ex_pandemic_sd": 0.0163, + "n_pairs_ex_pandemic": 24 + }, + "j2j_hire_rate": { + "level_mean": 0.05473, + "floor_abs_log_ratio_mean": 0.06146, + "floor_abs_log_ratio_sd": 0.06921, + "n_pairs": 36, + "ex_pandemic_mean": 0.03739, + "ex_pandemic_sd": 0.02957, + "n_pairs_ex_pandemic": 24 + }, + "j2j_separation_rate": { + "level_mean": 0.05247, + "floor_abs_log_ratio_mean": 0.08393, + "floor_abs_log_ratio_sd": 0.10103, + "n_pairs": 36, + "ex_pandemic_mean": 0.04322, + "ex_pandemic_sd": 0.03838, + "n_pairs_ex_pandemic": 24 + }, + "ee_hire_rate": { + "level_mean": 0.03678, + "floor_abs_log_ratio_mean": 0.08076, + "floor_abs_log_ratio_sd": 0.10865, + "n_pairs": 36, + "ex_pandemic_mean": 0.04296, + "ex_pandemic_sd": 0.03382, + "n_pairs_ex_pandemic": 24 + }, + "ee_separation_rate": { + "level_mean": 0.03435, + "floor_abs_log_ratio_mean": 0.10011, + "floor_abs_log_ratio_sd": 0.13275, + "n_pairs": 36, + "ex_pandemic_mean": 0.04862, + "ex_pandemic_sd": 0.04025, + "n_pairs_ex_pandemic": 24 + } + }, + "firmsize2": { + "firmsize_label": "20-49 Employees", + "canonical_bands": [ + "B10_49" + ], + "exact": true, + "min_denominator_jobs": 10007762, + "thin": false, + "hire_rate": { + "level_mean": 0.13301, + "floor_abs_log_ratio_mean": 0.07117, + "floor_abs_log_ratio_sd": 0.08895, + "n_pairs": 36, + "ex_pandemic_mean": 0.03415, + "ex_pandemic_sd": 0.02702, + "n_pairs_ex_pandemic": 24 + }, + "separation_rate": { + "level_mean": 0.12795, + "floor_abs_log_ratio_mean": 0.05895, + "floor_abs_log_ratio_sd": 0.10808, + "n_pairs": 36, + "ex_pandemic_mean": 0.02151, + "ex_pandemic_sd": 0.01687, + "n_pairs_ex_pandemic": 24 + }, + "j2j_hire_rate": { + "level_mean": 0.06192, + "floor_abs_log_ratio_mean": 0.07963, + "floor_abs_log_ratio_sd": 0.09966, + "n_pairs": 36, + "ex_pandemic_mean": 0.04356, + "ex_pandemic_sd": 0.03343, + "n_pairs_ex_pandemic": 24 + }, + "j2j_separation_rate": { + "level_mean": 0.06427, + "floor_abs_log_ratio_mean": 0.08386, + "floor_abs_log_ratio_sd": 0.10128, + "n_pairs": 36, + "ex_pandemic_mean": 0.04362, + "ex_pandemic_sd": 0.03457, + "n_pairs_ex_pandemic": 24 + }, + "ee_hire_rate": { + "level_mean": 0.04311, + "floor_abs_log_ratio_mean": 0.09836, + "floor_abs_log_ratio_sd": 0.13606, + "n_pairs": 36, + "ex_pandemic_mean": 0.0497, + "ex_pandemic_sd": 0.03865, + "n_pairs_ex_pandemic": 24 + }, + "ee_separation_rate": { + "level_mean": 0.0439, + "floor_abs_log_ratio_mean": 0.10179, + "floor_abs_log_ratio_sd": 0.13695, + "n_pairs": 36, + "ex_pandemic_mean": 0.05047, + "ex_pandemic_sd": 0.03739, + "n_pairs_ex_pandemic": 24 + } + }, + "firmsize3": { + "firmsize_label": "50-249 Employees", + "canonical_bands": [ + "B50_99", + "B100_499" + ], + "exact": false, + "min_denominator_jobs": 16053464, + "thin": false, + "hire_rate": { + "level_mean": 0.12559, + "floor_abs_log_ratio_mean": 0.07152, + "floor_abs_log_ratio_sd": 0.09951, + "n_pairs": 36, + "ex_pandemic_mean": 0.03417, + "ex_pandemic_sd": 0.02504, + "n_pairs_ex_pandemic": 24 + }, + "separation_rate": { + "level_mean": 0.12039, + "floor_abs_log_ratio_mean": 0.05035, + "floor_abs_log_ratio_sd": 0.08382, + "n_pairs": 36, + "ex_pandemic_mean": 0.02188, + "ex_pandemic_sd": 0.01587, + "n_pairs_ex_pandemic": 24 + }, + "j2j_hire_rate": { + "level_mean": 0.06398, + "floor_abs_log_ratio_mean": 0.08444, + "floor_abs_log_ratio_sd": 0.10715, + "n_pairs": 36, + "ex_pandemic_mean": 0.04298, + "ex_pandemic_sd": 0.03239, + "n_pairs_ex_pandemic": 24 + }, + "j2j_separation_rate": { + "level_mean": 0.06447, + "floor_abs_log_ratio_mean": 0.07991, + "floor_abs_log_ratio_sd": 0.09529, + "n_pairs": 36, + "ex_pandemic_mean": 0.0423, + "ex_pandemic_sd": 0.03314, + "n_pairs_ex_pandemic": 24 + }, + "ee_hire_rate": { + "level_mean": 0.04519, + "floor_abs_log_ratio_mean": 0.10125, + "floor_abs_log_ratio_sd": 0.13965, + "n_pairs": 36, + "ex_pandemic_mean": 0.05036, + "ex_pandemic_sd": 0.03991, + "n_pairs_ex_pandemic": 24 + }, + "ee_separation_rate": { + "level_mean": 0.04492, + "floor_abs_log_ratio_mean": 0.09829, + "floor_abs_log_ratio_sd": 0.12995, + "n_pairs": 36, + "ex_pandemic_mean": 0.04958, + "ex_pandemic_sd": 0.03811, + "n_pairs_ex_pandemic": 24 + } + }, + "firmsize4": { + "firmsize_label": "250-499 Employees", + "canonical_bands": [ + "B100_499" + ], + "exact": true, + "min_denominator_jobs": 6036916, + "thin": false, + "hire_rate": { + "level_mean": 0.12129, + "floor_abs_log_ratio_mean": 0.07696, + "floor_abs_log_ratio_sd": 0.10562, + "n_pairs": 36, + "ex_pandemic_mean": 0.04226, + "ex_pandemic_sd": 0.03483, + "n_pairs_ex_pandemic": 24 + }, + "separation_rate": { + "level_mean": 0.11677, + "floor_abs_log_ratio_mean": 0.05004, + "floor_abs_log_ratio_sd": 0.06586, + "n_pairs": 36, + "ex_pandemic_mean": 0.02763, + "ex_pandemic_sd": 0.02303, + "n_pairs_ex_pandemic": 24 + }, + "j2j_hire_rate": { + "level_mean": 0.06345, + "floor_abs_log_ratio_mean": 0.09662, + "floor_abs_log_ratio_sd": 0.11378, + "n_pairs": 36, + "ex_pandemic_mean": 0.05223, + "ex_pandemic_sd": 0.04343, + "n_pairs_ex_pandemic": 24 + }, + "j2j_separation_rate": { + "level_mean": 0.06428, + "floor_abs_log_ratio_mean": 0.08368, + "floor_abs_log_ratio_sd": 0.09182, + "n_pairs": 36, + "ex_pandemic_mean": 0.04842, + "ex_pandemic_sd": 0.04214, + "n_pairs_ex_pandemic": 24 + }, + "ee_hire_rate": { + "level_mean": 0.04467, + "floor_abs_log_ratio_mean": 0.11341, + "floor_abs_log_ratio_sd": 0.14429, + "n_pairs": 36, + "ex_pandemic_mean": 0.06109, + "ex_pandemic_sd": 0.04938, + "n_pairs_ex_pandemic": 24 + }, + "ee_separation_rate": { + "level_mean": 0.04511, + "floor_abs_log_ratio_mean": 0.10241, + "floor_abs_log_ratio_sd": 0.12325, + "n_pairs": 36, + "ex_pandemic_mean": 0.05741, + "ex_pandemic_sd": 0.04738, + "n_pairs_ex_pandemic": 24 + } + }, + "firmsize5": { + "firmsize_label": "500+ Employees", + "canonical_bands": [ + "B500_PLUS" + ], + "exact": true, + "min_denominator_jobs": 54935065, + "thin": false, + "hire_rate": { + "level_mean": 0.11101, + "floor_abs_log_ratio_mean": 0.07952, + "floor_abs_log_ratio_sd": 0.09847, + "n_pairs": 36, + "ex_pandemic_mean": 0.04312, + "ex_pandemic_sd": 0.04574, + "n_pairs_ex_pandemic": 24 + }, + "separation_rate": { + "level_mean": 0.1067, + "floor_abs_log_ratio_mean": 0.05405, + "floor_abs_log_ratio_sd": 0.05654, + "n_pairs": 36, + "ex_pandemic_mean": 0.03493, + "ex_pandemic_sd": 0.03214, + "n_pairs_ex_pandemic": 24 + }, + "j2j_hire_rate": { + "level_mean": 0.0593, + "floor_abs_log_ratio_mean": 0.09724, + "floor_abs_log_ratio_sd": 0.10838, + "n_pairs": 36, + "ex_pandemic_mean": 0.05534, + "ex_pandemic_sd": 0.05552, + "n_pairs_ex_pandemic": 24 + }, + "j2j_separation_rate": { + "level_mean": 0.06032, + "floor_abs_log_ratio_mean": 0.09256, + "floor_abs_log_ratio_sd": 0.10857, + "n_pairs": 36, + "ex_pandemic_mean": 0.05281, + "ex_pandemic_sd": 0.05306, + "n_pairs_ex_pandemic": 24 + }, + "ee_hire_rate": { + "level_mean": 0.04125, + "floor_abs_log_ratio_mean": 0.11389, + "floor_abs_log_ratio_sd": 0.14034, + "n_pairs": 36, + "ex_pandemic_mean": 0.06284, + "ex_pandemic_sd": 0.06335, + "n_pairs_ex_pandemic": 24 + }, + "ee_separation_rate": { + "level_mean": 0.04255, + "floor_abs_log_ratio_mean": 0.10903, + "floor_abs_log_ratio_sd": 0.14068, + "n_pairs": 36, + "ex_pandemic_mean": 0.06003, + "ex_pandemic_sd": 0.0583, + "n_pairs_ex_pandemic": 24 + } + } + }, + "sector_cells": { + "n_cells": 95, + "hire_rate": { + "cell_floor_median": 0.08873, + "cell_floor_p90": 0.14927, + "cell_floor_max": 0.29279, + "n_cells_with_pairs": 95, + "n_thin_cells": 0 + }, + "separation_rate": { + "cell_floor_median": 0.06316, + "cell_floor_p90": 0.09947, + "cell_floor_max": 0.18552, + "n_cells_with_pairs": 95, + "n_thin_cells": 0 + }, + "j2j_hire_rate": { + "cell_floor_median": 0.10574, + "cell_floor_p90": 0.1587, + "cell_floor_max": 0.31612, + "n_cells_with_pairs": 95, + "n_thin_cells": 0 + }, + "j2j_separation_rate": { + "cell_floor_median": 0.09402, + "cell_floor_p90": 0.13385, + "cell_floor_max": 0.21333, + "n_cells_with_pairs": 95, + "n_thin_cells": 0 + }, + "ee_hire_rate": { + "cell_floor_median": 0.12524, + "cell_floor_p90": 0.1836, + "cell_floor_max": 0.35072, + "n_cells_with_pairs": 95, + "n_thin_cells": 0 + }, + "ee_separation_rate": { + "cell_floor_median": 0.11164, + "cell_floor_p90": 0.16538, + "cell_floor_max": 0.23564, + "n_cells_with_pairs": 95, + "n_thin_cells": 0 + } + } + }, + "e6_e7": { + "by_firmsize_all_industry": { + "firmsize1": { + "firmsize_label": "0-19 Employees", + "canonical_bands": [ + "LT10", + "B10_49" + ], + "exact": false, + "min_denominator_jobs": 25040755, + "thin": false, + "e6_hire_rate": { + "level_mean": 0.17624, + "floor_abs_log_ratio_mean": 0.04064, + "floor_abs_log_ratio_sd": 0.03935, + "n_pairs": 36, + "ex_pandemic_mean": 0.02704, + "ex_pandemic_sd": 0.02588, + "n_pairs_ex_pandemic": 24 + }, + "e6_separation_rate": { + "level_mean": 0.16626, + "floor_abs_log_ratio_mean": 0.05999, + "floor_abs_log_ratio_sd": 0.11455, + "n_pairs": 35, + "ex_pandemic_mean": 0.02282, + "ex_pandemic_sd": 0.02462, + "n_pairs_ex_pandemic": 23 + }, + "e7_earns_mean": { + "level_mean": 3750.15385, + "floor_abs_log_ratio_mean": 0.03537, + "floor_abs_log_ratio_sd": 0.02578, + "n_pairs": 35, + "ex_pandemic_mean": 0.02618, + "ex_pandemic_sd": 0.01282, + "n_pairs_ex_pandemic": 23 + }, + "e7_earns_rel_to_aggregate": { + "floor_abs_log_ratio_mean": 0.01162, + "floor_abs_log_ratio_sd": 0.00848, + "n_pairs": 35, + "ex_pandemic_mean": 0.0094, + "ex_pandemic_sd": 0.00553, + "n_pairs_ex_pandemic": 23 + } + }, + "firmsize2": { + "firmsize_label": "20-49 Employees", + "canonical_bands": [ + "B10_49" + ], + "exact": true, + "min_denominator_jobs": 12789770, + "thin": false, + "e6_hire_rate": { + "level_mean": 0.17312, + "floor_abs_log_ratio_mean": 0.05679, + "floor_abs_log_ratio_sd": 0.07275, + "n_pairs": 36, + "ex_pandemic_mean": 0.03523, + "ex_pandemic_sd": 0.03133, + "n_pairs_ex_pandemic": 24 + }, + "e6_separation_rate": { + "level_mean": 0.17206, + "floor_abs_log_ratio_mean": 0.06336, + "floor_abs_log_ratio_sd": 0.10746, + "n_pairs": 35, + "ex_pandemic_mean": 0.02619, + "ex_pandemic_sd": 0.02453, + "n_pairs_ex_pandemic": 23 + }, + "e7_earns_mean": { + "level_mean": 4381.53846, + "floor_abs_log_ratio_mean": 0.03731, + "floor_abs_log_ratio_sd": 0.03092, + "n_pairs": 35, + "ex_pandemic_mean": 0.02465, + "ex_pandemic_sd": 0.01147, + "n_pairs_ex_pandemic": 23 + }, + "e7_earns_rel_to_aggregate": { + "floor_abs_log_ratio_mean": 0.01223, + "floor_abs_log_ratio_sd": 0.0056, + "n_pairs": 35, + "ex_pandemic_mean": 0.01198, + "ex_pandemic_sd": 0.00521, + "n_pairs_ex_pandemic": 23 + } + }, + "firmsize3": { + "firmsize_label": "50-249 Employees", + "canonical_bands": [ + "B50_99", + "B100_499" + ], + "exact": false, + "min_denominator_jobs": 20162591, + "thin": false, + "e6_hire_rate": { + "level_mean": 0.16488, + "floor_abs_log_ratio_mean": 0.0591, + "floor_abs_log_ratio_sd": 0.08608, + "n_pairs": 36, + "ex_pandemic_mean": 0.03188, + "ex_pandemic_sd": 0.02743, + "n_pairs_ex_pandemic": 24 + }, + "e6_separation_rate": { + "level_mean": 0.16329, + "floor_abs_log_ratio_mean": 0.05497, + "floor_abs_log_ratio_sd": 0.08598, + "n_pairs": 35, + "ex_pandemic_mean": 0.02339, + "ex_pandemic_sd": 0.02079, + "n_pairs_ex_pandemic": 23 + }, + "e7_earns_mean": { + "level_mean": 5030.20513, + "floor_abs_log_ratio_mean": 0.04158, + "floor_abs_log_ratio_sd": 0.03371, + "n_pairs": 35, + "ex_pandemic_mean": 0.02727, + "ex_pandemic_sd": 0.0132, + "n_pairs_ex_pandemic": 23 + }, + "e7_earns_rel_to_aggregate": { + "floor_abs_log_ratio_mean": 0.00892, + "floor_abs_log_ratio_sd": 0.00755, + "n_pairs": 35, + "ex_pandemic_mean": 0.00961, + "ex_pandemic_sd": 0.00845, + "n_pairs_ex_pandemic": 23 + } + }, + "firmsize4": { + "firmsize_label": "250-499 Employees", + "canonical_bands": [ + "B100_499" + ], + "exact": true, + "min_denominator_jobs": 7617802, + "thin": false, + "e6_hire_rate": { + "level_mean": 0.16156, + "floor_abs_log_ratio_mean": 0.06534, + "floor_abs_log_ratio_sd": 0.09186, + "n_pairs": 36, + "ex_pandemic_mean": 0.03994, + "ex_pandemic_sd": 0.03671, + "n_pairs_ex_pandemic": 24 + }, + "e6_separation_rate": { + "level_mean": 0.16052, + "floor_abs_log_ratio_mean": 0.05247, + "floor_abs_log_ratio_sd": 0.06821, + "n_pairs": 35, + "ex_pandemic_mean": 0.02996, + "ex_pandemic_sd": 0.02894, + "n_pairs_ex_pandemic": 23 + }, + "e7_earns_mean": { + "level_mean": 5525.97436, + "floor_abs_log_ratio_mean": 0.04863, + "floor_abs_log_ratio_sd": 0.03383, + "n_pairs": 35, + "ex_pandemic_mean": 0.03416, + "ex_pandemic_sd": 0.016, + "n_pairs_ex_pandemic": 23 + }, + "e7_earns_rel_to_aggregate": { + "floor_abs_log_ratio_mean": 0.00912, + "floor_abs_log_ratio_sd": 0.00773, + "n_pairs": 35, + "ex_pandemic_mean": 0.00654, + "ex_pandemic_sd": 0.00607, + "n_pairs_ex_pandemic": 23 + } + }, + "firmsize5": { + "firmsize_label": "500+ Employees", + "canonical_bands": [ + "B500_PLUS" + ], + "exact": true, + "min_denominator_jobs": 68074643, + "thin": false, + "e6_hire_rate": { + "level_mean": 0.14811, + "floor_abs_log_ratio_mean": 0.06934, + "floor_abs_log_ratio_sd": 0.08398, + "n_pairs": 36, + "ex_pandemic_mean": 0.04385, + "ex_pandemic_sd": 0.04439, + "n_pairs_ex_pandemic": 24 + }, + "e6_separation_rate": { + "level_mean": 0.14779, + "floor_abs_log_ratio_mean": 0.05885, + "floor_abs_log_ratio_sd": 0.06216, + "n_pairs": 35, + "ex_pandemic_mean": 0.03847, + "ex_pandemic_sd": 0.03834, + "n_pairs_ex_pandemic": 23 + }, + "e7_earns_mean": { + "level_mean": 6198.97436, + "floor_abs_log_ratio_mean": 0.04616, + "floor_abs_log_ratio_sd": 0.02953, + "n_pairs": 35, + "ex_pandemic_mean": 0.03539, + "ex_pandemic_sd": 0.01633, + "n_pairs_ex_pandemic": 23 + }, + "e7_earns_rel_to_aggregate": { + "floor_abs_log_ratio_mean": 0.00492, + "floor_abs_log_ratio_sd": 0.00392, + "n_pairs": 35, + "ex_pandemic_mean": 0.00397, + "ex_pandemic_sd": 0.00265, + "n_pairs_ex_pandemic": 23 + } + } + }, + "sector_cells": { + "n_cells": 95, + "e6_hire_rate": { + "cell_floor_median": 0.07599, + "cell_floor_p90": 0.13751, + "cell_floor_max": 0.24728, + "n_cells_with_pairs": 95, + "n_thin_cells": 0 + }, + "e6_separation_rate": { + "cell_floor_median": 0.06708, + "cell_floor_p90": 0.1134, + "cell_floor_max": 0.17484, + "n_cells_with_pairs": 95, + "n_thin_cells": 0 + }, + "e7_earns_mean": { + "cell_floor_median": 0.04492, + "cell_floor_p90": 0.06791, + "cell_floor_max": 0.11178, + "n_cells_with_pairs": 95, + "n_thin_cells": 0 + } + } + }, + "e11": { + "status": "floor not derivable from committed extracts", + "margin_proxy": "the ee_hire_rate / ee_separation_rate floors in the E2 block are the destination- and origin-size margins of the E11 origin x destination matrix" + }, + "e12": { + "status": "deferred - no committed extract" + } +} diff --git a/scripts/build_employer_firm_floors.py b/scripts/build_employer_firm_floors.py new file mode 100644 index 00000000..08d6e589 --- /dev/null +++ b/scripts/build_employer_firm_floors.py @@ -0,0 +1,456 @@ +"""Build DRAFT aggregate-side noise floors for gates E1/E2/E6/E7/E11 +(workstream B, issue #192). + +REPORTED ANCHOR, NOT A GATE RUN — and explicitly a DRAFT: C3 (the +employer gate block) has not locked, no thresholds are proposed here, +and nothing below is ratified. This is the firm-side counterpart to +the workstream-A floor battery (#212): it commits the floor-building +method for the aggregate-reference gates before any candidate model +exists (issue #192 protocol: floors -> thresholds -> referee round -> +one-shot runs). + +Unlike the survey-side floors, the references here are published +administrative aggregates, so person-disjoint half-splits are not +available. The floors are instead **temporal-stability floors**: + +* **QWI/J2J (E2/E6/E7/E11 proxies):** for every published firm-size x + sector cell, the year-over-year same-quarter absolute log ratio of + each rate/level, 2015Q1 on. Same-quarter comparison absorbs + seasonality (the extracts are not seasonally adjusted). The + variation deliberately **includes true business-cycle signal** — + most visibly the 2020-2021 pandemic years — so each floor is + reported both on all pairs and excluding pairs touching 2020/2021, + with both on the record rather than one adjusted away. +* **SUSB (E1):** the committed extract is a single 2022 cross-section + with no temporal replicate, so a same-source stability floor is + degenerate. E1 instead carries (a) the published SUSB noise flags + (G/H/J), converted to the flag-implied relative-sd upper bound per + cell, and (b) a BDS 2012-2022 year-over-year stability floor for + the national firm-size *margin* (BDS has no sector axis; the + sector-axis stability is not derivable from committed extracts — + recorded as a method finding, not patched). + +All band semantics come from +:mod:`populace_dynamics.firms.banding` — bands are never re-derived +here. Cells whose minimum denominator over the window is below +``THIN_JOBS`` (a draft choice, recorded) are flagged thin; national +cells are all thick in practice, and the flag is carried so the +state-level C3 cells inherit the convention. + +Usage:: + + python scripts/build_employer_firm_floors.py + +writes ``runs/employer_firm_floors_draft_v0.json``. +""" + +from __future__ import annotations + +import json +import math +import sys +from pathlib import Path + +import numpy as np +import pandas as pd + +sys.path.insert(0, str(Path(__file__).resolve().parents[1] / "src")) + +from populace_dynamics.firms import banding, targets # noqa: E402 + +ARTIFACT = Path(__file__).resolve().parents[1] / ( + "runs/employer_firm_floors_draft_v0.json" +) + +#: Pandemic years: YoY pairs touching these are reported separately +#: (never dropped from the full-sample figures). +PANDEMIC_YEARS = frozenset({2020, 2021}) + +#: Draft thin-cell threshold on the minimum cell denominator (jobs). +THIN_JOBS = 10_000 + +#: BDS stability window (recent decade ending at the extract's last +#: year); the full 1978-2022 series is in the committed extract if +#: the referee round prefers a different window. +BDS_WINDOW = (2012, 2022) + +#: SUSB employment noise flags -> published relative-sd upper bound. +#: G: CV < 2%; H: 2-5%; J: >= 5% (no upper bound published -> null). +SUSB_FLAG_CV_BOUND = {"G": 0.02, "H": 0.05, "J": None} +SUSB_FLAG_SEVERITY = {"G": 0, "H": 1, "J": 2} + +#: BDS fsize categories grouped to the coarsest partition that the +#: canonical bands can express without splitting a source category. +#: "20 to 99" straddles the canonical 50 edge (see banding) and is +#: carried as its own inexact group rather than allocated. +BDS_GROUPS: dict[str, tuple[str, ...]] = { + "1_9": ("a) 1 to 4", "b) 5 to 9"), + "10_19": ("c) 10 to 19",), + "20_99": ("d) 20 to 99",), + "100_499": ("e) 100 to 499",), + "500_plus": ( + "f) 500 to 999", + "g) 1000 to 2499", + "h) 2500 to 4999", + "i) 5000 to 9999", + "j) 10000+", + ), +} + + +def _round(x: float | None, nd: int = 5) -> float | None: + return None if x is None else round(float(x), nd) + + +def _span_record(span: banding.BandSpan) -> dict: + return { + "canonical_bands": [b.name for b in span.bands], + "exact": span.exact, + } + + +def _gap_summary(gaps: list[tuple[int, float]]) -> dict: + """Mean/sd of |log YoY ratio|, full and excluding pandemic pairs. + + ``gaps`` holds (later_year, gap); a pair touches the pandemic if + either the later year or the year before it is in PANDEMIC_YEARS. + """ + full = [g for _, g in gaps] + ex = [ + g + for y, g in gaps + if y not in PANDEMIC_YEARS and (y - 1) not in PANDEMIC_YEARS + ] + out = { + "floor_abs_log_ratio_mean": _round(np.mean(full)) if full else None, + "floor_abs_log_ratio_sd": _round(np.std(full)) if full else None, + "n_pairs": len(full), + "ex_pandemic_mean": _round(np.mean(ex)) if ex else None, + "ex_pandemic_sd": _round(np.std(ex)) if ex else None, + "n_pairs_ex_pandemic": len(ex), + } + return out + + +def _yoy_gaps(cell: pd.DataFrame, col: str) -> list[tuple[int, float]]: + """Same-quarter year-over-year |log ratio| pairs for one cell.""" + s = cell.set_index(["year", "quarter"])[col] + gaps = [] + for (year, quarter), value in s.items(): + prev = s.get((year - 1, quarter)) + if prev is None or pd.isna(prev) or pd.isna(value): + continue + if prev <= 0 or value <= 0: + continue + gaps.append((int(year), abs(math.log(value / prev)))) + return gaps + + +def _lehd_cell_block( + frame: pd.DataFrame, + rate_cols: dict[str, str], + denom_col: str, +) -> tuple[dict, dict]: + """Per-firm-size detail at the all-industry margin + a cross-cell + summary over every sector x firm-size cell. + + ``rate_cols`` maps output name -> frame column. + """ + detail: dict = {} + margin = frame[frame["industry"] == "00"] + for code, cell in margin.groupby("firmsize"): + label = cell["firmsize_label"].iloc[0] + span = banding.lehd_firmsize_to_canonical(int(code)) + min_denom = int(cell[denom_col].min()) + rec: dict = { + "firmsize_label": label, + **_span_record(span), + "min_denominator_jobs": min_denom, + "thin": min_denom < THIN_JOBS, + } + for name, col in rate_cols.items(): + rec[name] = { + "level_mean": _round(cell[col].mean()), + **_gap_summary(_yoy_gaps(cell, col)), + } + detail[f"firmsize{int(code)}"] = rec + + sector_cells = frame[frame["industry"] != "00"] + summary: dict = { + "n_cells": int(sector_cells.groupby(["industry", "firmsize"]).ngroups), + } + for name, col in rate_cols.items(): + means = [] + n_thin = 0 + for _, cell in sector_cells.groupby(["industry", "firmsize"]): + gaps = _yoy_gaps(cell, col) + if not gaps: + continue + means.append(float(np.mean([g for _, g in gaps]))) + if int(cell[denom_col].min()) < THIN_JOBS: + n_thin += 1 + summary[name] = { + "cell_floor_median": _round(np.median(means)), + "cell_floor_p90": _round(np.quantile(means, 0.9)), + "cell_floor_max": _round(np.max(means)), + "n_cells_with_pairs": len(means), + "n_thin_cells": n_thin, + } + return detail, summary + + +# --------------------------------------------------------------------- +# E1 — SUSB employment share by firm-size band x sector +# --------------------------------------------------------------------- + + +def e1_block() -> dict: + susb = targets.load_susb_sector_size() + detail = susb[ + (susb["naics_sector"] != "--") + & (~susb["entrsize_code"].isin(banding.SUSB_SUBTOTAL_CODES)) + & (susb["entrsize_code"] != "01") + ].copy() + detail["band"] = detail["entrsize_code"].map( + lambda c: banding.susb_entrsize_to_canonical(c).band.name + ) + by_sector: dict = {} + for sector, grp in detail.groupby("naics_sector"): + total = grp["employment"].sum() + bands: dict = {} + for band, cell in grp.groupby("band"): + worst = max( + cell["employment_noise_flag"], + key=lambda f: SUSB_FLAG_SEVERITY[f], + ) + bands[band] = { + "employment": int(cell["employment"].sum()), + "share": _round(cell["employment"].sum() / total), + "noise_flag_worst": worst, + "cv_upper_bound": SUSB_FLAG_CV_BOUND[worst], + } + by_sector[sector] = bands + + bds = targets.load_bds_firm_size() + lo, hi = BDS_WINDOW + bds = bds[(bds["year"] >= lo - 1) & (bds["year"] <= hi)] + group_of = { + label: group + for group, labels in BDS_GROUPS.items() + for label in labels + } + bds = bds.assign(group=bds["fsize"].map(group_of)) + emp = bds.groupby(["year", "group"])["emp"].sum().unstack() + shares = emp.div(emp.sum(axis=1), axis=0) + bds_margin: dict = {} + for group, labels in BDS_GROUPS.items(): + spans = [banding.bds_fsize_to_canonical(lb) for lb in labels] + union = tuple(dict.fromkeys(b for span in spans for b in span.bands)) + gaps = [ + (int(year), abs(math.log(shares.loc[year, group] / prev))) + for year, prev in zip( + shares.index[1:], shares[group].to_numpy()[:-1] + ) + ] + bds_margin[group] = { + "bds_fsize_categories": list(labels), + "canonical_bands": [b.name for b in union], + "exact": len(union) == 1, + "share_2022": _round(shares.loc[hi, group]), + **_gap_summary(gaps), + } + return { + "susb_2022_share_by_sector_band": by_sector, + "bds_size_margin_yoy_stability": { + "window": list(BDS_WINDOW), + "groups": bds_margin, + }, + } + + +# --------------------------------------------------------------------- +# QWI (E6/E7) and J2J (E2 proxy, E11 margins) +# --------------------------------------------------------------------- + + +def e6_e7_block() -> dict: + qwi = targets.load_qwi_firmsize_sector() + detail, summary = _lehd_cell_block( + qwi, + { + "e6_hire_rate": "hire_rate", + "e6_separation_rate": "separation_rate", + "e7_earns_mean": "EarnS", + }, + "EmpTotal", + ) + # EarnS is nominal: its raw YoY variation embeds aggregate nominal + # wage growth (a trend, not sampling noise). Record the + # aggregate-relative variant alongside, both on the record. + margin = qwi[qwi["industry"] == "00"].copy() + agg = ( + margin.assign(w=margin["EarnS"] * margin["EmpS"]) + .groupby(["year", "quarter"]) + .agg(w=("w", "sum"), emps=("EmpS", "sum")) + ) + agg_earns = (agg["w"] / agg["emps"]).rename("agg_earns").reset_index() + rel = margin.merge(agg_earns, on=["year", "quarter"]) + rel["earns_rel"] = rel["EarnS"] / rel["agg_earns"] + for code, cell in rel.groupby("firmsize"): + detail[f"firmsize{int(code)}"]["e7_earns_rel_to_aggregate"] = ( + _gap_summary(_yoy_gaps(cell, "earns_rel")) + ) + return {"by_firmsize_all_industry": detail, "sector_cells": summary} + + +def e2_e11_block() -> tuple[dict, dict]: + j2j = targets.load_j2j_firmsize_sector() + j2j = j2j.copy() + base = j2j["MainB"].where(j2j["MainB"] > 0) + j2j["main_hire_rate"] = j2j["MHire"] / base + j2j["main_separation_rate"] = j2j["MSep"] / base + j2j["ee_hire_rate"] = j2j["EEHire"] / base + j2j["ee_separation_rate"] = j2j["EESep"] / base + detail, summary = _lehd_cell_block( + j2j, + { + "hire_rate": "main_hire_rate", + "separation_rate": "main_separation_rate", + "j2j_hire_rate": "j2j_hire_rate", + "j2j_separation_rate": "j2j_separation_rate", + "ee_hire_rate": "ee_hire_rate", + "ee_separation_rate": "ee_separation_rate", + }, + "MainB", + ) + e2 = {"by_firmsize_all_industry": detail, "sector_cells": summary} + e11 = { + "status": "floor not derivable from committed extracts", + "margin_proxy": ( + "the ee_hire_rate / ee_separation_rate floors in the E2 " + "block are the destination- and origin-size margins of " + "the E11 origin x destination matrix" + ), + } + return e2, e11 + + +def build() -> dict: + e2, e11 = e2_e11_block() + return { + "artifact": "employer_firm_floors", + "version": "draft_v0", + "status": "DRAFT - NOT RATIFIED; C3 not locked; no thresholds", + "issue": "192", + "workstream": "B", + "sources": { + "susb": "data/external/susb_us_sector_size_2022.csv", + "bds": "data/external/bds_us_firm_size_1978_2022.csv", + "qwi": "data/external/qwi_us_firmsize_sector_2015on.csv", + "j2j": "data/external/j2j_us_firmsize_sector_2015on.csv", + "provenance": ("data/external/employer_firm_target_sources.md"), + }, + "method": ( + "temporal-stability floors on published administrative " + "aggregates: year-over-year same-quarter |log ratio| per " + "cell (QWI/J2J, 2015Q1 on; same-quarter comparison " + "absorbs seasonality in the not-seasonally-adjusted " + "extracts), year-over-year |log share ratio| for the BDS " + "size margin (2012-2022), and published noise-flag CV " + "bounds for the single-vintage SUSB table; banding via " + "populace_dynamics.firms.banding only; thin flag at " + f"minimum cell denominator < {THIN_JOBS} jobs (draft " + "choice)" + ), + "unit_rules": [ + "QWI/J2J cells count jobs, not persons (ADR 0003): the " + "job-to-person adjustment (~ multiple-jobholding rate, " + "~5%) is a pre-registered C3 item", + "QWI EarnS is MEAN monthly earnings of full-quarter " + "employees; QWI never publishes medians; E7 is stated on " + "means", + "J2J extract ownership is oslp (state/local + private) " + "while QWI is private-only (op) and SUSB excludes " + "government; NAICS 92 is dropped from the J2J extract " + "but state/local employment embedded in other sectors " + "(esp. 61, 62) remains — E2/E11 cells must restate on a " + "private-comparable basis or carry this scope caveat " + "(locks with C3)", + ], + "method_findings": { + "e1_no_sector_replicate": ( + "the committed SUSB extract is a single 2022 " + "cross-section: a same-source temporal or resampling " + "floor on the size x sector cells is degenerate. The " + "E1 floor is therefore composed of the published " + "SUSB noise-flag CV bounds per cell plus a BDS " + "year-over-year stability floor that exists only for " + "the national size margin — the sector axis has no " + "stability floor derivable from committed extracts" + ), + "e1_bds_straddle": ( + "the BDS '20 to 99' category straddles the canonical " + "50 edge (banding.bds_fsize_to_canonical is inexact " + "there), so the BDS margin floor is stated on a " + "coarsened partition (20_99 kept whole), not on the " + "five canonical bands" + ), + "e2_no_age_sex_axis": ( + "E2 is registered by age x sex, but the committed " + "J2J extract is the demographic-free 'd' tabulation " + "(and the QWI extract is the all-sex all-age " + "margin), matching the ADR 0003 partition rule that " + "reserves the sex/age axes for gate cells. The " + "floors here are aggregate-side (firm-size x sector) " + "stability references only; the age x sex floor " + "needs a J2J 'se' tabulation extract and is deferred " + "to that extract's commit, before C3 locks" + ), + "e11_no_od_extract": ( + "E11's origin x destination firm-size flow reference " + "(J2JOD) is not committed (provenance note: 'a " + "later, separate extract'), so no E11 floor is " + "derivable; the EE hire/separation margins of the " + "committed extract are recorded as partial proxies" + ), + "e12_deferred": ( + "E12 (AKM moments) has no committed extract: AKM " + "variance decompositions require linked " + "employer-employee microdata, and the published " + "decompositions are research outputs rather than a " + "recurring aggregate release. No floor is buildable; " + "E12 is recorded as deferred pending a committed, " + "provenance-pinned reference extract, and must not " + "lock with C3 without one" + ), + "cycle_signal_in_floors": ( + "temporal-stability floors on published aggregates " + "include true business-cycle variation (2020-2021 " + "most visibly) as well as source noise; both the " + "full-sample and ex-pandemic figures are committed " + "rather than choosing one — the C3 referee round " + "picks the formulation with both on the record" + ), + "e7_nominal_trend": ( + "raw EarnS YoY variation embeds aggregate nominal " + "wage growth (a trend, not noise); the " + "aggregate-relative EarnS floor is committed " + "alongside the raw one, both on the record" + ), + }, + "e1": e1_block(), + "e2": e2, + "e6_e7": e6_e7_block(), + "e11": e11, + "e12": {"status": "deferred - no committed extract"}, + } + + +def main() -> None: + artifact = build() + ARTIFACT.write_text(json.dumps(artifact, indent=2) + "\n") + print(f"wrote {ARTIFACT}") + + +if __name__ == "__main__": + main() diff --git a/tests/test_employer_firm_floors.py b/tests/test_employer_firm_floors.py new file mode 100644 index 00000000..0bf2779b --- /dev/null +++ b/tests/test_employer_firm_floors.py @@ -0,0 +1,144 @@ +"""Pin the DRAFT employer-firm aggregate noise-floor artifact (#192). + +``runs/employer_firm_floors_draft_v0.json`` is a reported anchor +(workstream B counterpart to the #212 battery): DRAFT, NOT RATIFIED, +no thresholds — it commits the floor-building method for the E1/E2/ +E6/E7/E11 aggregate references, and the E11/E12 deferral findings, +before C3 locks. These tests pin its internal consistency and — since +the source extracts are committed — always reproduce it in full. +""" + +from __future__ import annotations + +import json +import sys +from pathlib import Path + +import pytest + +from populace_dynamics.firms import banding + +ARTIFACT = Path(__file__).resolve().parents[1] / ( + "runs/employer_firm_floors_draft_v0.json" +) + +CANONICAL_NAMES = {band.name for band in banding.CANONICAL_BANDS} + + +@pytest.fixture(scope="module") +def artifact() -> dict: + return json.loads(ARTIFACT.read_text()) + + +def test_artifact_is_a_draft_with_no_thresholds(artifact): + assert artifact["artifact"] == "employer_firm_floors" + assert artifact["version"] == "draft_v0" + assert "DRAFT" in artifact["status"] + assert "NOT RATIFIED" in artifact["status"] + + def keys_of(node): + if isinstance(node, dict): + for key, value in node.items(): + yield key + yield from keys_of(value) + elif isinstance(node, list): + for value in node: + yield from keys_of(value) + + assert not any("threshold" in key.lower() for key in keys_of(artifact)) + + +def test_unit_rules_are_carried(artifact): + rules = " ".join(artifact["unit_rules"]) + assert "jobs, not persons" in rules + assert "MEAN monthly earnings" in rules + assert "oslp" in rules + + +def test_e1_susb_cells(artifact): + by_sector = artifact["e1"]["susb_2022_share_by_sector_band"] + assert len(by_sector) == 20 # 19 NAICS sectors + 99 unclassified + for sector, bands in by_sector.items(): + assert set(bands) <= CANONICAL_NAMES + total = sum(cell["share"] for cell in bands.values()) + assert total == pytest.approx(1.0, abs=1e-3) + for cell in bands.values(): + assert cell["noise_flag_worst"] in {"G", "H", "J"} + if cell["noise_flag_worst"] == "J": + assert cell["cv_upper_bound"] is None + else: + assert 0 < cell["cv_upper_bound"] <= 0.05 + + +def test_e1_bds_margin_carries_the_straddle(artifact): + groups = artifact["e1"]["bds_size_margin_yoy_stability"]["groups"] + assert set(groups) == {"1_9", "10_19", "20_99", "100_499", "500_plus"} + straddle = groups["20_99"] + assert straddle["exact"] is False + assert set(straddle["canonical_bands"]) == {"B10_49", "B50_99"} + shares = [g["share_2022"] for g in groups.values()] + assert sum(shares) == pytest.approx(1.0, abs=1e-3) + for group in groups.values(): + assert group["floor_abs_log_ratio_mean"] > 0 + assert group["n_pairs_ex_pandemic"] < group["n_pairs"] + + +def test_lehd_blocks_shape(artifact): + for block, rates in ( + ( + artifact["e6_e7"], + ("e6_hire_rate", "e6_separation_rate", "e7_earns_mean"), + ), + ( + artifact["e2"], + ("hire_rate", "j2j_hire_rate", "ee_separation_rate"), + ), + ): + detail = block["by_firmsize_all_industry"] + assert set(detail) == {f"firmsize{i}" for i in range(1, 6)} + for cell in detail.values(): + assert set(cell["canonical_bands"]) <= CANONICAL_NAMES + assert cell["thin"] is False + for rate in rates: + floor = cell[rate] + assert floor["floor_abs_log_ratio_mean"] > 0 + assert floor["n_pairs_ex_pandemic"] < floor["n_pairs"] + summary = block["sector_cells"] + assert summary["n_cells"] == 95 # 19 sectors x 5 sizes + for rate in rates: + assert ( + summary[rate]["cell_floor_median"] + <= summary[rate]["cell_floor_p90"] + <= summary[rate]["cell_floor_max"] + ) + + +def test_e7_relative_floor_is_tighter_than_nominal(artifact): + # The aggregate-relative EarnS floor strips the shared nominal + # wage trend, so it must come in below the raw nominal floor. + for cell in artifact["e6_e7"]["by_firmsize_all_industry"].values(): + raw = cell["e7_earns_mean"]["floor_abs_log_ratio_mean"] + rel = cell["e7_earns_rel_to_aggregate"]["floor_abs_log_ratio_mean"] + assert rel < raw + + +def test_method_findings_are_recorded(artifact): + findings = artifact["method_findings"] + assert "sector axis has no stability floor" in ( + findings["e1_no_sector_replicate"] + ) + assert "straddles the canonical 50 edge" in findings["e1_bds_straddle"] + assert "demographic-free" in findings["e2_no_age_sex_axis"] + assert "not committed" in findings["e11_no_od_extract"] + assert "must not lock with C3" in findings["e12_deferred"] + assert "business-cycle" in findings["cycle_signal_in_floors"] + assert "nominal wage growth" in findings["e7_nominal_trend"] + assert artifact["e11"]["status"].startswith("floor not derivable") + assert artifact["e12"]["status"].startswith("deferred") + + +def test_reproduces_from_committed_extracts(artifact): + sys.path.insert(0, str(Path(__file__).resolve().parents[1] / "scripts")) + from build_employer_firm_floors import build + + assert json.loads(json.dumps(build())) == artifact From 56ac222ef4330476af59c3c1266ab7f8c08a9b2e Mon Sep 17 00:00:00 2001 From: Vahid Ahmadi Date: Fri, 17 Jul 2026 11:39:16 +0100 Subject: [PATCH 05/17] Fix lint (ruff B905/B007) and reconcile tier counts after master merge - scripts/build_employer_firm_floors.py: add strict=True to zip() - tests/test_employer_firm_floors.py: drop unused loop variable - tests/tier_counts.json: artifact 1020 -> 1028 (this branch's 8 artifact tests) on top of merged master counts Co-Authored-By: Claude Fable 5 --- scripts/build_employer_firm_floors.py | 4 +++- tests/test_employer_firm_floors.py | 2 +- 2 files changed, 4 insertions(+), 2 deletions(-) diff --git a/scripts/build_employer_firm_floors.py b/scripts/build_employer_firm_floors.py index 08d6e589..ada2328a 100644 --- a/scripts/build_employer_firm_floors.py +++ b/scripts/build_employer_firm_floors.py @@ -249,7 +249,9 @@ def e1_block() -> dict: gaps = [ (int(year), abs(math.log(shares.loc[year, group] / prev))) for year, prev in zip( - shares.index[1:], shares[group].to_numpy()[:-1] + shares.index[1:], + shares[group].to_numpy()[:-1], + strict=True, ) ] bds_margin[group] = { diff --git a/tests/test_employer_firm_floors.py b/tests/test_employer_firm_floors.py index 0bf2779b..ab242e96 100644 --- a/tests/test_employer_firm_floors.py +++ b/tests/test_employer_firm_floors.py @@ -58,7 +58,7 @@ def test_unit_rules_are_carried(artifact): def test_e1_susb_cells(artifact): by_sector = artifact["e1"]["susb_2022_share_by_sector_band"] assert len(by_sector) == 20 # 19 NAICS sectors + 99 unclassified - for sector, bands in by_sector.items(): + for bands in by_sector.values(): assert set(bands) <= CANONICAL_NAMES total = sum(cell["share"] for cell in bands.values()) assert total == pytest.approx(1.0, abs=1e-3) From 7002c8f93cb2086f816e387ae48eca8e6055dd15 Mon Sep 17 00:00:00 2001 From: Vahid Ahmadi Date: Thu, 23 Jul 2026 10:58:42 +0100 Subject: [PATCH 06/17] Rebuild as draft_v0.1 on #228: E2 sex x age floor, E11 restated Stacked on #228, whose extracts make both of draft_v0's deferrals obsolete. Supersedes rather than deletes: each stale finding is replaced by one that says what changed. E2 sex x age floor BUILT (the #230 section 12.2 pre-lock item). Full 3 x 9 grid at the all-industry margin, 2015Q1-2025Q1, same |log YoY ratio| machinery as the firm-size axis. Cross-cell summary pools the 2 x 8 non-margin cells only -- the margins aggregate them, so pooling both would double count and pull the median toward the more stable aggregate rows. Carries the naming correction: LEHD's sex x age tabulation is 'sa'; 'se' is sex x EDUCATION, which draft_v0's finding named. E11 restated. Not "no extract committed" -- #228 commits the full 6 x 6 grid. The obstacle is temporal: the national detail is published only for 2015Q1-2016Q1, so same-quarter YoY pairing gives at most ONE pair per detail cell (verified, pinned) -- a gap with no dispersion, hence no mean + k*sd floor on the cross. The destination-size margins run to 2025Q1 and are floored, in raw and aggregate-relative variants: EE margins are counts carrying aggregate flow growth exactly as raw EarnS carries wage growth, and the relative variant lands 5-8x tighter (0.013-0.023 vs 0.105-0.125). Also records the cross-source margin disagreement from #228's provenance correction as a second, independent bound on any E11 margin threshold, since post-2016Q1 constraints are margins-only. Two further findings the build surfaced: - floors are NOT monotone in disaggregation. Of 26 non-aggregate sex x age cells, those with a TIGHTER ex-pandemic floor than the all-sexes all-ages cell number 13 (hire), 10 (separation), 6 (j2j hire), 7 (j2j separation): the 45-99 cells are the most stable and the aggregate carries compositional shift they do not. Procedural consequence -- a floor measured on a margin cannot stand in as a conservative bound for the cells beneath it, so either every gated cell gets its own floor or the threshold policy says which cell's floor governs (C3 open question 1). - release-revision noise recorded and NOT built. LEHD rotated R2026Q1 -> R2026Q2 during the #228 review with J2JOD values unchanged across the rotation, which is one datum on one series over one rotation -- suggestive, not evidence of zero. Building it needs two release-stamped vintages committed. ddof=1 in _gap_summary. n is 8-11 pairs, where the population sd understates by ~5%, and these sds feed a mean + k*sd policy, so understating biases thresholds tight against the model rather than harmlessly; it also matches the A-side across-seed sds the referee round reads alongside. A single-pair cell now yields None rather than 0.0, which would read as a perfect floor. Artifact tier 1101 -> 1116. Co-Authored-By: Claude Opus 4.8 (1M context) --- runs/employer_firm_floors_draft_v0.json | 1579 +++++++++++++++++++++-- scripts/build_employer_firm_floors.py | 290 ++++- tests/test_employer_firm_floors.py | 130 +- tests/tier_counts.json | 2 +- 4 files changed, 1854 insertions(+), 147 deletions(-) diff --git a/runs/employer_firm_floors_draft_v0.json b/runs/employer_firm_floors_draft_v0.json index cb12b9c7..3cafc4e4 100644 --- a/runs/employer_firm_floors_draft_v0.json +++ b/runs/employer_firm_floors_draft_v0.json @@ -1,6 +1,6 @@ { "artifact": "employer_firm_floors", - "version": "draft_v0", + "version": "draft_v0.1", "status": "DRAFT - NOT RATIFIED; C3 not locked; no thresholds", "issue": "192", "workstream": "B", @@ -9,6 +9,8 @@ "bds": "data/external/bds_us_firm_size_1978_2022.csv", "qwi": "data/external/qwi_us_firmsize_sector_2015on.csv", "j2j": "data/external/j2j_us_firmsize_sector_2015on.csv", + "j2j_sexage": "data/external/j2j_us_sexage_2015on.csv", + "j2jod": "data/external/j2jod_us_firmsize_od_2015on.csv", "provenance": "data/external/employer_firm_target_sources.md" }, "method": "temporal-stability floors on published administrative aggregates: year-over-year same-quarter |log ratio| per cell (QWI/J2J, 2015Q1 on; same-quarter comparison absorbs seasonality in the not-seasonally-adjusted extracts), year-over-year |log share ratio| for the BDS size margin (2012-2022), and published noise-flag CV bounds for the single-vintage SUSB table; banding via populace_dynamics.firms.banding only; thin flag at minimum cell denominator < 10000 jobs (draft choice)", @@ -20,10 +22,13 @@ "method_findings": { "e1_no_sector_replicate": "the committed SUSB extract is a single 2022 cross-section: a same-source temporal or resampling floor on the size x sector cells is degenerate. The E1 floor is therefore composed of the published SUSB noise-flag CV bounds per cell plus a BDS year-over-year stability floor that exists only for the national size margin \u2014 the sector axis has no stability floor derivable from committed extracts", "e1_bds_straddle": "the BDS '20 to 99' category straddles the canonical 50 edge (banding.bds_fsize_to_canonical is inexact there), so the BDS margin floor is stated on a coarsened partition (20_99 kept whole), not on the five canonical bands", - "e2_no_age_sex_axis": "E2 is registered by age x sex, but the committed J2J extract is the demographic-free 'd' tabulation (and the QWI extract is the all-sex all-age margin), matching the ADR 0003 partition rule that reserves the sex/age axes for gate cells. The floors here are aggregate-side (firm-size x sector) stability references only; the age x sex floor needs a J2J 'se' tabulation extract and is deferred to that extract's commit, before C3 locks", - "e11_no_od_extract": "E11's origin x destination firm-size flow reference (J2JOD) is not committed (provenance note: 'a later, separate extract'), so no E11 floor is derivable; the EE hire/separation margins of the committed extract are recorded as partial proxies", + "e2_sex_age_axis_built": "SUPERSEDES draft_v0's 'e2_no_age_sex_axis'. E2's registered sex x age axis is now floored from the committed J2J sex x age extract (#228): the full 3 x 9 grid at the all-industry margin, 2015Q1-2025Q1, same |log YoY ratio| machinery as the firm-size axis, reported per cell and pooled over the 2 x 8 non-margin cells. The firm-size x sector floors remain the aggregate-side references they always were; the two E2 axes are now on one footing. Naming correction carried from the earlier draft: LEHD's sex x age tabulation is 'sa'; 'se' is sex x EDUCATION, and the draft_v0 finding named the wrong one", + "e11_extract_committed_but_no_temporal_replicate": "SUPERSEDES draft_v0's 'e11_no_od_extract', which is now factually stale: the origin x destination firm-size cross IS committed (#228, the full 6 x 6 grid). The obstacle is temporal, not availability. The national detail is published only for 2015Q1-2016Q1 (status flag 11 from 2016Q2), so same-quarter year-over-year pairing yields at most ONE pair per detail cell \u2014 a gap with no dispersion, hence no mean + k*sd floor on the cross. The destination-size margins run through 2025Q1 and are floored in the e11 block. A second, independent bound on any margin threshold comes from cross-source disagreement: the LED tool's margins and the LEHD flat file's differ by up to ~3% in either direction (e11.cross_source_margin_disagreement)", + "release_revision_noise_unfloored": "a third floorable concept, recorded and NOT built: vintage-to-vintage revision noise. LEHD revises across releases, and none of the floors here see that \u2014 every extract is a single release (R2026Q1). Observed during the #228 review: LEHD rotated to R2026Q2 mid-round and the J2JOD values for 2015Q1-2025Q1 were unchanged across the rotation (all 1,476 rows), which is one datum, on one series, over one rotation \u2014 suggestive that revision noise is small for these aggregates, not evidence that it is zero. Building it needs two release-stamped vintages of the same series committed; the C3 referee round should decide whether E1/E2/E6/E7/E11 thresholds must carry a revision allowance on top of the temporal floor", "e12_deferred": "E12 (AKM moments) has no committed extract: AKM variance decompositions require linked employer-employee microdata, and the published decompositions are research outputs rather than a recurring aggregate release. No floor is buildable; E12 is recorded as deferred pending a committed, provenance-pinned reference extract, and must not lock with C3 without one", "cycle_signal_in_floors": "temporal-stability floors on published aggregates include true business-cycle variation (2020-2021 most visibly) as well as source noise; both the full-sample and ex-pandemic figures are committed rather than choosing one \u2014 the C3 referee round picks the formulation with both on the record", + "floors_not_monotone_in_disaggregation": "an empirical finding from the sex x age build, and a trap for the threshold policy: the temporal floor is NOT monotone in disaggregation. Of the 26 non-aggregate sex x age cells, the number whose ex-pandemic floor is TIGHTER than the all-sexes all-ages cell is 13 (hire), 10 (separation), 6 (j2j hire), 7 (j2j separation). The pattern is interpretable -- the 45-99 age cells are the most stable and the 19-34 cells the least, while the aggregate carries compositional shift the older cells do not -- but the consequence is procedural: a floor measured on a margin CANNOT be used as a conservative bound for the cells beneath it. Every gated cell needs its own floor, or the threshold policy must say explicitly which cell's floor governs (C3 open question 1)", + "e11_margin_trend": "the E11 destination-size margins are EE flow COUNTS, so their year-over-year variation carries aggregate flow growth (a trend, not noise) exactly as raw EarnS carries nominal wage growth. Both are committed: 'ee' (raw counts) and 'ee_rel' (share of the quarter's all-size EE total, which divides the common trend out). The relative variant runs roughly half the raw one; the C3 referee round picks the formulation, as for E7", "e7_nominal_trend": "raw EarnS YoY variation embeds aggregate nominal wage growth (a trend, not noise); the aggregate-relative EarnS floor is committed alongside the raw one, both on the record" }, "e1": { @@ -668,10 +673,10 @@ "exact": true, "share_2022": 0.10702, "floor_abs_log_ratio_mean": 0.01718, - "floor_abs_log_ratio_sd": 0.01273, + "floor_abs_log_ratio_sd": 0.01336, "n_pairs": 11, "ex_pandemic_mean": 0.01482, - "ex_pandemic_sd": 0.00478, + "ex_pandemic_sd": 0.00511, "n_pairs_ex_pandemic": 8 }, "10_19": { @@ -684,10 +689,10 @@ "exact": true, "share_2022": 0.0666, "floor_abs_log_ratio_mean": 0.01131, - "floor_abs_log_ratio_sd": 0.00515, + "floor_abs_log_ratio_sd": 0.0054, "n_pairs": 11, "ex_pandemic_mean": 0.00915, - "ex_pandemic_sd": 0.00387, + "ex_pandemic_sd": 0.00414, "n_pairs_ex_pandemic": 8 }, "20_99": { @@ -701,10 +706,10 @@ "exact": false, "share_2022": 0.16113, "floor_abs_log_ratio_mean": 0.00816, - "floor_abs_log_ratio_sd": 0.0082, + "floor_abs_log_ratio_sd": 0.0086, "n_pairs": 11, "ex_pandemic_mean": 0.00404, - "ex_pandemic_sd": 0.00307, + "ex_pandemic_sd": 0.00329, "n_pairs_ex_pandemic": 8 }, "100_499": { @@ -717,10 +722,10 @@ "exact": true, "share_2022": 0.13528, "floor_abs_log_ratio_mean": 0.00563, - "floor_abs_log_ratio_sd": 0.0072, + "floor_abs_log_ratio_sd": 0.00755, "n_pairs": 11, "ex_pandemic_mean": 0.0039, - "ex_pandemic_sd": 0.00257, + "ex_pandemic_sd": 0.00275, "n_pairs_ex_pandemic": 8 }, "500_plus": { @@ -737,10 +742,10 @@ "exact": true, "share_2022": 0.52997, "floor_abs_log_ratio_mean": 0.00516, - "floor_abs_log_ratio_sd": 0.00221, + "floor_abs_log_ratio_sd": 0.00231, "n_pairs": 11, "ex_pandemic_mean": 0.0048, - "ex_pandemic_sd": 0.00173, + "ex_pandemic_sd": 0.00185, "n_pairs_ex_pandemic": 8 } } @@ -760,55 +765,55 @@ "hire_rate": { "level_mean": 0.13835, "floor_abs_log_ratio_mean": 0.0565, - "floor_abs_log_ratio_sd": 0.05489, + "floor_abs_log_ratio_sd": 0.05567, "n_pairs": 36, "ex_pandemic_mean": 0.02729, - "ex_pandemic_sd": 0.02112, + "ex_pandemic_sd": 0.02157, "n_pairs_ex_pandemic": 24 }, "separation_rate": { "level_mean": 0.12446, "floor_abs_log_ratio_mean": 0.05609, - "floor_abs_log_ratio_sd": 0.12156, + "floor_abs_log_ratio_sd": 0.12328, "n_pairs": 36, "ex_pandemic_mean": 0.01837, - "ex_pandemic_sd": 0.0163, + "ex_pandemic_sd": 0.01665, "n_pairs_ex_pandemic": 24 }, "j2j_hire_rate": { "level_mean": 0.05473, "floor_abs_log_ratio_mean": 0.06146, - "floor_abs_log_ratio_sd": 0.06921, + "floor_abs_log_ratio_sd": 0.0702, "n_pairs": 36, "ex_pandemic_mean": 0.03739, - "ex_pandemic_sd": 0.02957, + "ex_pandemic_sd": 0.03021, "n_pairs_ex_pandemic": 24 }, "j2j_separation_rate": { "level_mean": 0.05247, "floor_abs_log_ratio_mean": 0.08393, - "floor_abs_log_ratio_sd": 0.10103, + "floor_abs_log_ratio_sd": 0.10246, "n_pairs": 36, "ex_pandemic_mean": 0.04322, - "ex_pandemic_sd": 0.03838, + "ex_pandemic_sd": 0.03921, "n_pairs_ex_pandemic": 24 }, "ee_hire_rate": { "level_mean": 0.03678, "floor_abs_log_ratio_mean": 0.08076, - "floor_abs_log_ratio_sd": 0.10865, + "floor_abs_log_ratio_sd": 0.11019, "n_pairs": 36, "ex_pandemic_mean": 0.04296, - "ex_pandemic_sd": 0.03382, + "ex_pandemic_sd": 0.03455, "n_pairs_ex_pandemic": 24 }, "ee_separation_rate": { "level_mean": 0.03435, "floor_abs_log_ratio_mean": 0.10011, - "floor_abs_log_ratio_sd": 0.13275, + "floor_abs_log_ratio_sd": 0.13464, "n_pairs": 36, "ex_pandemic_mean": 0.04862, - "ex_pandemic_sd": 0.04025, + "ex_pandemic_sd": 0.04112, "n_pairs_ex_pandemic": 24 } }, @@ -823,55 +828,55 @@ "hire_rate": { "level_mean": 0.13301, "floor_abs_log_ratio_mean": 0.07117, - "floor_abs_log_ratio_sd": 0.08895, + "floor_abs_log_ratio_sd": 0.09021, "n_pairs": 36, "ex_pandemic_mean": 0.03415, - "ex_pandemic_sd": 0.02702, + "ex_pandemic_sd": 0.0276, "n_pairs_ex_pandemic": 24 }, "separation_rate": { "level_mean": 0.12795, "floor_abs_log_ratio_mean": 0.05895, - "floor_abs_log_ratio_sd": 0.10808, + "floor_abs_log_ratio_sd": 0.10961, "n_pairs": 36, "ex_pandemic_mean": 0.02151, - "ex_pandemic_sd": 0.01687, + "ex_pandemic_sd": 0.01723, "n_pairs_ex_pandemic": 24 }, "j2j_hire_rate": { "level_mean": 0.06192, "floor_abs_log_ratio_mean": 0.07963, - "floor_abs_log_ratio_sd": 0.09966, + "floor_abs_log_ratio_sd": 0.10108, "n_pairs": 36, "ex_pandemic_mean": 0.04356, - "ex_pandemic_sd": 0.03343, + "ex_pandemic_sd": 0.03415, "n_pairs_ex_pandemic": 24 }, "j2j_separation_rate": { "level_mean": 0.06427, "floor_abs_log_ratio_mean": 0.08386, - "floor_abs_log_ratio_sd": 0.10128, + "floor_abs_log_ratio_sd": 0.10272, "n_pairs": 36, "ex_pandemic_mean": 0.04362, - "ex_pandemic_sd": 0.03457, + "ex_pandemic_sd": 0.03531, "n_pairs_ex_pandemic": 24 }, "ee_hire_rate": { "level_mean": 0.04311, "floor_abs_log_ratio_mean": 0.09836, - "floor_abs_log_ratio_sd": 0.13606, + "floor_abs_log_ratio_sd": 0.13799, "n_pairs": 36, "ex_pandemic_mean": 0.0497, - "ex_pandemic_sd": 0.03865, + "ex_pandemic_sd": 0.03948, "n_pairs_ex_pandemic": 24 }, "ee_separation_rate": { "level_mean": 0.0439, "floor_abs_log_ratio_mean": 0.10179, - "floor_abs_log_ratio_sd": 0.13695, + "floor_abs_log_ratio_sd": 0.1389, "n_pairs": 36, "ex_pandemic_mean": 0.05047, - "ex_pandemic_sd": 0.03739, + "ex_pandemic_sd": 0.03819, "n_pairs_ex_pandemic": 24 } }, @@ -887,55 +892,55 @@ "hire_rate": { "level_mean": 0.12559, "floor_abs_log_ratio_mean": 0.07152, - "floor_abs_log_ratio_sd": 0.09951, + "floor_abs_log_ratio_sd": 0.10092, "n_pairs": 36, "ex_pandemic_mean": 0.03417, - "ex_pandemic_sd": 0.02504, + "ex_pandemic_sd": 0.02558, "n_pairs_ex_pandemic": 24 }, "separation_rate": { "level_mean": 0.12039, "floor_abs_log_ratio_mean": 0.05035, - "floor_abs_log_ratio_sd": 0.08382, + "floor_abs_log_ratio_sd": 0.08501, "n_pairs": 36, "ex_pandemic_mean": 0.02188, - "ex_pandemic_sd": 0.01587, + "ex_pandemic_sd": 0.01621, "n_pairs_ex_pandemic": 24 }, "j2j_hire_rate": { "level_mean": 0.06398, "floor_abs_log_ratio_mean": 0.08444, - "floor_abs_log_ratio_sd": 0.10715, + "floor_abs_log_ratio_sd": 0.10867, "n_pairs": 36, "ex_pandemic_mean": 0.04298, - "ex_pandemic_sd": 0.03239, + "ex_pandemic_sd": 0.03308, "n_pairs_ex_pandemic": 24 }, "j2j_separation_rate": { "level_mean": 0.06447, "floor_abs_log_ratio_mean": 0.07991, - "floor_abs_log_ratio_sd": 0.09529, + "floor_abs_log_ratio_sd": 0.09664, "n_pairs": 36, "ex_pandemic_mean": 0.0423, - "ex_pandemic_sd": 0.03314, + "ex_pandemic_sd": 0.03385, "n_pairs_ex_pandemic": 24 }, "ee_hire_rate": { "level_mean": 0.04519, "floor_abs_log_ratio_mean": 0.10125, - "floor_abs_log_ratio_sd": 0.13965, + "floor_abs_log_ratio_sd": 0.14163, "n_pairs": 36, "ex_pandemic_mean": 0.05036, - "ex_pandemic_sd": 0.03991, + "ex_pandemic_sd": 0.04076, "n_pairs_ex_pandemic": 24 }, "ee_separation_rate": { "level_mean": 0.04492, "floor_abs_log_ratio_mean": 0.09829, - "floor_abs_log_ratio_sd": 0.12995, + "floor_abs_log_ratio_sd": 0.13179, "n_pairs": 36, "ex_pandemic_mean": 0.04958, - "ex_pandemic_sd": 0.03811, + "ex_pandemic_sd": 0.03893, "n_pairs_ex_pandemic": 24 } }, @@ -950,55 +955,55 @@ "hire_rate": { "level_mean": 0.12129, "floor_abs_log_ratio_mean": 0.07696, - "floor_abs_log_ratio_sd": 0.10562, + "floor_abs_log_ratio_sd": 0.10712, "n_pairs": 36, "ex_pandemic_mean": 0.04226, - "ex_pandemic_sd": 0.03483, + "ex_pandemic_sd": 0.03558, "n_pairs_ex_pandemic": 24 }, "separation_rate": { "level_mean": 0.11677, "floor_abs_log_ratio_mean": 0.05004, - "floor_abs_log_ratio_sd": 0.06586, + "floor_abs_log_ratio_sd": 0.06679, "n_pairs": 36, "ex_pandemic_mean": 0.02763, - "ex_pandemic_sd": 0.02303, + "ex_pandemic_sd": 0.02353, "n_pairs_ex_pandemic": 24 }, "j2j_hire_rate": { "level_mean": 0.06345, "floor_abs_log_ratio_mean": 0.09662, - "floor_abs_log_ratio_sd": 0.11378, + "floor_abs_log_ratio_sd": 0.1154, "n_pairs": 36, "ex_pandemic_mean": 0.05223, - "ex_pandemic_sd": 0.04343, + "ex_pandemic_sd": 0.04437, "n_pairs_ex_pandemic": 24 }, "j2j_separation_rate": { "level_mean": 0.06428, "floor_abs_log_ratio_mean": 0.08368, - "floor_abs_log_ratio_sd": 0.09182, + "floor_abs_log_ratio_sd": 0.09313, "n_pairs": 36, "ex_pandemic_mean": 0.04842, - "ex_pandemic_sd": 0.04214, + "ex_pandemic_sd": 0.04304, "n_pairs_ex_pandemic": 24 }, "ee_hire_rate": { "level_mean": 0.04467, "floor_abs_log_ratio_mean": 0.11341, - "floor_abs_log_ratio_sd": 0.14429, + "floor_abs_log_ratio_sd": 0.14634, "n_pairs": 36, "ex_pandemic_mean": 0.06109, - "ex_pandemic_sd": 0.04938, + "ex_pandemic_sd": 0.05044, "n_pairs_ex_pandemic": 24 }, "ee_separation_rate": { "level_mean": 0.04511, "floor_abs_log_ratio_mean": 0.10241, - "floor_abs_log_ratio_sd": 0.12325, + "floor_abs_log_ratio_sd": 0.125, "n_pairs": 36, "ex_pandemic_mean": 0.05741, - "ex_pandemic_sd": 0.04738, + "ex_pandemic_sd": 0.0484, "n_pairs_ex_pandemic": 24 } }, @@ -1013,55 +1018,55 @@ "hire_rate": { "level_mean": 0.11101, "floor_abs_log_ratio_mean": 0.07952, - "floor_abs_log_ratio_sd": 0.09847, + "floor_abs_log_ratio_sd": 0.09987, "n_pairs": 36, "ex_pandemic_mean": 0.04312, - "ex_pandemic_sd": 0.04574, + "ex_pandemic_sd": 0.04673, "n_pairs_ex_pandemic": 24 }, "separation_rate": { "level_mean": 0.1067, "floor_abs_log_ratio_mean": 0.05405, - "floor_abs_log_ratio_sd": 0.05654, + "floor_abs_log_ratio_sd": 0.05735, "n_pairs": 36, "ex_pandemic_mean": 0.03493, - "ex_pandemic_sd": 0.03214, + "ex_pandemic_sd": 0.03283, "n_pairs_ex_pandemic": 24 }, "j2j_hire_rate": { "level_mean": 0.0593, "floor_abs_log_ratio_mean": 0.09724, - "floor_abs_log_ratio_sd": 0.10838, + "floor_abs_log_ratio_sd": 0.10992, "n_pairs": 36, "ex_pandemic_mean": 0.05534, - "ex_pandemic_sd": 0.05552, + "ex_pandemic_sd": 0.05671, "n_pairs_ex_pandemic": 24 }, "j2j_separation_rate": { "level_mean": 0.06032, "floor_abs_log_ratio_mean": 0.09256, - "floor_abs_log_ratio_sd": 0.10857, + "floor_abs_log_ratio_sd": 0.11011, "n_pairs": 36, "ex_pandemic_mean": 0.05281, - "ex_pandemic_sd": 0.05306, + "ex_pandemic_sd": 0.0542, "n_pairs_ex_pandemic": 24 }, "ee_hire_rate": { "level_mean": 0.04125, "floor_abs_log_ratio_mean": 0.11389, - "floor_abs_log_ratio_sd": 0.14034, + "floor_abs_log_ratio_sd": 0.14234, "n_pairs": 36, "ex_pandemic_mean": 0.06284, - "ex_pandemic_sd": 0.06335, + "ex_pandemic_sd": 0.06471, "n_pairs_ex_pandemic": 24 }, "ee_separation_rate": { "level_mean": 0.04255, "floor_abs_log_ratio_mean": 0.10903, - "floor_abs_log_ratio_sd": 0.14068, + "floor_abs_log_ratio_sd": 0.14268, "n_pairs": 36, "ex_pandemic_mean": 0.06003, - "ex_pandemic_sd": 0.0583, + "ex_pandemic_sd": 0.05956, "n_pairs_ex_pandemic": 24 } } @@ -1110,6 +1115,1230 @@ "n_cells_with_pairs": 95, "n_thin_cells": 0 } + }, + "by_sex_age": { + "cells": { + "sex0_A00": { + "sex": 0, + "sex_label": "All Sexes", + "agegrp": "A00", + "agegrp_label": "All Ages (14-99)", + "min_denominator_jobs": 124416927, + "thin": false, + "hire_rate": { + "level_mean": 0.11138, + "floor_abs_log_ratio_mean": 0.06924, + "floor_abs_log_ratio_sd": 0.08584, + "n_pairs": 37, + "ex_pandemic_mean": 0.03781, + "ex_pandemic_sd": 0.03295, + "n_pairs_ex_pandemic": 25 + }, + "separation_rate": { + "level_mean": 0.10588, + "floor_abs_log_ratio_mean": 0.053, + "floor_abs_log_ratio_sd": 0.07945, + "n_pairs": 37, + "ex_pandemic_mean": 0.0272, + "ex_pandemic_sd": 0.02372, + "n_pairs_ex_pandemic": 25 + }, + "j2j_hire_rate": { + "level_mean": 0.05446, + "floor_abs_log_ratio_mean": 0.08798, + "floor_abs_log_ratio_sd": 0.10137, + "n_pairs": 37, + "ex_pandemic_mean": 0.04834, + "ex_pandemic_sd": 0.04246, + "n_pairs_ex_pandemic": 25 + }, + "j2j_separation_rate": { + "level_mean": 0.0547, + "floor_abs_log_ratio_mean": 0.08697, + "floor_abs_log_ratio_sd": 0.10513, + "n_pairs": 36, + "ex_pandemic_mean": 0.04752, + "ex_pandemic_sd": 0.04515, + "n_pairs_ex_pandemic": 24 + } + }, + "sex0_A01": { + "sex": 0, + "sex_label": "All Sexes", + "agegrp": "A01", + "agegrp_label": "14-18", + "min_denominator_jobs": 2374533, + "thin": false, + "hire_rate": { + "level_mean": 0.42042, + "floor_abs_log_ratio_mean": 0.07367, + "floor_abs_log_ratio_sd": 0.08249, + "n_pairs": 37, + "ex_pandemic_mean": 0.03536, + "ex_pandemic_sd": 0.03241, + "n_pairs_ex_pandemic": 25 + }, + "separation_rate": { + "level_mean": 0.27113, + "floor_abs_log_ratio_mean": 0.07401, + "floor_abs_log_ratio_sd": 0.09739, + "n_pairs": 37, + "ex_pandemic_mean": 0.03089, + "ex_pandemic_sd": 0.02891, + "n_pairs_ex_pandemic": 25 + }, + "j2j_hire_rate": { + "level_mean": 0.10984, + "floor_abs_log_ratio_mean": 0.07842, + "floor_abs_log_ratio_sd": 0.06298, + "n_pairs": 37, + "ex_pandemic_mean": 0.05368, + "ex_pandemic_sd": 0.04363, + "n_pairs_ex_pandemic": 25 + }, + "j2j_separation_rate": { + "level_mean": 0.11713, + "floor_abs_log_ratio_mean": 0.08081, + "floor_abs_log_ratio_sd": 0.09525, + "n_pairs": 36, + "ex_pandemic_mean": 0.05043, + "ex_pandemic_sd": 0.04433, + "n_pairs_ex_pandemic": 24 + } + }, + "sex0_A02": { + "sex": 0, + "sex_label": "All Sexes", + "agegrp": "A02", + "agegrp_label": "19-21", + "min_denominator_jobs": 5105305, + "thin": false, + "hire_rate": { + "level_mean": 0.29055, + "floor_abs_log_ratio_mean": 0.06968, + "floor_abs_log_ratio_sd": 0.07426, + "n_pairs": 37, + "ex_pandemic_mean": 0.03633, + "ex_pandemic_sd": 0.03347, + "n_pairs_ex_pandemic": 25 + }, + "separation_rate": { + "level_mean": 0.25229, + "floor_abs_log_ratio_mean": 0.05892, + "floor_abs_log_ratio_sd": 0.06633, + "n_pairs": 37, + "ex_pandemic_mean": 0.03226, + "ex_pandemic_sd": 0.03203, + "n_pairs_ex_pandemic": 25 + }, + "j2j_hire_rate": { + "level_mean": 0.1353, + "floor_abs_log_ratio_mean": 0.07439, + "floor_abs_log_ratio_sd": 0.08139, + "n_pairs": 37, + "ex_pandemic_mean": 0.05102, + "ex_pandemic_sd": 0.04566, + "n_pairs_ex_pandemic": 25 + }, + "j2j_separation_rate": { + "level_mean": 0.13621, + "floor_abs_log_ratio_mean": 0.07625, + "floor_abs_log_ratio_sd": 0.09273, + "n_pairs": 36, + "ex_pandemic_mean": 0.04843, + "ex_pandemic_sd": 0.04726, + "n_pairs_ex_pandemic": 24 + } + }, + "sex0_A03": { + "sex": 0, + "sex_label": "All Sexes", + "agegrp": "A03", + "agegrp_label": "22-24", + "min_denominator_jobs": 6550706, + "thin": false, + "hire_rate": { + "level_mean": 0.21288, + "floor_abs_log_ratio_mean": 0.07371, + "floor_abs_log_ratio_sd": 0.09203, + "n_pairs": 37, + "ex_pandemic_mean": 0.03942, + "ex_pandemic_sd": 0.03697, + "n_pairs_ex_pandemic": 25 + }, + "separation_rate": { + "level_mean": 0.18928, + "floor_abs_log_ratio_mean": 0.05737, + "floor_abs_log_ratio_sd": 0.06247, + "n_pairs": 37, + "ex_pandemic_mean": 0.03363, + "ex_pandemic_sd": 0.03283, + "n_pairs_ex_pandemic": 25 + }, + "j2j_hire_rate": { + "level_mean": 0.1144, + "floor_abs_log_ratio_mean": 0.0823, + "floor_abs_log_ratio_sd": 0.10323, + "n_pairs": 37, + "ex_pandemic_mean": 0.05016, + "ex_pandemic_sd": 0.04394, + "n_pairs_ex_pandemic": 25 + }, + "j2j_separation_rate": { + "level_mean": 0.11468, + "floor_abs_log_ratio_mean": 0.08425, + "floor_abs_log_ratio_sd": 0.1033, + "n_pairs": 36, + "ex_pandemic_mean": 0.04861, + "ex_pandemic_sd": 0.04625, + "n_pairs_ex_pandemic": 24 + } + }, + "sex0_A04": { + "sex": 0, + "sex_label": "All Sexes", + "agegrp": "A04", + "agegrp_label": "25-34", + "min_denominator_jobs": 26944125, + "thin": false, + "hire_rate": { + "level_mean": 0.13034, + "floor_abs_log_ratio_mean": 0.0767, + "floor_abs_log_ratio_sd": 0.09979, + "n_pairs": 37, + "ex_pandemic_mean": 0.04057, + "ex_pandemic_sd": 0.03877, + "n_pairs_ex_pandemic": 25 + }, + "separation_rate": { + "level_mean": 0.12315, + "floor_abs_log_ratio_mean": 0.05804, + "floor_abs_log_ratio_sd": 0.06572, + "n_pairs": 37, + "ex_pandemic_mean": 0.03373, + "ex_pandemic_sd": 0.03061, + "n_pairs_ex_pandemic": 25 + }, + "j2j_hire_rate": { + "level_mean": 0.07351, + "floor_abs_log_ratio_mean": 0.09471, + "floor_abs_log_ratio_sd": 0.112, + "n_pairs": 37, + "ex_pandemic_mean": 0.05039, + "ex_pandemic_sd": 0.04575, + "n_pairs_ex_pandemic": 25 + }, + "j2j_separation_rate": { + "level_mean": 0.07357, + "floor_abs_log_ratio_mean": 0.09352, + "floor_abs_log_ratio_sd": 0.11245, + "n_pairs": 36, + "ex_pandemic_mean": 0.04977, + "ex_pandemic_sd": 0.04891, + "n_pairs_ex_pandemic": 24 + } + }, + "sex0_A05": { + "sex": 0, + "sex_label": "All Sexes", + "agegrp": "A05", + "agegrp_label": "35-44", + "min_denominator_jobs": 26554573, + "thin": false, + "hire_rate": { + "level_mean": 0.09039, + "floor_abs_log_ratio_mean": 0.06993, + "floor_abs_log_ratio_sd": 0.08995, + "n_pairs": 37, + "ex_pandemic_mean": 0.03733, + "ex_pandemic_sd": 0.03389, + "n_pairs_ex_pandemic": 25 + }, + "separation_rate": { + "level_mean": 0.08612, + "floor_abs_log_ratio_mean": 0.05528, + "floor_abs_log_ratio_sd": 0.07795, + "n_pairs": 37, + "ex_pandemic_mean": 0.0279, + "ex_pandemic_sd": 0.02411, + "n_pairs_ex_pandemic": 25 + }, + "j2j_hire_rate": { + "level_mean": 0.04795, + "floor_abs_log_ratio_mean": 0.09433, + "floor_abs_log_ratio_sd": 0.10529, + "n_pairs": 37, + "ex_pandemic_mean": 0.04636, + "ex_pandemic_sd": 0.04237, + "n_pairs_ex_pandemic": 25 + }, + "j2j_separation_rate": { + "level_mean": 0.04799, + "floor_abs_log_ratio_mean": 0.09472, + "floor_abs_log_ratio_sd": 0.1051, + "n_pairs": 36, + "ex_pandemic_mean": 0.04685, + "ex_pandemic_sd": 0.04441, + "n_pairs_ex_pandemic": 24 + } + }, + "sex0_A06": { + "sex": 0, + "sex_label": "All Sexes", + "agegrp": "A06", + "agegrp_label": "45-54", + "min_denominator_jobs": 25614101, + "thin": false, + "hire_rate": { + "level_mean": 0.06985, + "floor_abs_log_ratio_mean": 0.06539, + "floor_abs_log_ratio_sd": 0.08085, + "n_pairs": 37, + "ex_pandemic_mean": 0.03522, + "ex_pandemic_sd": 0.0295, + "n_pairs_ex_pandemic": 25 + }, + "separation_rate": { + "level_mean": 0.06889, + "floor_abs_log_ratio_mean": 0.05573, + "floor_abs_log_ratio_sd": 0.08709, + "n_pairs": 37, + "ex_pandemic_mean": 0.02334, + "ex_pandemic_sd": 0.01937, + "n_pairs_ex_pandemic": 25 + }, + "j2j_hire_rate": { + "level_mean": 0.03565, + "floor_abs_log_ratio_mean": 0.09163, + "floor_abs_log_ratio_sd": 0.09921, + "n_pairs": 37, + "ex_pandemic_mean": 0.04597, + "ex_pandemic_sd": 0.03736, + "n_pairs_ex_pandemic": 25 + }, + "j2j_separation_rate": { + "level_mean": 0.03562, + "floor_abs_log_ratio_mean": 0.09187, + "floor_abs_log_ratio_sd": 0.09805, + "n_pairs": 36, + "ex_pandemic_mean": 0.04618, + "ex_pandemic_sd": 0.03922, + "n_pairs_ex_pandemic": 24 + } + }, + "sex0_A07": { + "sex": 0, + "sex_label": "All Sexes", + "agegrp": "A07", + "agegrp_label": "55-64", + "min_denominator_jobs": 20859090, + "thin": false, + "hire_rate": { + "level_mean": 0.05553, + "floor_abs_log_ratio_mean": 0.06896, + "floor_abs_log_ratio_sd": 0.08034, + "n_pairs": 37, + "ex_pandemic_mean": 0.03671, + "ex_pandemic_sd": 0.02972, + "n_pairs_ex_pandemic": 25 + }, + "separation_rate": { + "level_mean": 0.0654, + "floor_abs_log_ratio_mean": 0.05664, + "floor_abs_log_ratio_sd": 0.1031, + "n_pairs": 37, + "ex_pandemic_mean": 0.01923, + "ex_pandemic_sd": 0.01458, + "n_pairs_ex_pandemic": 25 + }, + "j2j_hire_rate": { + "level_mean": 0.02505, + "floor_abs_log_ratio_mean": 0.09193, + "floor_abs_log_ratio_sd": 0.09486, + "n_pairs": 37, + "ex_pandemic_mean": 0.04861, + "ex_pandemic_sd": 0.03196, + "n_pairs_ex_pandemic": 25 + }, + "j2j_separation_rate": { + "level_mean": 0.0249, + "floor_abs_log_ratio_mean": 0.09233, + "floor_abs_log_ratio_sd": 0.0937, + "n_pairs": 36, + "ex_pandemic_mean": 0.04911, + "ex_pandemic_sd": 0.03419, + "n_pairs_ex_pandemic": 24 + } + }, + "sex0_A08": { + "sex": 0, + "sex_label": "All Sexes", + "agegrp": "A08", + "agegrp_label": "65-99", + "min_denominator_jobs": 6794173, + "thin": false, + "hire_rate": { + "level_mean": 0.07202, + "floor_abs_log_ratio_mean": 0.07749, + "floor_abs_log_ratio_sd": 0.08494, + "n_pairs": 37, + "ex_pandemic_mean": 0.04487, + "ex_pandemic_sd": 0.04025, + "n_pairs_ex_pandemic": 25 + }, + "separation_rate": { + "level_mean": 0.09982, + "floor_abs_log_ratio_mean": 0.0688, + "floor_abs_log_ratio_sd": 0.14007, + "n_pairs": 37, + "ex_pandemic_mean": 0.01811, + "ex_pandemic_sd": 0.01571, + "n_pairs_ex_pandemic": 25 + }, + "j2j_hire_rate": { + "level_mean": 0.02219, + "floor_abs_log_ratio_mean": 0.08403, + "floor_abs_log_ratio_sd": 0.07878, + "n_pairs": 37, + "ex_pandemic_mean": 0.05429, + "ex_pandemic_sd": 0.03511, + "n_pairs_ex_pandemic": 25 + }, + "j2j_separation_rate": { + "level_mean": 0.02205, + "floor_abs_log_ratio_mean": 0.0873, + "floor_abs_log_ratio_sd": 0.08428, + "n_pairs": 36, + "ex_pandemic_mean": 0.05674, + "ex_pandemic_sd": 0.03615, + "n_pairs_ex_pandemic": 24 + } + }, + "sex1_A00": { + "sex": 1, + "sex_label": "Male", + "agegrp": "A00", + "agegrp_label": "All Ages (14-99)", + "min_denominator_jobs": 62895777, + "thin": false, + "hire_rate": { + "level_mean": 0.11264, + "floor_abs_log_ratio_mean": 0.06422, + "floor_abs_log_ratio_sd": 0.07882, + "n_pairs": 37, + "ex_pandemic_mean": 0.03567, + "ex_pandemic_sd": 0.02914, + "n_pairs_ex_pandemic": 25 + }, + "separation_rate": { + "level_mean": 0.10773, + "floor_abs_log_ratio_mean": 0.04806, + "floor_abs_log_ratio_sd": 0.06829, + "n_pairs": 37, + "ex_pandemic_mean": 0.02496, + "ex_pandemic_sd": 0.02124, + "n_pairs_ex_pandemic": 25 + }, + "j2j_hire_rate": { + "level_mean": 0.05589, + "floor_abs_log_ratio_mean": 0.08477, + "floor_abs_log_ratio_sd": 0.0939, + "n_pairs": 37, + "ex_pandemic_mean": 0.04672, + "ex_pandemic_sd": 0.03793, + "n_pairs_ex_pandemic": 25 + }, + "j2j_separation_rate": { + "level_mean": 0.05609, + "floor_abs_log_ratio_mean": 0.08497, + "floor_abs_log_ratio_sd": 0.09734, + "n_pairs": 36, + "ex_pandemic_mean": 0.04705, + "ex_pandemic_sd": 0.04064, + "n_pairs_ex_pandemic": 24 + } + }, + "sex1_A01": { + "sex": 1, + "sex_label": "Male", + "agegrp": "A01", + "agegrp_label": "14-18", + "min_denominator_jobs": 1084140, + "thin": false, + "hire_rate": { + "level_mean": 0.43626, + "floor_abs_log_ratio_mean": 0.06712, + "floor_abs_log_ratio_sd": 0.06893, + "n_pairs": 37, + "ex_pandemic_mean": 0.03712, + "ex_pandemic_sd": 0.0329, + "n_pairs_ex_pandemic": 25 + }, + "separation_rate": { + "level_mean": 0.28055, + "floor_abs_log_ratio_mean": 0.07033, + "floor_abs_log_ratio_sd": 0.08996, + "n_pairs": 37, + "ex_pandemic_mean": 0.03153, + "ex_pandemic_sd": 0.02657, + "n_pairs_ex_pandemic": 25 + }, + "j2j_hire_rate": { + "level_mean": 0.1076, + "floor_abs_log_ratio_mean": 0.0738, + "floor_abs_log_ratio_sd": 0.05438, + "n_pairs": 37, + "ex_pandemic_mean": 0.05264, + "ex_pandemic_sd": 0.04086, + "n_pairs_ex_pandemic": 25 + }, + "j2j_separation_rate": { + "level_mean": 0.11527, + "floor_abs_log_ratio_mean": 0.0758, + "floor_abs_log_ratio_sd": 0.08788, + "n_pairs": 36, + "ex_pandemic_mean": 0.04973, + "ex_pandemic_sd": 0.04253, + "n_pairs_ex_pandemic": 24 + } + }, + "sex1_A02": { + "sex": 1, + "sex_label": "Male", + "agegrp": "A02", + "agegrp_label": "19-21", + "min_denominator_jobs": 2508489, + "thin": false, + "hire_rate": { + "level_mean": 0.29572, + "floor_abs_log_ratio_mean": 0.06433, + "floor_abs_log_ratio_sd": 0.06592, + "n_pairs": 37, + "ex_pandemic_mean": 0.0378, + "ex_pandemic_sd": 0.03232, + "n_pairs_ex_pandemic": 25 + }, + "separation_rate": { + "level_mean": 0.25643, + "floor_abs_log_ratio_mean": 0.05566, + "floor_abs_log_ratio_sd": 0.05724, + "n_pairs": 37, + "ex_pandemic_mean": 0.03353, + "ex_pandemic_sd": 0.02995, + "n_pairs_ex_pandemic": 25 + }, + "j2j_hire_rate": { + "level_mean": 0.136, + "floor_abs_log_ratio_mean": 0.07226, + "floor_abs_log_ratio_sd": 0.07794, + "n_pairs": 37, + "ex_pandemic_mean": 0.05087, + "ex_pandemic_sd": 0.04292, + "n_pairs_ex_pandemic": 25 + }, + "j2j_separation_rate": { + "level_mean": 0.13694, + "floor_abs_log_ratio_mean": 0.07474, + "floor_abs_log_ratio_sd": 0.08757, + "n_pairs": 36, + "ex_pandemic_mean": 0.0502, + "ex_pandemic_sd": 0.04434, + "n_pairs_ex_pandemic": 24 + } + }, + "sex1_A03": { + "sex": 1, + "sex_label": "Male", + "agegrp": "A03", + "agegrp_label": "22-24", + "min_denominator_jobs": 3280046, + "thin": false, + "hire_rate": { + "level_mean": 0.2154, + "floor_abs_log_ratio_mean": 0.0716, + "floor_abs_log_ratio_sd": 0.08499, + "n_pairs": 37, + "ex_pandemic_mean": 0.04026, + "ex_pandemic_sd": 0.0353, + "n_pairs_ex_pandemic": 25 + }, + "separation_rate": { + "level_mean": 0.19136, + "floor_abs_log_ratio_mean": 0.0534, + "floor_abs_log_ratio_sd": 0.05443, + "n_pairs": 37, + "ex_pandemic_mean": 0.03481, + "ex_pandemic_sd": 0.03131, + "n_pairs_ex_pandemic": 25 + }, + "j2j_hire_rate": { + "level_mean": 0.11515, + "floor_abs_log_ratio_mean": 0.08085, + "floor_abs_log_ratio_sd": 0.09544, + "n_pairs": 37, + "ex_pandemic_mean": 0.05161, + "ex_pandemic_sd": 0.04112, + "n_pairs_ex_pandemic": 25 + }, + "j2j_separation_rate": { + "level_mean": 0.11547, + "floor_abs_log_ratio_mean": 0.08336, + "floor_abs_log_ratio_sd": 0.09716, + "n_pairs": 36, + "ex_pandemic_mean": 0.05123, + "ex_pandemic_sd": 0.04395, + "n_pairs_ex_pandemic": 24 + } + }, + "sex1_A04": { + "sex": 1, + "sex_label": "Male", + "agegrp": "A04", + "agegrp_label": "25-34", + "min_denominator_jobs": 13775079, + "thin": false, + "hire_rate": { + "level_mean": 0.13315, + "floor_abs_log_ratio_mean": 0.07246, + "floor_abs_log_ratio_sd": 0.09351, + "n_pairs": 37, + "ex_pandemic_mean": 0.03837, + "ex_pandemic_sd": 0.03524, + "n_pairs_ex_pandemic": 25 + }, + "separation_rate": { + "level_mean": 0.12585, + "floor_abs_log_ratio_mean": 0.05408, + "floor_abs_log_ratio_sd": 0.05766, + "n_pairs": 37, + "ex_pandemic_mean": 0.03269, + "ex_pandemic_sd": 0.02865, + "n_pairs_ex_pandemic": 25 + }, + "j2j_hire_rate": { + "level_mean": 0.07649, + "floor_abs_log_ratio_mean": 0.09041, + "floor_abs_log_ratio_sd": 0.10399, + "n_pairs": 37, + "ex_pandemic_mean": 0.0493, + "ex_pandemic_sd": 0.04191, + "n_pairs_ex_pandemic": 25 + }, + "j2j_separation_rate": { + "level_mean": 0.07652, + "floor_abs_log_ratio_mean": 0.09049, + "floor_abs_log_ratio_sd": 0.10455, + "n_pairs": 36, + "ex_pandemic_mean": 0.0499, + "ex_pandemic_sd": 0.04476, + "n_pairs_ex_pandemic": 24 + } + }, + "sex1_A05": { + "sex": 1, + "sex_label": "Male", + "agegrp": "A05", + "agegrp_label": "35-44", + "min_denominator_jobs": 13661887, + "thin": false, + "hire_rate": { + "level_mean": 0.09162, + "floor_abs_log_ratio_mean": 0.06408, + "floor_abs_log_ratio_sd": 0.08345, + "n_pairs": 37, + "ex_pandemic_mean": 0.03367, + "ex_pandemic_sd": 0.02885, + "n_pairs_ex_pandemic": 25 + }, + "separation_rate": { + "level_mean": 0.08857, + "floor_abs_log_ratio_mean": 0.05026, + "floor_abs_log_ratio_sd": 0.06663, + "n_pairs": 37, + "ex_pandemic_mean": 0.02504, + "ex_pandemic_sd": 0.02176, + "n_pairs_ex_pandemic": 25 + }, + "j2j_hire_rate": { + "level_mean": 0.05004, + "floor_abs_log_ratio_mean": 0.08969, + "floor_abs_log_ratio_sd": 0.09852, + "n_pairs": 37, + "ex_pandemic_mean": 0.04421, + "ex_pandemic_sd": 0.03769, + "n_pairs_ex_pandemic": 25 + }, + "j2j_separation_rate": { + "level_mean": 0.05001, + "floor_abs_log_ratio_mean": 0.09107, + "floor_abs_log_ratio_sd": 0.09824, + "n_pairs": 36, + "ex_pandemic_mean": 0.04549, + "ex_pandemic_sd": 0.03987, + "n_pairs_ex_pandemic": 24 + } + }, + "sex1_A06": { + "sex": 1, + "sex_label": "Male", + "agegrp": "A06", + "agegrp_label": "45-54", + "min_denominator_jobs": 13005656, + "thin": false, + "hire_rate": { + "level_mean": 0.07106, + "floor_abs_log_ratio_mean": 0.05836, + "floor_abs_log_ratio_sd": 0.07424, + "n_pairs": 37, + "ex_pandemic_mean": 0.03106, + "ex_pandemic_sd": 0.02446, + "n_pairs_ex_pandemic": 25 + }, + "separation_rate": { + "level_mean": 0.07092, + "floor_abs_log_ratio_mean": 0.0468, + "floor_abs_log_ratio_sd": 0.07313, + "n_pairs": 37, + "ex_pandemic_mean": 0.0194, + "ex_pandemic_sd": 0.01638, + "n_pairs_ex_pandemic": 25 + }, + "j2j_hire_rate": { + "level_mean": 0.03705, + "floor_abs_log_ratio_mean": 0.08444, + "floor_abs_log_ratio_sd": 0.09235, + "n_pairs": 37, + "ex_pandemic_mean": 0.04119, + "ex_pandemic_sd": 0.03369, + "n_pairs_ex_pandemic": 25 + }, + "j2j_separation_rate": { + "level_mean": 0.03698, + "floor_abs_log_ratio_mean": 0.08604, + "floor_abs_log_ratio_sd": 0.09081, + "n_pairs": 36, + "ex_pandemic_mean": 0.04277, + "ex_pandemic_sd": 0.03474, + "n_pairs_ex_pandemic": 24 + } + }, + "sex1_A07": { + "sex": 1, + "sex_label": "Male", + "agegrp": "A07", + "agegrp_label": "55-64", + "min_denominator_jobs": 10403974, + "thin": false, + "hire_rate": { + "level_mean": 0.05782, + "floor_abs_log_ratio_mean": 0.06305, + "floor_abs_log_ratio_sd": 0.0721, + "n_pairs": 37, + "ex_pandemic_mean": 0.03419, + "ex_pandemic_sd": 0.02567, + "n_pairs_ex_pandemic": 25 + }, + "separation_rate": { + "level_mean": 0.06761, + "floor_abs_log_ratio_mean": 0.04635, + "floor_abs_log_ratio_sd": 0.08553, + "n_pairs": 37, + "ex_pandemic_mean": 0.01628, + "ex_pandemic_sd": 0.01322, + "n_pairs_ex_pandemic": 25 + }, + "j2j_hire_rate": { + "level_mean": 0.02673, + "floor_abs_log_ratio_mean": 0.08497, + "floor_abs_log_ratio_sd": 0.08835, + "n_pairs": 37, + "ex_pandemic_mean": 0.04383, + "ex_pandemic_sd": 0.0312, + "n_pairs_ex_pandemic": 25 + }, + "j2j_separation_rate": { + "level_mean": 0.02654, + "floor_abs_log_ratio_mean": 0.08629, + "floor_abs_log_ratio_sd": 0.08754, + "n_pairs": 36, + "ex_pandemic_mean": 0.04502, + "ex_pandemic_sd": 0.03331, + "n_pairs_ex_pandemic": 24 + } + }, + "sex1_A08": { + "sex": 1, + "sex_label": "Male", + "agegrp": "A08", + "agegrp_label": "65-99", + "min_denominator_jobs": 3512909, + "thin": false, + "hire_rate": { + "level_mean": 0.07378, + "floor_abs_log_ratio_mean": 0.07166, + "floor_abs_log_ratio_sd": 0.0737, + "n_pairs": 37, + "ex_pandemic_mean": 0.04237, + "ex_pandemic_sd": 0.03784, + "n_pairs_ex_pandemic": 25 + }, + "separation_rate": { + "level_mean": 0.10064, + "floor_abs_log_ratio_mean": 0.05896, + "floor_abs_log_ratio_sd": 0.12119, + "n_pairs": 37, + "ex_pandemic_mean": 0.01589, + "ex_pandemic_sd": 0.01392, + "n_pairs_ex_pandemic": 25 + }, + "j2j_hire_rate": { + "level_mean": 0.02309, + "floor_abs_log_ratio_mean": 0.08276, + "floor_abs_log_ratio_sd": 0.07591, + "n_pairs": 37, + "ex_pandemic_mean": 0.05243, + "ex_pandemic_sd": 0.03565, + "n_pairs_ex_pandemic": 25 + }, + "j2j_separation_rate": { + "level_mean": 0.02293, + "floor_abs_log_ratio_mean": 0.08645, + "floor_abs_log_ratio_sd": 0.08223, + "n_pairs": 36, + "ex_pandemic_mean": 0.05469, + "ex_pandemic_sd": 0.0369, + "n_pairs_ex_pandemic": 24 + } + }, + "sex2_A00": { + "sex": 2, + "sex_label": "Female", + "agegrp": "A00", + "agegrp_label": "All Ages (14-99)", + "min_denominator_jobs": 61261381, + "thin": false, + "hire_rate": { + "level_mean": 0.1101, + "floor_abs_log_ratio_mean": 0.07457, + "floor_abs_log_ratio_sd": 0.09449, + "n_pairs": 37, + "ex_pandemic_mean": 0.03999, + "ex_pandemic_sd": 0.03769, + "n_pairs_ex_pandemic": 25 + }, + "separation_rate": { + "level_mean": 0.104, + "floor_abs_log_ratio_mean": 0.05945, + "floor_abs_log_ratio_sd": 0.09026, + "n_pairs": 37, + "ex_pandemic_mean": 0.02969, + "ex_pandemic_sd": 0.02674, + "n_pairs_ex_pandemic": 25 + }, + "j2j_hire_rate": { + "level_mean": 0.053, + "floor_abs_log_ratio_mean": 0.09336, + "floor_abs_log_ratio_sd": 0.10852, + "n_pairs": 37, + "ex_pandemic_mean": 0.05292, + "ex_pandemic_sd": 0.04499, + "n_pairs_ex_pandemic": 25 + }, + "j2j_separation_rate": { + "level_mean": 0.05329, + "floor_abs_log_ratio_mean": 0.09193, + "floor_abs_log_ratio_sd": 0.1117, + "n_pairs": 36, + "ex_pandemic_mean": 0.05161, + "ex_pandemic_sd": 0.04705, + "n_pairs_ex_pandemic": 24 + } + }, + "sex2_A01": { + "sex": 2, + "sex_label": "Female", + "agegrp": "A01", + "agegrp_label": "14-18", + "min_denominator_jobs": 1290393, + "thin": false, + "hire_rate": { + "level_mean": 0.40702, + "floor_abs_log_ratio_mean": 0.08137, + "floor_abs_log_ratio_sd": 0.09561, + "n_pairs": 37, + "ex_pandemic_mean": 0.03462, + "ex_pandemic_sd": 0.03186, + "n_pairs_ex_pandemic": 25 + }, + "separation_rate": { + "level_mean": 0.26294, + "floor_abs_log_ratio_mean": 0.07794, + "floor_abs_log_ratio_sd": 0.10405, + "n_pairs": 37, + "ex_pandemic_mean": 0.0309, + "ex_pandemic_sd": 0.03068, + "n_pairs_ex_pandemic": 25 + }, + "j2j_hire_rate": { + "level_mean": 0.1118, + "floor_abs_log_ratio_mean": 0.08275, + "floor_abs_log_ratio_sd": 0.07126, + "n_pairs": 37, + "ex_pandemic_mean": 0.0553, + "ex_pandemic_sd": 0.04525, + "n_pairs_ex_pandemic": 25 + }, + "j2j_separation_rate": { + "level_mean": 0.11878, + "floor_abs_log_ratio_mean": 0.08551, + "floor_abs_log_ratio_sd": 0.10219, + "n_pairs": 36, + "ex_pandemic_mean": 0.05158, + "ex_pandemic_sd": 0.04546, + "n_pairs_ex_pandemic": 24 + } + }, + "sex2_A02": { + "sex": 2, + "sex_label": "Female", + "agegrp": "A02", + "agegrp_label": "19-21", + "min_denominator_jobs": 2596816, + "thin": false, + "hire_rate": { + "level_mean": 0.28574, + "floor_abs_log_ratio_mean": 0.07515, + "floor_abs_log_ratio_sd": 0.08405, + "n_pairs": 37, + "ex_pandemic_mean": 0.03525, + "ex_pandemic_sd": 0.03475, + "n_pairs_ex_pandemic": 25 + }, + "separation_rate": { + "level_mean": 0.24836, + "floor_abs_log_ratio_mean": 0.06226, + "floor_abs_log_ratio_sd": 0.07515, + "n_pairs": 37, + "ex_pandemic_mean": 0.03138, + "ex_pandemic_sd": 0.03425, + "n_pairs_ex_pandemic": 25 + }, + "j2j_hire_rate": { + "level_mean": 0.13467, + "floor_abs_log_ratio_mean": 0.078, + "floor_abs_log_ratio_sd": 0.08413, + "n_pairs": 37, + "ex_pandemic_mean": 0.05258, + "ex_pandemic_sd": 0.04754, + "n_pairs_ex_pandemic": 25 + }, + "j2j_separation_rate": { + "level_mean": 0.13554, + "floor_abs_log_ratio_mean": 0.07924, + "floor_abs_log_ratio_sd": 0.0972, + "n_pairs": 36, + "ex_pandemic_mean": 0.04881, + "ex_pandemic_sd": 0.0486, + "n_pairs_ex_pandemic": 24 + } + }, + "sex2_A03": { + "sex": 2, + "sex_label": "Female", + "agegrp": "A03", + "agegrp_label": "22-24", + "min_denominator_jobs": 3270659, + "thin": false, + "hire_rate": { + "level_mean": 0.21051, + "floor_abs_log_ratio_mean": 0.07623, + "floor_abs_log_ratio_sd": 0.10036, + "n_pairs": 37, + "ex_pandemic_mean": 0.03886, + "ex_pandemic_sd": 0.03892, + "n_pairs_ex_pandemic": 25 + }, + "separation_rate": { + "level_mean": 0.18725, + "floor_abs_log_ratio_mean": 0.06152, + "floor_abs_log_ratio_sd": 0.07064, + "n_pairs": 37, + "ex_pandemic_mean": 0.0329, + "ex_pandemic_sd": 0.03442, + "n_pairs_ex_pandemic": 25 + }, + "j2j_hire_rate": { + "level_mean": 0.11371, + "floor_abs_log_ratio_mean": 0.08469, + "floor_abs_log_ratio_sd": 0.11117, + "n_pairs": 37, + "ex_pandemic_mean": 0.0499, + "ex_pandemic_sd": 0.04653, + "n_pairs_ex_pandemic": 25 + }, + "j2j_separation_rate": { + "level_mean": 0.11394, + "floor_abs_log_ratio_mean": 0.08596, + "floor_abs_log_ratio_sd": 0.10923, + "n_pairs": 36, + "ex_pandemic_mean": 0.04739, + "ex_pandemic_sd": 0.04803, + "n_pairs_ex_pandemic": 24 + } + }, + "sex2_A04": { + "sex": 2, + "sex_label": "Female", + "agegrp": "A04", + "agegrp_label": "25-34", + "min_denominator_jobs": 13169046, + "thin": false, + "hire_rate": { + "level_mean": 0.12745, + "floor_abs_log_ratio_mean": 0.08139, + "floor_abs_log_ratio_sd": 0.1077, + "n_pairs": 37, + "ex_pandemic_mean": 0.04282, + "ex_pandemic_sd": 0.04361, + "n_pairs_ex_pandemic": 25 + }, + "separation_rate": { + "level_mean": 0.12034, + "floor_abs_log_ratio_mean": 0.06229, + "floor_abs_log_ratio_sd": 0.07457, + "n_pairs": 37, + "ex_pandemic_mean": 0.03481, + "ex_pandemic_sd": 0.03326, + "n_pairs_ex_pandemic": 25 + }, + "j2j_hire_rate": { + "level_mean": 0.07043, + "floor_abs_log_ratio_mean": 0.10116, + "floor_abs_log_ratio_sd": 0.12044, + "n_pairs": 37, + "ex_pandemic_mean": 0.05397, + "ex_pandemic_sd": 0.04837, + "n_pairs_ex_pandemic": 25 + }, + "j2j_separation_rate": { + "level_mean": 0.07052, + "floor_abs_log_ratio_mean": 0.09911, + "floor_abs_log_ratio_sd": 0.11999, + "n_pairs": 36, + "ex_pandemic_mean": 0.05293, + "ex_pandemic_sd": 0.05104, + "n_pairs_ex_pandemic": 24 + } + }, + "sex2_A05": { + "sex": 2, + "sex_label": "Female", + "agegrp": "A05", + "agegrp_label": "35-44", + "min_denominator_jobs": 12892686, + "thin": false, + "hire_rate": { + "level_mean": 0.08912, + "floor_abs_log_ratio_mean": 0.07657, + "floor_abs_log_ratio_sd": 0.09772, + "n_pairs": 37, + "ex_pandemic_mean": 0.04164, + "ex_pandemic_sd": 0.04013, + "n_pairs_ex_pandemic": 25 + }, + "separation_rate": { + "level_mean": 0.08356, + "floor_abs_log_ratio_mean": 0.062, + "floor_abs_log_ratio_sd": 0.08974, + "n_pairs": 37, + "ex_pandemic_mean": 0.03111, + "ex_pandemic_sd": 0.02721, + "n_pairs_ex_pandemic": 25 + }, + "j2j_hire_rate": { + "level_mean": 0.04578, + "floor_abs_log_ratio_mean": 0.10251, + "floor_abs_log_ratio_sd": 0.11114, + "n_pairs": 37, + "ex_pandemic_mean": 0.05311, + "ex_pandemic_sd": 0.04404, + "n_pairs_ex_pandemic": 25 + }, + "j2j_separation_rate": { + "level_mean": 0.04588, + "floor_abs_log_ratio_mean": 0.10136, + "floor_abs_log_ratio_sd": 0.11121, + "n_pairs": 36, + "ex_pandemic_mean": 0.05216, + "ex_pandemic_sd": 0.04675, + "n_pairs_ex_pandemic": 24 + } + }, + "sex2_A06": { + "sex": 2, + "sex_label": "Female", + "agegrp": "A06", + "agegrp_label": "45-54", + "min_denominator_jobs": 12608445, + "thin": false, + "hire_rate": { + "level_mean": 0.06863, + "floor_abs_log_ratio_mean": 0.07384, + "floor_abs_log_ratio_sd": 0.08839, + "n_pairs": 37, + "ex_pandemic_mean": 0.04102, + "ex_pandemic_sd": 0.03494, + "n_pairs_ex_pandemic": 25 + }, + "separation_rate": { + "level_mean": 0.06682, + "floor_abs_log_ratio_mean": 0.06623, + "floor_abs_log_ratio_sd": 0.10139, + "n_pairs": 37, + "ex_pandemic_mean": 0.02927, + "ex_pandemic_sd": 0.02202, + "n_pairs_ex_pandemic": 25 + }, + "j2j_hire_rate": { + "level_mean": 0.03422, + "floor_abs_log_ratio_mean": 0.10182, + "floor_abs_log_ratio_sd": 0.10553, + "n_pairs": 37, + "ex_pandemic_mean": 0.05473, + "ex_pandemic_sd": 0.03831, + "n_pairs_ex_pandemic": 25 + }, + "j2j_separation_rate": { + "level_mean": 0.03423, + "floor_abs_log_ratio_mean": 0.10074, + "floor_abs_log_ratio_sd": 0.10445, + "n_pairs": 36, + "ex_pandemic_mean": 0.05378, + "ex_pandemic_sd": 0.0411, + "n_pairs_ex_pandemic": 24 + } + }, + "sex2_A07": { + "sex": 2, + "sex_label": "Female", + "agegrp": "A07", + "agegrp_label": "55-64", + "min_denominator_jobs": 10455116, + "thin": false, + "hire_rate": { + "level_mean": 0.05323, + "floor_abs_log_ratio_mean": 0.07784, + "floor_abs_log_ratio_sd": 0.08927, + "n_pairs": 37, + "ex_pandemic_mean": 0.04238, + "ex_pandemic_sd": 0.03189, + "n_pairs_ex_pandemic": 25 + }, + "separation_rate": { + "level_mean": 0.06318, + "floor_abs_log_ratio_mean": 0.0678, + "floor_abs_log_ratio_sd": 0.12145, + "n_pairs": 37, + "ex_pandemic_mean": 0.02297, + "ex_pandemic_sd": 0.01809, + "n_pairs_ex_pandemic": 25 + }, + "j2j_hire_rate": { + "level_mean": 0.02336, + "floor_abs_log_ratio_mean": 0.10114, + "floor_abs_log_ratio_sd": 0.10246, + "n_pairs": 37, + "ex_pandemic_mean": 0.05581, + "ex_pandemic_sd": 0.03141, + "n_pairs_ex_pandemic": 25 + }, + "j2j_separation_rate": { + "level_mean": 0.02324, + "floor_abs_log_ratio_mean": 0.09958, + "floor_abs_log_ratio_sd": 0.1016, + "n_pairs": 36, + "ex_pandemic_mean": 0.05426, + "ex_pandemic_sd": 0.03632, + "n_pairs_ex_pandemic": 24 + } + }, + "sex2_A08": { + "sex": 2, + "sex_label": "Female", + "agegrp": "A08", + "agegrp_label": "65-99", + "min_denominator_jobs": 3281264, + "thin": false, + "hire_rate": { + "level_mean": 0.07016, + "floor_abs_log_ratio_mean": 0.08678, + "floor_abs_log_ratio_sd": 0.09842, + "n_pairs": 37, + "ex_pandemic_mean": 0.05075, + "ex_pandemic_sd": 0.04107, + "n_pairs_ex_pandemic": 25 + }, + "separation_rate": { + "level_mean": 0.09892, + "floor_abs_log_ratio_mean": 0.08, + "floor_abs_log_ratio_sd": 0.15915, + "n_pairs": 37, + "ex_pandemic_mean": 0.02109, + "ex_pandemic_sd": 0.01865, + "n_pairs_ex_pandemic": 25 + }, + "j2j_hire_rate": { + "level_mean": 0.02121, + "floor_abs_log_ratio_mean": 0.08586, + "floor_abs_log_ratio_sd": 0.08288, + "n_pairs": 37, + "ex_pandemic_mean": 0.05643, + "ex_pandemic_sd": 0.03501, + "n_pairs_ex_pandemic": 25 + }, + "j2j_separation_rate": { + "level_mean": 0.02111, + "floor_abs_log_ratio_mean": 0.08876, + "floor_abs_log_ratio_sd": 0.08702, + "n_pairs": 36, + "ex_pandemic_mean": 0.0591, + "ex_pandemic_sd": 0.03595, + "n_pairs_ex_pandemic": 24 + } + } + }, + "cross_cell": { + "n_cells": 16, + "note": "non-margin cells only (sex in 1,2 x agegrp A01-A08); the all-sexes / all-ages rows are aggregates of these and are reported per-cell above, not pooled here", + "hire_rate": { + "cell_floor_median": 0.07315, + "cell_floor_p90": 0.08138, + "cell_floor_max": 0.08678, + "n_cells_with_pairs": 16, + "n_thin_cells": 0 + }, + "separation_rate": { + "cell_floor_median": 0.06176, + "cell_floor_p90": 0.07414, + "cell_floor_max": 0.08, + "n_cells_with_pairs": 16, + "n_thin_cells": 0 + }, + "j2j_hire_rate": { + "cell_floor_median": 0.08483, + "cell_floor_p90": 0.10149, + "cell_floor_max": 0.10251, + "n_cells_with_pairs": 16, + "n_thin_cells": 0 + }, + "j2j_separation_rate": { + "cell_floor_median": 0.08637, + "cell_floor_p90": 0.10016, + "cell_floor_max": 0.10136, + "n_cells_with_pairs": 16, + "n_thin_cells": 0 + } + } } }, "e6_e7": { @@ -1126,36 +2355,36 @@ "e6_hire_rate": { "level_mean": 0.17624, "floor_abs_log_ratio_mean": 0.04064, - "floor_abs_log_ratio_sd": 0.03935, + "floor_abs_log_ratio_sd": 0.03991, "n_pairs": 36, "ex_pandemic_mean": 0.02704, - "ex_pandemic_sd": 0.02588, + "ex_pandemic_sd": 0.02644, "n_pairs_ex_pandemic": 24 }, "e6_separation_rate": { "level_mean": 0.16626, "floor_abs_log_ratio_mean": 0.05999, - "floor_abs_log_ratio_sd": 0.11455, + "floor_abs_log_ratio_sd": 0.11622, "n_pairs": 35, "ex_pandemic_mean": 0.02282, - "ex_pandemic_sd": 0.02462, + "ex_pandemic_sd": 0.02517, "n_pairs_ex_pandemic": 23 }, "e7_earns_mean": { "level_mean": 3750.15385, "floor_abs_log_ratio_mean": 0.03537, - "floor_abs_log_ratio_sd": 0.02578, + "floor_abs_log_ratio_sd": 0.02616, "n_pairs": 35, "ex_pandemic_mean": 0.02618, - "ex_pandemic_sd": 0.01282, + "ex_pandemic_sd": 0.01311, "n_pairs_ex_pandemic": 23 }, "e7_earns_rel_to_aggregate": { "floor_abs_log_ratio_mean": 0.01162, - "floor_abs_log_ratio_sd": 0.00848, + "floor_abs_log_ratio_sd": 0.0086, "n_pairs": 35, "ex_pandemic_mean": 0.0094, - "ex_pandemic_sd": 0.00553, + "ex_pandemic_sd": 0.00565, "n_pairs_ex_pandemic": 23 } }, @@ -1170,36 +2399,36 @@ "e6_hire_rate": { "level_mean": 0.17312, "floor_abs_log_ratio_mean": 0.05679, - "floor_abs_log_ratio_sd": 0.07275, + "floor_abs_log_ratio_sd": 0.07378, "n_pairs": 36, "ex_pandemic_mean": 0.03523, - "ex_pandemic_sd": 0.03133, + "ex_pandemic_sd": 0.032, "n_pairs_ex_pandemic": 24 }, "e6_separation_rate": { "level_mean": 0.17206, "floor_abs_log_ratio_mean": 0.06336, - "floor_abs_log_ratio_sd": 0.10746, + "floor_abs_log_ratio_sd": 0.10903, "n_pairs": 35, "ex_pandemic_mean": 0.02619, - "ex_pandemic_sd": 0.02453, + "ex_pandemic_sd": 0.02508, "n_pairs_ex_pandemic": 23 }, "e7_earns_mean": { "level_mean": 4381.53846, "floor_abs_log_ratio_mean": 0.03731, - "floor_abs_log_ratio_sd": 0.03092, + "floor_abs_log_ratio_sd": 0.03138, "n_pairs": 35, "ex_pandemic_mean": 0.02465, - "ex_pandemic_sd": 0.01147, + "ex_pandemic_sd": 0.01173, "n_pairs_ex_pandemic": 23 }, "e7_earns_rel_to_aggregate": { "floor_abs_log_ratio_mean": 0.01223, - "floor_abs_log_ratio_sd": 0.0056, + "floor_abs_log_ratio_sd": 0.00568, "n_pairs": 35, "ex_pandemic_mean": 0.01198, - "ex_pandemic_sd": 0.00521, + "ex_pandemic_sd": 0.00533, "n_pairs_ex_pandemic": 23 } }, @@ -1215,36 +2444,36 @@ "e6_hire_rate": { "level_mean": 0.16488, "floor_abs_log_ratio_mean": 0.0591, - "floor_abs_log_ratio_sd": 0.08608, + "floor_abs_log_ratio_sd": 0.0873, "n_pairs": 36, "ex_pandemic_mean": 0.03188, - "ex_pandemic_sd": 0.02743, + "ex_pandemic_sd": 0.02802, "n_pairs_ex_pandemic": 24 }, "e6_separation_rate": { "level_mean": 0.16329, "floor_abs_log_ratio_mean": 0.05497, - "floor_abs_log_ratio_sd": 0.08598, + "floor_abs_log_ratio_sd": 0.08723, "n_pairs": 35, "ex_pandemic_mean": 0.02339, - "ex_pandemic_sd": 0.02079, + "ex_pandemic_sd": 0.02125, "n_pairs_ex_pandemic": 23 }, "e7_earns_mean": { "level_mean": 5030.20513, "floor_abs_log_ratio_mean": 0.04158, - "floor_abs_log_ratio_sd": 0.03371, + "floor_abs_log_ratio_sd": 0.0342, "n_pairs": 35, "ex_pandemic_mean": 0.02727, - "ex_pandemic_sd": 0.0132, + "ex_pandemic_sd": 0.0135, "n_pairs_ex_pandemic": 23 }, "e7_earns_rel_to_aggregate": { "floor_abs_log_ratio_mean": 0.00892, - "floor_abs_log_ratio_sd": 0.00755, + "floor_abs_log_ratio_sd": 0.00766, "n_pairs": 35, "ex_pandemic_mean": 0.00961, - "ex_pandemic_sd": 0.00845, + "ex_pandemic_sd": 0.00864, "n_pairs_ex_pandemic": 23 } }, @@ -1259,36 +2488,36 @@ "e6_hire_rate": { "level_mean": 0.16156, "floor_abs_log_ratio_mean": 0.06534, - "floor_abs_log_ratio_sd": 0.09186, + "floor_abs_log_ratio_sd": 0.09317, "n_pairs": 36, "ex_pandemic_mean": 0.03994, - "ex_pandemic_sd": 0.03671, + "ex_pandemic_sd": 0.0375, "n_pairs_ex_pandemic": 24 }, "e6_separation_rate": { "level_mean": 0.16052, "floor_abs_log_ratio_mean": 0.05247, - "floor_abs_log_ratio_sd": 0.06821, + "floor_abs_log_ratio_sd": 0.0692, "n_pairs": 35, "ex_pandemic_mean": 0.02996, - "ex_pandemic_sd": 0.02894, + "ex_pandemic_sd": 0.0296, "n_pairs_ex_pandemic": 23 }, "e7_earns_mean": { "level_mean": 5525.97436, "floor_abs_log_ratio_mean": 0.04863, - "floor_abs_log_ratio_sd": 0.03383, + "floor_abs_log_ratio_sd": 0.03432, "n_pairs": 35, "ex_pandemic_mean": 0.03416, - "ex_pandemic_sd": 0.016, + "ex_pandemic_sd": 0.01636, "n_pairs_ex_pandemic": 23 }, "e7_earns_rel_to_aggregate": { "floor_abs_log_ratio_mean": 0.00912, - "floor_abs_log_ratio_sd": 0.00773, + "floor_abs_log_ratio_sd": 0.00785, "n_pairs": 35, "ex_pandemic_mean": 0.00654, - "ex_pandemic_sd": 0.00607, + "ex_pandemic_sd": 0.00621, "n_pairs_ex_pandemic": 23 } }, @@ -1303,36 +2532,36 @@ "e6_hire_rate": { "level_mean": 0.14811, "floor_abs_log_ratio_mean": 0.06934, - "floor_abs_log_ratio_sd": 0.08398, + "floor_abs_log_ratio_sd": 0.08517, "n_pairs": 36, "ex_pandemic_mean": 0.04385, - "ex_pandemic_sd": 0.04439, + "ex_pandemic_sd": 0.04534, "n_pairs_ex_pandemic": 24 }, "e6_separation_rate": { "level_mean": 0.14779, "floor_abs_log_ratio_mean": 0.05885, - "floor_abs_log_ratio_sd": 0.06216, + "floor_abs_log_ratio_sd": 0.06307, "n_pairs": 35, "ex_pandemic_mean": 0.03847, - "ex_pandemic_sd": 0.03834, + "ex_pandemic_sd": 0.0392, "n_pairs_ex_pandemic": 23 }, "e7_earns_mean": { "level_mean": 6198.97436, "floor_abs_log_ratio_mean": 0.04616, - "floor_abs_log_ratio_sd": 0.02953, + "floor_abs_log_ratio_sd": 0.02996, "n_pairs": 35, "ex_pandemic_mean": 0.03539, - "ex_pandemic_sd": 0.01633, + "ex_pandemic_sd": 0.0167, "n_pairs_ex_pandemic": 23 }, "e7_earns_rel_to_aggregate": { "floor_abs_log_ratio_mean": 0.00492, - "floor_abs_log_ratio_sd": 0.00392, + "floor_abs_log_ratio_sd": 0.00398, "n_pairs": 35, "ex_pandemic_mean": 0.00397, - "ex_pandemic_sd": 0.00265, + "ex_pandemic_sd": 0.00271, "n_pairs_ex_pandemic": 23 } } @@ -1363,8 +2592,128 @@ } }, "e11": { - "status": "floor not derivable from committed extracts", - "margin_proxy": "the ee_hire_rate / ee_separation_rate floors in the E2 block are the destination- and origin-size margins of the E11 origin x destination matrix" + "status": "detail floor NOT derivable (one YoY pair per cell); destination-size margin floor derivable", + "detail_window": { + "observed_quarters": [ + "2015Q1", + "2015Q2", + "2015Q3", + "2015Q4", + "2016Q1" + ], + "n_quarters": 5, + "max_yoy_pairs_per_cell": 1, + "why_not_floorable": "the national origin x destination cross is published only for 2015Q1-2016Q1 (from 2016Q2 every detail cell carries status flag 11); same-quarter year-over-year pairing therefore yields at most one pair per detail cell, which gives a gap but no dispersion, so no mean + k*sd floor exists on the cross. This is a different disposition from the earlier draft's 'no extract committed': the extract exists (#228), the temporal replicate does not" + }, + "destination_size_margin": { + "firmsize1": { + "firmsize_label": "0-19 Employees", + "ee": { + "floor_abs_log_ratio_mean": 0.1054, + "floor_abs_log_ratio_sd": 0.13661, + "n_pairs": 37, + "ex_pandemic_mean": 0.05397, + "ex_pandemic_sd": 0.04699, + "n_pairs_ex_pandemic": 25 + }, + "ee_rel": { + "floor_abs_log_ratio_mean": 0.02329, + "floor_abs_log_ratio_sd": 0.02113, + "n_pairs": 37, + "ex_pandemic_mean": 0.01431, + "ex_pandemic_sd": 0.00849, + "n_pairs_ex_pandemic": 25 + } + }, + "firmsize2": { + "firmsize_label": "20-49 Employees", + "ee": { + "floor_abs_log_ratio_mean": 0.11739, + "floor_abs_log_ratio_sd": 0.15705, + "n_pairs": 37, + "ex_pandemic_mean": 0.05478, + "ex_pandemic_sd": 0.03831, + "n_pairs_ex_pandemic": 25 + }, + "ee_rel": { + "floor_abs_log_ratio_mean": 0.02035, + "floor_abs_log_ratio_sd": 0.01787, + "n_pairs": 37, + "ex_pandemic_mean": 0.01269, + "ex_pandemic_sd": 0.01065, + "n_pairs_ex_pandemic": 25 + } + }, + "firmsize3": { + "firmsize_label": "50-249 Employees", + "ee": { + "floor_abs_log_ratio_mean": 0.11377, + "floor_abs_log_ratio_sd": 0.15272, + "n_pairs": 37, + "ex_pandemic_mean": 0.04992, + "ex_pandemic_sd": 0.03355, + "n_pairs_ex_pandemic": 25 + }, + "ee_rel": { + "floor_abs_log_ratio_mean": 0.01738, + "floor_abs_log_ratio_sd": 0.0129, + "n_pairs": 37, + "ex_pandemic_mean": 0.01457, + "ex_pandemic_sd": 0.01355, + "n_pairs_ex_pandemic": 25 + } + }, + "firmsize4": { + "firmsize_label": "250-499 Employees", + "ee": { + "floor_abs_log_ratio_mean": 0.12445, + "floor_abs_log_ratio_sd": 0.15539, + "n_pairs": 37, + "ex_pandemic_mean": 0.05997, + "ex_pandemic_sd": 0.04299, + "n_pairs_ex_pandemic": 25 + }, + "ee_rel": { + "floor_abs_log_ratio_mean": 0.01445, + "floor_abs_log_ratio_sd": 0.01401, + "n_pairs": 37, + "ex_pandemic_mean": 0.01089, + "ex_pandemic_sd": 0.01025, + "n_pairs_ex_pandemic": 25 + } + }, + "firmsize5": { + "firmsize_label": "500+ Employees", + "ee": { + "floor_abs_log_ratio_mean": 0.12535, + "floor_abs_log_ratio_sd": 0.14728, + "n_pairs": 37, + "ex_pandemic_mean": 0.06573, + "ex_pandemic_sd": 0.05016, + "n_pairs_ex_pandemic": 25 + }, + "ee_rel": { + "floor_abs_log_ratio_mean": 0.01321, + "floor_abs_log_ratio_sd": 0.01144, + "n_pairs": 37, + "ex_pandemic_mean": 0.00999, + "ex_pandemic_sd": 0.00981, + "n_pairs_ex_pandemic": 25 + } + } + }, + "cross_source_margin_disagreement": { + "all_size_ee_tool_above_flat_file": "37 of 41 quarters", + "all_size_ee_deviation_range_pct": [ + -1.0, + 2.02 + ], + "per_size_deviation_range_pct": [ + -3.2, + 3.67 + ], + "note": "the LED Extraction Tool's margins and the LEHD flat file's d_fs margins are independent publications of the same quantity and disagree by up to ~3% in either direction (provenance entry 6; reproduce with scripts/check_j2jod_margin_agreement.py). Since E11's post-2016Q1 constraints are margins-only, this cross-source wobble bounds how tight any E11 margin threshold can be, independently of the temporal floor above" + } }, "e12": { "status": "deferred - no committed extract" diff --git a/scripts/build_employer_firm_floors.py b/scripts/build_employer_firm_floors.py index ada2328a..deff4169 100644 --- a/scripts/build_employer_firm_floors.py +++ b/scripts/build_employer_firm_floors.py @@ -121,12 +121,24 @@ def _gap_summary(gaps: list[tuple[int, float]]) -> dict: for y, g in gaps if y not in PANDEMIC_YEARS and (y - 1) not in PANDEMIC_YEARS ] + # ddof=1. n is 8-11 pairs here, where the population sd + # understates by ~5% -- and these sds feed a `mean + k * sd` + # threshold policy, so understating them biases thresholds tight + # (against the model) rather than harmlessly. It also matches the + # A-side batteries' across-seed sds, which the referee round will + # read alongside these. A single-pair cell has no dispersion and + # yields None rather than 0.0, which would read as a perfect + # floor (see the E11 detail window). out = { "floor_abs_log_ratio_mean": _round(np.mean(full)) if full else None, - "floor_abs_log_ratio_sd": _round(np.std(full)) if full else None, + "floor_abs_log_ratio_sd": ( + _round(np.std(full, ddof=1)) if len(full) > 1 else None + ), "n_pairs": len(full), "ex_pandemic_mean": _round(np.mean(ex)) if ex else None, - "ex_pandemic_sd": _round(np.std(ex)) if ex else None, + "ex_pandemic_sd": ( + _round(np.std(ex, ddof=1)) if len(ex) > 1 else None + ), "n_pairs_ex_pandemic": len(ex), } return out @@ -325,23 +337,184 @@ def e2_e11_block() -> tuple[dict, dict]: }, "MainB", ) - e2 = {"by_firmsize_all_industry": detail, "sector_cells": summary} - e11 = { - "status": "floor not derivable from committed extracts", - "margin_proxy": ( - "the ee_hire_rate / ee_separation_rate floors in the E2 " - "block are the destination- and origin-size margins of " - "the E11 origin x destination matrix" - ), + e2 = { + "by_firmsize_all_industry": detail, + "sector_cells": summary, + "by_sex_age": e2_sexage_block(), } + e11 = e11_block() return e2, e11 +#: The rate families carried on the sex x age axis. Same |log YoY +#: ratio| machinery as the firm-size axis, so the two E2 axes are on +#: one footing for the referee round. +SEXAGE_RATE_COLS = { + "hire_rate": "hire_rate", + "separation_rate": "separation_rate", + "j2j_hire_rate": "j2j_hire_rate", + "j2j_separation_rate": "j2j_separation_rate", +} + + +def e2_sexage_block() -> dict: + """E2's registered sex x age gate axis (#192; the #228 extract). + + The floor the earlier draft deferred: E2 is registered by sex x + age, and until the ``sa`` extract landed the committed + tabulations carried no such axis. Cells are the 3 x 9 sex x age + grid at the all-industry margin (margins included, so the + all-sexes and all-ages rows are floorable too), 2015Q1-2025Q1. + """ + frame = targets.load_j2j_sexage() + cells: dict = {} + for (sex, agegrp), cell in frame.groupby(["sex", "agegrp"]): + min_denom = int(cell["MainB"].min()) + rec: dict = { + "sex": int(sex), + "sex_label": cell["sex_label"].iloc[0], + "agegrp": agegrp, + "agegrp_label": cell["agegrp_label"].iloc[0], + "min_denominator_jobs": min_denom, + "thin": min_denom < THIN_JOBS, + } + for name, col in SEXAGE_RATE_COLS.items(): + rec[name] = { + "level_mean": _round(cell[col].mean()), + **_gap_summary(_yoy_gaps(cell, col)), + } + cells[f"sex{int(sex)}_{agegrp}"] = rec + + # Cross-cell summary over the 2 x 8 non-margin cells only: the + # margins are aggregates of them, so pooling both would double + # count and pull the median toward the (much more stable) + # aggregate rows. + detail_cells = frame[(frame["sex"] != 0) & (frame["agegrp"] != "A00")] + summary: dict = { + "n_cells": int(detail_cells.groupby(["sex", "agegrp"]).ngroups), + "note": ( + "non-margin cells only (sex in 1,2 x agegrp A01-A08); the " + "all-sexes / all-ages rows are aggregates of these and " + "are reported per-cell above, not pooled here" + ), + } + for name, col in SEXAGE_RATE_COLS.items(): + means = [] + n_thin = 0 + for _, cell in detail_cells.groupby(["sex", "agegrp"]): + gaps = _yoy_gaps(cell, col) + if not gaps: + continue + means.append(float(np.mean([g for _, g in gaps]))) + if int(cell["MainB"].min()) < THIN_JOBS: + n_thin += 1 + summary[name] = { + "cell_floor_median": _round(np.median(means)), + "cell_floor_p90": _round(np.quantile(means, 0.9)), + "cell_floor_max": _round(np.max(means)), + "n_cells_with_pairs": len(means), + "n_thin_cells": n_thin, + } + return {"cells": cells, "cross_cell": summary} + + +def e11_block() -> dict: + """E11's disposition, restated now that the OD extract exists. + + Not "no extract" any more (#228 commits the full 6 x 6 origin x + destination grid) but still not a floorable cross: the national + detail is published only for 2015Q1-2016Q1, which yields exactly + one same-quarter year-over-year pair per detail cell (2016Q1 vs + 2015Q1). One pair gives a gap but no dispersion, so no + ``mean + k * sd`` floor exists on the detail. The margins run + through 2025Q1 and are floorable. + """ + od = targets.load_j2jod_firmsize() + detail = od[(od["firmsize"] > 0) & (od["firmsize_orig"] > 0)] + observed = detail.dropna(subset=["EE"]) + quarters = ( + observed[["year", "quarter"]] + .drop_duplicates() + .sort_values(["year", "quarter"]) + ) + periods = [(int(y), int(q)) for y, q in quarters.to_numpy()] + pairs_per_cell = { + f"{int(o)}to{int(d)}": len(_yoy_gaps(cell, "EE")) + for (o, d), cell in observed.groupby(["firmsize_orig", "firmsize"]) + } + max_pairs = max(pairs_per_cell.values()) if pairs_per_cell else 0 + + # EE margins are counts, so their YoY variation carries aggregate + # flow growth (a trend, not noise) exactly as raw EarnS carries + # nominal wage growth. Both variants are committed, matching the + # e7_nominal_trend treatment: `ee` is the raw count and `ee_rel` + # is the share of that quarter's all-size EE total, which divides + # the common trend out. + total = ( + od[(od["firmsize_orig"] == 0) & (od["firmsize"] == 0)] + .set_index(["year", "quarter"])["EE"] + .rename("ee_total") + ) + margin = od[(od["firmsize_orig"] == 0) & (od["firmsize"] > 0)].copy() + margin = margin.join(total, on=["year", "quarter"]) + margin["ee_rel"] = margin["EE"] / margin["ee_total"].where( + margin["ee_total"] > 0 + ) + margin_gaps: dict = {} + for code, cell in margin.groupby("firmsize"): + observed_cell = cell.dropna(subset=["EE"]) + margin_gaps[f"firmsize{int(code)}"] = { + "firmsize_label": cell["firmsize_label"].iloc[0], + "ee": _gap_summary(_yoy_gaps(observed_cell, "EE")), + "ee_rel": _gap_summary(_yoy_gaps(observed_cell, "ee_rel")), + } + + return { + "status": ( + "detail floor NOT derivable (one YoY pair per cell); " + "destination-size margin floor derivable" + ), + "detail_window": { + "observed_quarters": [f"{y}Q{q}" for y, q in periods], + "n_quarters": len(periods), + "max_yoy_pairs_per_cell": max_pairs, + "why_not_floorable": ( + "the national origin x destination cross is published " + "only for 2015Q1-2016Q1 (from 2016Q2 every detail " + "cell carries status flag 11); same-quarter " + "year-over-year pairing therefore yields at most one " + "pair per detail cell, which gives a gap but no " + "dispersion, so no mean + k*sd floor exists on the " + "cross. This is a different disposition from the " + "earlier draft's 'no extract committed': the extract " + "exists (#228), the temporal replicate does not" + ), + }, + "destination_size_margin": margin_gaps, + "cross_source_margin_disagreement": { + "all_size_ee_tool_above_flat_file": "37 of 41 quarters", + "all_size_ee_deviation_range_pct": [-1.00, 2.02], + "per_size_deviation_range_pct": [-3.20, 3.67], + "note": ( + "the LED Extraction Tool's margins and the LEHD flat " + "file's d_fs margins are independent publications of " + "the same quantity and disagree by up to ~3% in " + "either direction (provenance entry 6; reproduce with " + "scripts/check_j2jod_margin_agreement.py). Since " + "E11's post-2016Q1 constraints are margins-only, this " + "cross-source wobble bounds how tight any E11 margin " + "threshold can be, independently of the temporal " + "floor above" + ), + }, + } + + def build() -> dict: e2, e11 = e2_e11_block() return { "artifact": "employer_firm_floors", - "version": "draft_v0", + "version": "draft_v0.1", "status": "DRAFT - NOT RATIFIED; C3 not locked; no thresholds", "issue": "192", "workstream": "B", @@ -350,6 +523,8 @@ def build() -> dict: "bds": "data/external/bds_us_firm_size_1978_2022.csv", "qwi": "data/external/qwi_us_firmsize_sector_2015on.csv", "j2j": "data/external/j2j_us_firmsize_sector_2015on.csv", + "j2j_sexage": "data/external/j2j_us_sexage_2015on.csv", + "j2jod": "data/external/j2jod_us_firmsize_od_2015on.csv", "provenance": ("data/external/employer_firm_target_sources.md"), }, "method": ( @@ -397,23 +572,55 @@ def build() -> dict: "coarsened partition (20_99 kept whole), not on the " "five canonical bands" ), - "e2_no_age_sex_axis": ( - "E2 is registered by age x sex, but the committed " - "J2J extract is the demographic-free 'd' tabulation " - "(and the QWI extract is the all-sex all-age " - "margin), matching the ADR 0003 partition rule that " - "reserves the sex/age axes for gate cells. The " - "floors here are aggregate-side (firm-size x sector) " - "stability references only; the age x sex floor " - "needs a J2J 'se' tabulation extract and is deferred " - "to that extract's commit, before C3 locks" + "e2_sex_age_axis_built": ( + "SUPERSEDES draft_v0's 'e2_no_age_sex_axis'. E2's " + "registered sex x age axis is now floored from the " + "committed J2J sex x age extract (#228): the full " + "3 x 9 grid at the all-industry margin, 2015Q1-" + "2025Q1, same |log YoY ratio| machinery as the " + "firm-size axis, reported per cell and pooled over " + "the 2 x 8 non-margin cells. The firm-size x sector " + "floors remain the aggregate-side references they " + "always were; the two E2 axes are now on one " + "footing. Naming correction carried from the earlier " + "draft: LEHD's sex x age tabulation is 'sa'; 'se' is " + "sex x EDUCATION, and the draft_v0 finding named the " + "wrong one" ), - "e11_no_od_extract": ( - "E11's origin x destination firm-size flow reference " - "(J2JOD) is not committed (provenance note: 'a " - "later, separate extract'), so no E11 floor is " - "derivable; the EE hire/separation margins of the " - "committed extract are recorded as partial proxies" + "e11_extract_committed_but_no_temporal_replicate": ( + "SUPERSEDES draft_v0's 'e11_no_od_extract', which is " + "now factually stale: the origin x destination " + "firm-size cross IS committed (#228, the full 6 x 6 " + "grid). The obstacle is temporal, not availability. " + "The national detail is published only for " + "2015Q1-2016Q1 (status flag 11 from 2016Q2), so " + "same-quarter year-over-year pairing yields at most " + "ONE pair per detail cell — a gap with no " + "dispersion, hence no mean + k*sd floor on the " + "cross. The destination-size margins run through " + "2025Q1 and are floored in the e11 block. A second, " + "independent bound on any margin threshold comes " + "from cross-source disagreement: the LED tool's " + "margins and the LEHD flat file's differ by up to " + "~3% in either direction (e11.cross_source_margin_" + "disagreement)" + ), + "release_revision_noise_unfloored": ( + "a third floorable concept, recorded and NOT built: " + "vintage-to-vintage revision noise. LEHD revises " + "across releases, and none of the floors here see " + "that — every extract is a single release (R2026Q1). " + "Observed during the #228 review: LEHD rotated to " + "R2026Q2 mid-round and the J2JOD values for " + "2015Q1-2025Q1 were unchanged across the rotation " + "(all 1,476 rows), which is one datum, on one " + "series, over one rotation — suggestive that " + "revision noise is small for these aggregates, not " + "evidence that it is zero. Building it needs two " + "release-stamped vintages of the same series " + "committed; the C3 referee round should decide " + "whether E1/E2/E6/E7/E11 thresholds must carry a " + "revision allowance on top of the temporal floor" ), "e12_deferred": ( "E12 (AKM moments) has no committed extract: AKM " @@ -433,6 +640,35 @@ def build() -> dict: "rather than choosing one — the C3 referee round " "picks the formulation with both on the record" ), + "floors_not_monotone_in_disaggregation": ( + "an empirical finding from the sex x age build, and " + "a trap for the threshold policy: the temporal " + "floor is NOT monotone in disaggregation. Of the 26 " + "non-aggregate sex x age cells, the number whose " + "ex-pandemic floor is TIGHTER than the all-sexes " + "all-ages cell is 13 (hire), 10 (separation), 6 " + "(j2j hire), 7 (j2j separation). The pattern is " + "interpretable -- the 45-99 age cells are the most " + "stable and the 19-34 cells the least, while the " + "aggregate carries compositional shift the older " + "cells do not -- but the consequence is procedural: " + "a floor measured on a margin CANNOT be used as a " + "conservative bound for the cells beneath it. Every " + "gated cell needs its own floor, or the threshold " + "policy must say explicitly which cell's floor " + "governs (C3 open question 1)" + ), + "e11_margin_trend": ( + "the E11 destination-size margins are EE flow " + "COUNTS, so their year-over-year variation carries " + "aggregate flow growth (a trend, not noise) exactly " + "as raw EarnS carries nominal wage growth. Both are " + "committed: 'ee' (raw counts) and 'ee_rel' (share of " + "the quarter's all-size EE total, which divides the " + "common trend out). The relative variant runs roughly " + "half the raw one; the C3 referee round picks the " + "formulation, as for E7" + ), "e7_nominal_trend": ( "raw EarnS YoY variation embeds aggregate nominal " "wage growth (a trend, not noise); the " diff --git a/tests/test_employer_firm_floors.py b/tests/test_employer_firm_floors.py index ab242e96..6a8530b6 100644 --- a/tests/test_employer_firm_floors.py +++ b/tests/test_employer_firm_floors.py @@ -32,7 +32,7 @@ def artifact() -> dict: def test_artifact_is_a_draft_with_no_thresholds(artifact): assert artifact["artifact"] == "employer_firm_floors" - assert artifact["version"] == "draft_v0" + assert artifact["version"] == "draft_v0.1" assert "DRAFT" in artifact["status"] assert "NOT RATIFIED" in artifact["status"] @@ -128,12 +128,28 @@ def test_method_findings_are_recorded(artifact): findings["e1_no_sector_replicate"] ) assert "straddles the canonical 50 edge" in findings["e1_bds_straddle"] - assert "demographic-free" in findings["e2_no_age_sex_axis"] - assert "not committed" in findings["e11_no_od_extract"] + # The two findings draft_v0 deferred, now superseded rather than + # silently dropped: #228 landed the extracts each one blamed. + assert "e2_no_age_sex_axis" not in findings + assert "e11_no_od_extract" not in findings + assert "SUPERSEDES" in findings["e2_sex_age_axis_built"] + assert "'sa'" in findings["e2_sex_age_axis_built"] + assert "sex x EDUCATION" in findings["e2_sex_age_axis_built"] + assert "SUPERSEDES" in ( + findings["e11_extract_committed_but_no_temporal_replicate"] + ) + assert "ONE pair per detail cell" in ( + findings["e11_extract_committed_but_no_temporal_replicate"] + ) + assert "revision" in findings["release_revision_noise_unfloored"] + assert "not evidence that it is zero" in ( + findings["release_revision_noise_unfloored"] + ) + assert "trend, not noise" in findings["e11_margin_trend"] assert "must not lock with C3" in findings["e12_deferred"] assert "business-cycle" in findings["cycle_signal_in_floors"] assert "nominal wage growth" in findings["e7_nominal_trend"] - assert artifact["e11"]["status"].startswith("floor not derivable") + assert artifact["e11"]["status"].startswith("detail floor NOT") assert artifact["e12"]["status"].startswith("deferred") @@ -142,3 +158,109 @@ def test_reproduces_from_committed_extracts(artifact): from build_employer_firm_floors import build assert json.loads(json.dumps(build())) == artifact + + +def test_e2_sex_age_axis_is_built(artifact): + """E2's registered gate axis has a floor, not a deferral.""" + block = artifact["e2"]["by_sex_age"] + # Full 3 sexes x 9 age groups, margins included. + assert len(block["cells"]) == 27 + for cell in block["cells"].values(): + for name in ( + "hire_rate", + "separation_rate", + "j2j_hire_rate", + "j2j_separation_rate", + ): + floor = cell[name] + assert floor["n_pairs"] > 0 + assert floor["floor_abs_log_ratio_mean"] > 0 + assert floor["floor_abs_log_ratio_sd"] is not None + # Ex-pandemic is a strict subset of the full sample. + assert floor["n_pairs_ex_pandemic"] < floor["n_pairs"] + + +def test_e2_sex_age_cross_cell_excludes_the_margins(artifact): + """Pooling margins with the cells they aggregate would double count.""" + summary = artifact["e2"]["by_sex_age"]["cross_cell"] + # 2 sexes x 8 age groups; the all-sexes / all-ages rows are out. + assert summary["n_cells"] == 16 + assert "non-margin cells only" in summary["note"] + + +def test_e2_sex_age_floors_are_not_monotone_in_disaggregation(artifact): + """A margin's floor does not bound the floors beneath it. + + The intuition that disaggregating can only add noise is wrong + here, and the threshold policy depends on knowing that: the + 45-99 age cells are more temporally stable than the all-sexes + all-ages cell, which carries compositional shift they do not. + So a floor measured on a margin cannot stand in as a + conservative bound for its constituent cells. + """ + cells = artifact["e2"]["by_sex_age"]["cells"] + tighter = { + family: sum( + 1 + for key, cell in cells.items() + if key != "sex0_A00" + and cell[family]["ex_pandemic_mean"] + < cells["sex0_A00"][family]["ex_pandemic_mean"] + ) + for family in ( + "hire_rate", + "separation_rate", + "j2j_hire_rate", + "j2j_separation_rate", + ) + } + assert tighter == { + "hire_rate": 13, + "separation_rate": 10, + "j2j_hire_rate": 6, + "j2j_separation_rate": 7, + } + # And the direction of the pattern: oldest tighter than youngest. + assert ( + cells["sex1_A08"]["separation_rate"]["ex_pandemic_mean"] + < cells["sex1_A04"]["separation_rate"]["ex_pandemic_mean"] + ) + + +def test_non_monotonicity_is_recorded_as_a_finding(artifact): + finding = artifact["method_findings"][ + "floors_not_monotone_in_disaggregation" + ] + assert "CANNOT be used as a conservative bound" in finding + + +def test_e11_detail_window_gives_one_pair_per_cell(artifact): + """The reason the E11 cross has no floor, pinned as a number. + + Not availability -- the extract is committed (#228). The national + origin x destination detail is published for 2015Q1-2016Q1 only, + so same-quarter YoY pairing yields one pair per cell: a gap with + no dispersion, hence no mean + k*sd floor. + """ + window = artifact["e11"]["detail_window"] + assert window["n_quarters"] == 5 + assert window["observed_quarters"][0] == "2015Q1" + assert window["observed_quarters"][-1] == "2016Q1" + assert window["max_yoy_pairs_per_cell"] == 1 + + +def test_e11_margin_relative_floor_is_tighter_than_raw(artifact): + """EE counts carry aggregate flow growth, as EarnS carries wages.""" + for cell in artifact["e11"]["destination_size_margin"].values(): + assert cell["ee_rel"]["floor_abs_log_ratio_mean"] < ( + cell["ee"]["floor_abs_log_ratio_mean"] + ) + + +def test_e11_records_the_cross_source_margin_disagreement(artifact): + """The margins-only bound that survives the missing detail.""" + note = artifact["e11"]["cross_source_margin_disagreement"] + assert note["all_size_ee_tool_above_flat_file"] == "37 of 41 quarters" + lo, hi = note["per_size_deviation_range_pct"] + assert lo < 0 < hi + assert "margins-only" in note["note"] diff --git a/tests/tier_counts.json b/tests/tier_counts.json index 2cda1646..46fd9132 100644 --- a/tests/tier_counts.json +++ b/tests/tier_counts.json @@ -2,7 +2,7 @@ "schema_version": 1, "counts": { "unit": 755, - "artifact": 1101, + "artifact": 1116, "integration_psid": 804, "reproduction_legacy": 520, "oracle_policyengine": 159 From 28ced1cbc83b5cf9dafd213c48497e2d16caeeb0 Mon Sep 17 00:00:00 2001 From: Vahid Ahmadi Date: Thu, 23 Jul 2026 11:07:02 +0100 Subject: [PATCH 07/17] Promote the B-side floors to v1: three digests pinned (#230 s12.2) runs/employer_firm_floors_draft_v0.json -> runs/employer_firm_floors_v1.json, following the m6_holdout_floors_v* convention. v1 is a PINNING event, not a ratification: status stays NOT RATIFIED with no thresholds, and the numbers bind nothing until the C3 amendment PR merges. The status string says so, test-asserted, because "v1" invites the opposite reading. Three digests, each catching a different drift: - the artifact's own bytes -- an edited artifact; - the builder's bytes -- a changed method that lands on the same numbers, or a reproduction test rewritten to agree with a new build. test_reproduces_from_committed_extracts compares builder to artifact, so editing both together passes it; pinning the builder makes that edit visible; - every input extract's bytes, recorded into the artifact at build time. This is the one a reproduction test structurally cannot catch: re-fetch an extract and the artifact and a rebuild from it agree with each other while both differ from what the C3 record was shown. Verified by mutating an extract and confirming the test fails, then restoring. A companion test asserts no source can be consumed without appearing in the digest block, so adding an extract without pinning it fails rather than passing silently. Artifact tier 1116 -> 1121. Co-Authored-By: Claude Opus 4.8 (1M context) --- ...t_v0.json => employer_firm_floors_v1.json} | 12 +- scripts/build_employer_firm_floors.py | 42 ++++++- tests/test_employer_firm_floors.py | 110 ++++++++++++++++-- tests/tier_counts.json | 2 +- 4 files changed, 146 insertions(+), 20 deletions(-) rename runs/{employer_firm_floors_draft_v0.json => employer_firm_floors_v1.json} (98%) diff --git a/runs/employer_firm_floors_draft_v0.json b/runs/employer_firm_floors_v1.json similarity index 98% rename from runs/employer_firm_floors_draft_v0.json rename to runs/employer_firm_floors_v1.json index 3cafc4e4..c09c699b 100644 --- a/runs/employer_firm_floors_draft_v0.json +++ b/runs/employer_firm_floors_v1.json @@ -1,7 +1,15 @@ { "artifact": "employer_firm_floors", - "version": "draft_v0.1", - "status": "DRAFT - NOT RATIFIED; C3 not locked; no thresholds", + "version": "v1", + "status": "PRE-LOCK REFERENCE - NOT RATIFIED; C3 not locked; no thresholds. v1 marks the artifact sha256-pinned and reproduction-tested (#230 section 12.2 item 2), which is a pinning event, not a ratification: the numbers here bind nothing until the C3 amendment PR merges", + "input_extract_sha256": { + "susb_us_sector_size_2022.csv": "b2db9502cf71480f4284cbeb8b78f31e8eb77f63963f679c167bfd40ade9d5e0", + "bds_us_firm_size_1978_2022.csv": "0cbfec27392d4d328ddf8be9800c30a65d954d3a50ef170e9c98fc4babc82b31", + "qwi_us_firmsize_sector_2015on.csv": "a173e5995cd7afeeb82e8afa543ab6e1a1d8c1b4089c4e50a947696e98e47dbd", + "j2j_us_firmsize_sector_2015on.csv": "118d4a0fd4c2c7cd3dab98bb81d1c8df668d5d0c83ebf9d7e3fd09240fd62e82", + "j2j_us_sexage_2015on.csv": "6ca16b98b3e809ebf4493f6884c75bee712c727cce16ddc219e0fca97e7edf60", + "j2jod_us_firmsize_od_2015on.csv": "0f83df008ae498643b66ecf25187170014988f5fb1f761c84cf9882376e3bef6" + }, "issue": "192", "workstream": "B", "sources": { diff --git a/scripts/build_employer_firm_floors.py b/scripts/build_employer_firm_floors.py index deff4169..8a3f2062 100644 --- a/scripts/build_employer_firm_floors.py +++ b/scripts/build_employer_firm_floors.py @@ -41,11 +41,12 @@ python scripts/build_employer_firm_floors.py -writes ``runs/employer_firm_floors_draft_v0.json``. +writes ``runs/employer_firm_floors_v1.json``. """ from __future__ import annotations +import hashlib import json import math import sys @@ -58,10 +59,34 @@ from populace_dynamics.firms import banding, targets # noqa: E402 -ARTIFACT = Path(__file__).resolve().parents[1] / ( - "runs/employer_firm_floors_draft_v0.json" +ROOT = Path(__file__).resolve().parents[1] +ARTIFACT = ROOT / "runs/employer_firm_floors_v1.json" + +#: Committed extracts this build consumes. Their digests go into the +#: artifact, so "v1" pins what it was built FROM, not only its own +#: bytes: a silently re-fetched extract changes the floors, and a +#: reproduction test that reads the same changed file would still +#: pass. v1 is a pinning event, not a ratification -- the artifact +#: stays pre-lock with no thresholds until the C3 amendment merges. +INPUT_EXTRACTS = ( + "susb_us_sector_size_2022.csv", + "bds_us_firm_size_1978_2022.csv", + "qwi_us_firmsize_sector_2015on.csv", + "j2j_us_firmsize_sector_2015on.csv", + "j2j_us_sexage_2015on.csv", + "j2jod_us_firmsize_od_2015on.csv", ) + +def _input_digests() -> dict[str, str]: + """sha256 of every committed extract the floors are built from.""" + out = {} + for name in INPUT_EXTRACTS: + path = ROOT / "data" / "external" / name + out[name] = hashlib.sha256(path.read_bytes()).hexdigest() + return out + + #: Pandemic years: YoY pairs touching these are reported separately #: (never dropped from the full-sample figures). PANDEMIC_YEARS = frozenset({2020, 2021}) @@ -514,8 +539,15 @@ def build() -> dict: e2, e11 = e2_e11_block() return { "artifact": "employer_firm_floors", - "version": "draft_v0.1", - "status": "DRAFT - NOT RATIFIED; C3 not locked; no thresholds", + "version": "v1", + "status": ( + "PRE-LOCK REFERENCE - NOT RATIFIED; C3 not locked; no " + "thresholds. v1 marks the artifact sha256-pinned and " + "reproduction-tested (#230 section 12.2 item 2), which " + "is a pinning event, not a ratification: the numbers " + "here bind nothing until the C3 amendment PR merges" + ), + "input_extract_sha256": _input_digests(), "issue": "192", "workstream": "B", "sources": { diff --git a/tests/test_employer_firm_floors.py b/tests/test_employer_firm_floors.py index 6a8530b6..c1cc500f 100644 --- a/tests/test_employer_firm_floors.py +++ b/tests/test_employer_firm_floors.py @@ -1,15 +1,28 @@ -"""Pin the DRAFT employer-firm aggregate noise-floor artifact (#192). - -``runs/employer_firm_floors_draft_v0.json`` is a reported anchor -(workstream B counterpart to the #212 battery): DRAFT, NOT RATIFIED, -no thresholds — it commits the floor-building method for the E1/E2/ -E6/E7/E11 aggregate references, and the E11/E12 deferral findings, -before C3 locks. These tests pin its internal consistency and — since -the source extracts are committed — always reproduce it in full. +"""Pin the v1 employer-firm aggregate noise-floor artifact (#192). + +``runs/employer_firm_floors_v1.json`` is a reported anchor +(workstream B counterpart to the #212 battery): PRE-LOCK, NOT +RATIFIED, no thresholds — it commits the floor-building method for +the E1/E2/E6/E7/E11 aggregate references, and the E11/E12 deferral +findings, before C3 locks. + +**v1 is a pinning event, not a ratification** (#230 section 12.2 +item 2). Three digests are pinned, and each catches a different way +the artifact could drift out from under the C3 record: + +* the artifact's own bytes — an edited artifact; +* the builder's bytes — a changed method that happens to land on + the same numbers, or a reproduction test quietly rewritten to + agree with a new build; +* every input extract's bytes — a re-fetched source. This is the + one a reproduction test alone cannot catch: rebuild from a + silently changed extract and the artifact and the rebuild agree + with each other while both differ from what C3 was shown. """ from __future__ import annotations +import hashlib import json import sys from pathlib import Path @@ -18,8 +31,15 @@ from populace_dynamics.firms import banding -ARTIFACT = Path(__file__).resolve().parents[1] / ( - "runs/employer_firm_floors_draft_v0.json" +ROOT = Path(__file__).resolve().parents[1] +ARTIFACT = ROOT / "runs/employer_firm_floors_v1.json" +BUILDER = ROOT / "scripts/build_employer_firm_floors.py" + +ARTIFACT_SHA256 = ( + "c9c50b7521b1df3ee0c9ffc942a3aa8593fc89c0eec8d1cc1682ce3a426716ed" +) +BUILDER_SHA256 = ( + "b85c2234289c99e166f9343a69a1bb14417b98bb77351b9ba9ca4131f3625677" ) CANONICAL_NAMES = {band.name for band in banding.CANONICAL_BANDS} @@ -32,8 +52,11 @@ def artifact() -> dict: def test_artifact_is_a_draft_with_no_thresholds(artifact): assert artifact["artifact"] == "employer_firm_floors" - assert artifact["version"] == "draft_v0.1" - assert "DRAFT" in artifact["status"] + assert artifact["version"] == "v1" + # "DRAFT" gave way to "PRE-LOCK REFERENCE" at v1: the artifact + # is pinned now, so calling it a draft would misdescribe it. What + # must not weaken is the ratification status. + assert "PRE-LOCK REFERENCE" in artifact["status"] assert "NOT RATIFIED" in artifact["status"] def keys_of(node): @@ -264,3 +287,66 @@ def test_e11_records_the_cross_source_margin_disagreement(artifact): lo, hi = note["per_size_deviation_range_pct"] assert lo < 0 < hi assert "margins-only" in note["note"] + + +# --------------------------------------------------------------- +# v1 pinning (#230 section 12.2 item 2) +# --------------------------------------------------------------- + + +def _sha256(path: Path) -> str: + return hashlib.sha256(path.read_bytes()).hexdigest() + + +def test_artifact_sha256_is_pinned(): + assert _sha256(ARTIFACT) == ARTIFACT_SHA256 + + +def test_builder_sha256_is_pinned(): + """A changed method must not slip past the reproduction test. + + ``test_reproduces_from_committed_extracts`` compares the builder + against the artifact, so editing both together passes. Pinning + the builder makes that edit visible. + """ + assert _sha256(BUILDER) == BUILDER_SHA256 + + +def test_input_extract_digests_match_the_committed_files(artifact): + """The drift a reproduction test structurally cannot catch. + + If an extract is re-fetched, the artifact and a rebuild from it + agree with each other while both differ from what the C3 record + was shown. Only a digest recorded *at build time* and compared + against the file *now* separates those. + """ + recorded = artifact["input_extract_sha256"] + for name, digest in recorded.items(): + path = ROOT / "data" / "external" / name + assert path.exists(), f"{name} is recorded but not committed" + assert _sha256(path) == digest, ( + f"{name} has changed since the floors were built; rebuild " + "the artifact and re-pin deliberately, and say so in the " + "C3 record — the floors move with it" + ) + + +def test_every_consumed_extract_is_digest_recorded(artifact): + """No source may be consumed without appearing in the pin.""" + recorded = set(artifact["input_extract_sha256"]) + sources = { + Path(value).name + for key, value in artifact["sources"].items() + if key != "provenance" + } + assert sources == recorded + + +def test_v1_is_pinned_but_not_ratified(artifact): + # The distinction the whole ceremony rests on: pinning makes the + # numbers immovable, not binding. Thresholds arrive only with the + # C3 amendment PR. + status = artifact["status"] + assert "NOT RATIFIED" in status + assert "no thresholds" in status + assert "not a ratification" in status diff --git a/tests/tier_counts.json b/tests/tier_counts.json index 46fd9132..3080f19e 100644 --- a/tests/tier_counts.json +++ b/tests/tier_counts.json @@ -2,7 +2,7 @@ "schema_version": 1, "counts": { "unit": 755, - "artifact": 1116, + "artifact": 1121, "integration_psid": 804, "reproduction_legacy": 520, "oracle_policyengine": 159 From fd4c372aa7c043f1f567c5552451a1268e0d6731 Mon Sep 17 00:00:00 2001 From: Vahid Ahmadi Date: Thu, 23 Jul 2026 11:21:08 +0100 Subject: [PATCH 08/17] Rename the interface contracts C1/C2/C3 -> IC1/IC2/IC3 (ADR 0003 am. 1) Naming only: no column, band, code mapping, or gate definition changes, and the numbering is preserved 1:1 so every prior reference maps by prefixing "I". A bare "C1" meant four different things in this repo: the gate_w1 fingerprints (gates.yaml fingerprints.c1/.c2), the SSA Trustees table II.C1, an RNG substream in household composition, and the employer-firm interface contracts. Only the last is repo-internal, pre-lock, and ours -- the fingerprints sit inside gate_w1, which is locked: true, so renaming those would cost a public amendment plus a fresh referee round. Timing is the point. IC3 (the employer gate block) is about to be written into gates.yaml, which already contains fingerprints.c1 and fingerprints.c2. A block named C3 locking next to them makes either rename cost exactly what the fingerprint row of that table already costs. Vahid flagged the collision on #192 before the referee round; this closes it while it is still free. Touches frozen ADR 0003 text, so it is a joint-PR change under the IC1/IC2 freeze rule -- procedurally, not because anything moved. Prior discussion keeps the old names; the ADR carries the mapping. Also corrects a stale claim in sipp_jobs: the module said "ADR 0003 is Proposed, not frozen" as the reason job_spells is IC1-preview. It is Accepted and IC1 is frozen; what is still preview-grade is the collapse's single-ref_year coverage, which is what the docstring now says. Co-Authored-By: Claude Opus 4.8 (1M context) --- docs/adr/0003-employer-firm-extension.md | 76 ++++++++++++++------ scripts/build_noemp_band_evidence.py | 2 +- src/populace_dynamics/data/asec_firm_size.py | 4 +- src/populace_dynamics/data/sipp_jobs.py | 26 ++++--- src/populace_dynamics/firms/__init__.py | 2 +- src/populace_dynamics/firms/banding.py | 4 +- tests/test_firms_banding.py | 2 +- tests/test_noemp_band_evidence.py | 2 +- 8 files changed, 76 insertions(+), 42 deletions(-) diff --git a/docs/adr/0003-employer-firm-extension.md b/docs/adr/0003-employer-firm-extension.md index b80236e7..1b6591f3 100644 --- a/docs/adr/0003-employer-firm-extension.md +++ b/docs/adr/0003-employer-firm-extension.md @@ -1,15 +1,45 @@ -# ADR 0003: Employer-firm extension — C1 spell schema and C2 canonical firm-size banding +# ADR 0003: Employer-firm extension — IC1 spell schema and IC2 canonical firm-size banding -**Status:** Accepted — C1 and C2 frozen 2026-07-16. From this +**Status:** Accepted — IC1 and IC2 frozen 2026-07-16. From this point the contracts change only by joint PR between workstreams A and B ([populace-dynamics#192](https://github.com/PolicyEngine/populace-dynamics/issues/192)). +**Amendment 1 (naming, no semantic change).** The interface +contracts were originally named `C1`/`C2`/`C3`. They are renamed +`IC1`/`IC2`/`IC3` — *interface contract* — with no change to any +column, band, code mapping, or gate definition. This is a +joint-PR change because it edits frozen contract text, not because +anything in the contracts moved; the numbering is preserved 1:1, so +every prior reference maps by prefixing `I`. + +**Why, and why this side moves.** In this repository a bare "C1" +already meant four different things: + +| sense | example | can it be renamed? | +|---|---|---| +| gate_w1 **fingerprints** `c1`/`c2` | `gates.yaml` `fingerprints.c1` (PPI↔NRA) | **No** — inside `gate_w1`, which is `locked: true`. Renaming needs a public amendment plus a fresh referee round | +| SSA Trustees **table** II.C1 | `data/external/ssa_tr_2014_ii_c1.*` | No — an external publisher's table label | +| RNG **substream** C3 | household-composition `nonfamily_bridge` | Unrelated component; renaming is churn for no gain | +| **interface contracts** C1/C2/C3 | this ADR | **Yes** — the only set that is repo-internal, pre-lock, and ours | + +The collision was flagged on #192 before the C3 referee round with +the note that it would confuse referees. It is fixed now rather +than later for one reason: `IC3` (the employer gate block) is +about to be written into `gates.yaml`, which already contains +`fingerprints.c1` and `fingerprints.c2`. Once a block named `C3` +locks alongside them, renaming either set costs an amendment and a +fresh referee round — the exact cost this table shows the +fingerprint side already carries. + +Prior discussion (issue #192, the ADR history, merged PR bodies) +uses the old names and is not rewritten; this note is the mapping. + **Sign-off:** @vahid-ahmadi (Workstream B, author) · @daphnehanse11 (Workstream A) — the joint sign-off is recorded by the merge of the freeze PR: authorship by one workstream owner plus approval by the other. First scheduled amendment (pre-registered below): -the C1 ``hours_band``/monthly-hours column once phase-1 establishes +the IC1 ``hours_band``/monthly-hours column once phase-1 establishes SIPP's supportable hours granularity. ## Context @@ -17,15 +47,15 @@ SIPP's supportable hours granularity. The employer-firm plan (`docs/plans/employer-firm-plan.html`) splits the extension into workstream A (person side: SIPP spells, CPS hosts, imputation) and workstream B (firm side: external targets, banding, -calibration, register), meeting at three interface contracts. C1 (the -spell schema) and C2 (canonical firm-size banding and its semantics) +calibration, register), meeting at three interface contracts. IC1 (the +spell schema) and IC2 (canonical firm-size banding and its semantics) freeze in week 1. This ADR records both, plus the target/gate partition rule, folding in the four contract-affecting findings from the week-1 review on issue #192. ## Decision -### C2 — canonical firm-size banding +### IC2 — canonical firm-size banding 1. **Semantics (review finding F5).** The canonical firm-size variable means **administrative enterprise size**: total @@ -33,7 +63,7 @@ the week-1 review on issue #192. counts it. Survey labels are noisy measures of that quantity — CPS ASEC firm size (worker-reported, all locations, previous calendar year's longest job — under either the raw Census `NOEMP` - or the IPUMS `FIRMSIZE` coding; see C2.5) is the primary training + or the IPUMS `FIRMSIZE` coding; see IC2.5) is the primary training label; SIPP 2014+ `EJB1_EMPSIZE` (establishment size) is a proxy chain. SUSB is therefore the correct E1 reference. 2. **Bands are headcount bands.** Five canonical bands with edges at @@ -43,7 +73,7 @@ the week-1 review on issue #192. both QWI (20-49 / 50-249) and the detailed SUSB classes (40-49 / 50-74) support it. FTE-denominated thresholds (the ACA cut is 50 full-time equivalents at 30 hours/week, not headcount) are - resolved by a person-side hours join — out of C2 scope. + resolved by a person-side hours join — out of IC2 scope. 3. **Mappings are total but explicitly ambiguous where the source is coarse.** Every raw code from every source maps to exactly one `BandSpan` (a contiguous run of canonical bands with an `exact` @@ -65,7 +95,7 @@ the week-1 review on issue #192. replication (weighted code shares by year vs. SUSB) is committed as `runs/noemp_band_evidence_v1.json` with its build script and pinning tests (#211) — the reported-anchor convention, since it - is derived evidence rather than a source extract — for the C3 + is derived evidence rather than a source extract — for the IC3 record. 5. **The person-side coding is explicit, not inferred (seam with #194).** The raw Census ASEC person file carries `NOEMP` @@ -85,7 +115,7 @@ the week-1 review on issue #192. emit `CanonicalBand` directly), never feed `NOEMP` integers to the `ipums_firmsize` route. -### C1 — job-spell schema +### IC1 — job-spell schema One tidy table, written by workstream A, read by workstream B: @@ -96,7 +126,7 @@ One tidy table, written by workstream A, read by workstream B: | `start_period` | period | first period of the spell | | `end_period` | period | last period; open spells use a sentinel | | `industry` | str | NAICS major (sector) group | -| `firm_size_band` | enum | canonical band per C2 (`CanonicalBand`) | +| `firm_size_band` | enum | canonical band per IC2 (`CanonicalBand`) | | `class_of_worker` | enum | private / federal / state-local government / self-employed / unpaid family | | `earnings_share` | float | share of the person's period earnings from this job | | `primary_job` | bool | phase 0 is primary-job-only | @@ -111,7 +141,7 @@ One tidy table, written by workstream A, read by workstream B: from the SUSB/QWI calibration universe; self-employed spells have no defined `firm_size_band`. - **Geography joins from the person table.** QWI/J2J targets are - state-level; C1 deliberately carries no geography column. The + state-level; IC1 deliberately carries no geography column. The state of a spell is the host person's state at `start_period`, joined on `person_id` — the join key lives on the person table, not the spell table. @@ -122,9 +152,9 @@ One tidy table, written by workstream A, read by workstream B: compliance, issue #192 — the 80-hours-per-month test of 7 CFR 273.24 and the 3-in-36 countable-month clock need month-resolved hours, not spell start/end plus annual earnings). - C1 as frozen carries no hours column, so it **cannot yet serve + IC1 as frozen carries no hours column, so it **cannot yet serve monthly-hours consumers**; a `hours_band` (or monthly hours) - column is the first scheduled C1 amendment, to be added by joint + column is the first scheduled IC1 amendment, to be added by joint PR once workstream A's phase-1 spell imputation establishes what hours granularity SIPP can support. Consumers must not proxy monthly compliance from annual quantities in the meantime. @@ -146,10 +176,10 @@ phase-0 QRF therefore comes from a named bridge, not an implicit one: bridge, aged forward. 2. **Proxy chain:** SIPP 2014+ establishment size x tenure, mapped through the establishment-to-enterprise noise model implied by - the C2 semantics. + the IC2 semantics. 3. **Pre-registered caveat:** the ASEC reference-period mismatch (`FIRMSIZE` = last calendar year's longest job; tenure supplement - = current job) is carried into the C3 gate notes as a known + = current job) is carried into the IC3 gate notes as a known label-misalignment term. ### Target/gate partition rule @@ -161,7 +191,7 @@ firm-size x sector flow margins committed under `data/external/`; gates E1/E2/E7/E11 score on held-out dimensions of the same sources (the sex/age demographic axes of QWI, the firm-age axis, and the state axis) that calibration never touches. The exact cell lists lock -with C3 after the floor runs. +with IC3 after the floor runs. Three unit rules recorded now (issue #192 review, point 4; branch review finding 3): @@ -171,7 +201,7 @@ review finding 3): so calibrating person-spells to QWI cells carries a wedge on the order of the multiple-jobholding rate (~5%, time-varying). A job-count -> person-count adjustment is an explicit pre-registered - C3 item, not a footnote. + IC3 item, not a footnote. - **QWI publishes mean earnings (`EarnS`), never medians**; E7 is stated on means. - **J2J's employer universe is broader than SUSB/QWI's.** The @@ -182,7 +212,7 @@ review finding 3): sectors (notably 61 Educational Services and 62 Health Care). Any E11 cell definition must either restate J2J on a private-comparable basis or carry this scope difference as a pre-registered caveat; - the choice locks with C3. + the choice locks with IC3. ## Consequences @@ -193,8 +223,8 @@ review finding 3): workstreams push directly to each other's branches when useful (reader fixes, rebases, contract-text corrections — this has run in both directions and worked). The norm the freeze makes - explicit: a change that touches contract semantics (C1 columns, - C2 bands/codings, gate definitions) requires the *other* + explicit: a change that touches contract semantics (IC1 columns, + IC2 bands/codings, gate definitions) requires the *other* workstream owner's approval on the PR even when the commit was pushed directly, so pre-registration always records who decided, not just who typed. @@ -204,6 +234,6 @@ review finding 3): references, analogous to the NCHS/Census/ONS files — never scored model output. Raw microdata is never committed. - No change to `gates.yaml`. Employer gates E1-E12 lock as a new - block (C3) after noise-floor runs and a referee round, via the - standard amendment process; no one-shot candidate runs before C3 + block (IC3) after noise-floor runs and a referee round, via the + standard amendment process; no one-shot candidate runs before IC3 locks. diff --git a/scripts/build_noemp_band_evidence.py b/scripts/build_noemp_band_evidence.py index dc1a23cd..9bcc886c 100644 --- a/scripts/build_noemp_band_evidence.py +++ b/scripts/build_noemp_band_evidence.py @@ -3,7 +3,7 @@ REPORTED ANCHOR, NOT A GATE RUN. Like the mortality/claiming/ disability floors, this reads no gate and decides nothing on its own; it is committed evidence pinned by a reproduction test. It -records the empirical basis for the C2 banding decision's treatment +records the empirical basis for the IC2 banding decision's treatment of CPS ASEC firm size: **the 2019+ data dictionaries' relabeling of NOEMP codes 2/3 (from 10-49 / 50-99 to 10-24 / 25-99) never happened in the instrument.** diff --git a/src/populace_dynamics/data/asec_firm_size.py b/src/populace_dynamics/data/asec_firm_size.py index 5f32d12d..6f78c3a3 100644 --- a/src/populace_dynamics/data/asec_firm_size.py +++ b/src/populace_dynamics/data/asec_firm_size.py @@ -22,7 +22,7 @@ share (~7.5%), while a true 25-99 band carries ~15%. This reader therefore uses the 10-49 / 50-99 reading for all years and records the dictionary conflict here rather than silently following the -2019+ label text into a factor-two mis-band. Consequence for C2: +2019+ label text into a factor-two mis-band. Consequence for IC2: the 50-employee edge (ACA and state mandates) is directly observed in every supported year — the "post-2019 label cannot resolve the 50 cut" problem stated in earlier drafts dissolves. @@ -374,7 +374,7 @@ def firm_size_tabulation( "class_of_worker", ), ) -> pd.DataFrame: - """Weighted firm-size tabulation — the C2 evidence artifact. + """Weighted firm-size tabulation — the IC2 evidence artifact. Args: records: Output of :func:`read_asec_firm_size` (one or more diff --git a/src/populace_dynamics/data/sipp_jobs.py b/src/populace_dynamics/data/sipp_jobs.py index c722c9e5..65be95df 100644 --- a/src/populace_dynamics/data/sipp_jobs.py +++ b/src/populace_dynamics/data/sipp_jobs.py @@ -1,4 +1,4 @@ -"""SIPP job-level monthly records and C1-preview spells (issue #200). +"""SIPP job-level monthly records and IC1-preview spells (issue #200). The 2014-redesign SIPP public-use files are the employer-firm plan's primary label panel (#192): one row per person-month (``SSUID`` x @@ -8,7 +8,7 @@ within-panel employer-attachment key that phase-1 transition hazards rest on. ``EJB{n}_EMPSIZE`` measures **establishment** size at the worker's location (the redesign dropped the all-locations question), -so it is the C2 proxy-chain input, never firm size (ADR 0003; +so it is the IC2 proxy-chain input, never firm size (ADR 0003; ``firms/banding.py``). Every variable this reader touches was verified against the Census @@ -28,10 +28,14 @@ string-typed in the API schema. ``job_spells`` collapses maximal consecutive-month runs per -(person, job id) into spell rows whose shape mirrors the C1 spell -schema. It is labeled **C1-preview**: ADR 0003 is Proposed, not -frozen, and this output also serves as Workstream B's generator for -C1-conforming fixture files. Attribute changes inside a spell +(person, job id) into spell rows whose shape mirrors the IC1 spell +schema. It is still labeled **IC1-preview**, but for a narrower +reason than when it was written: ADR 0003 is now Accepted and IC1 +is frozen, so what remains preview-grade is this collapse's own +coverage (single ``ref_year`` only — cross-year spell linkage +raises rather than guessing), not the schema's status. The output +also serves as Workstream B's generator for IC1-conforming fixture +files. Attribute changes inside a spell (class of worker, industry, establishment size) are surfaced via ``attributes_constant`` — never silently averaged. @@ -495,12 +499,12 @@ def read_sipp_job_months( def job_spells(job_months: pd.DataFrame) -> pd.DataFrame: - """Collapse job-months into C1-preview spell rows. + """Collapse job-months into IC1-preview spell rows. A spell is a maximal run of consecutive reference months for one - (person, job id). The output mirrors the C1 spell schema of ADR + (person, job id). The output mirrors the IC1 spell schema of ADR 0003 (Proposed — this is a preview, not the frozen contract) and - doubles as Workstream B's generator for C1-conforming fixtures. + doubles as Workstream B's generator for IC1-conforming fixtures. Args: job_months: Output of :func:`read_sipp_job_months`. @@ -560,7 +564,7 @@ def job_spells(job_months: pd.DataFrame) -> pd.DataFrame: ] ) - # Cross-year spell linkage is undefined in this C1 preview: the + # Cross-year spell linkage is undefined in this IC1 preview: the # break/run detection, the person-month earnings lookup, and the # spell edges all key on the calendar ``month`` (1-12) alone, so two # different reference years sharing a month would collapse into one @@ -575,7 +579,7 @@ def job_spells(job_months: pd.DataFrame) -> pd.DataFrame: raise ValueError( "job_spells received job-months spanning multiple ref_years " f"({sorted(int(y) for y in ref_years)}); cross-year spell " - "linkage is undefined in this C1 preview. Collapse one SIPP " + "linkage is undefined in this IC1 preview. Collapse one SIPP " "file's months at a time." ) diff --git a/src/populace_dynamics/firms/__init__.py b/src/populace_dynamics/firms/__init__.py index daa46544..9748b63e 100644 --- a/src/populace_dynamics/firms/__init__.py +++ b/src/populace_dynamics/firms/__init__.py @@ -1,6 +1,6 @@ """Employer-firm extension, workstream B (firm side). -Canonical firm-size banding (interface contract C2) and label-verified +Canonical firm-size banding (interface contract IC2) and label-verified loaders for the committed external target extracts (SUSB, BDS, QWI, J2J). See ``docs/adr/0003-employer-firm-extension.md`` and issue #192. """ diff --git a/src/populace_dynamics/firms/banding.py b/src/populace_dynamics/firms/banding.py index 67843686..df02e2e8 100644 --- a/src/populace_dynamics/firms/banding.py +++ b/src/populace_dynamics/firms/banding.py @@ -1,4 +1,4 @@ -"""Canonical firm-size banding — interface contract C2. +"""Canonical firm-size banding — interface contract IC2. **Semantics (review finding F5).** The canonical variable means *administrative enterprise size*: the total employment of the legal @@ -26,7 +26,7 @@ Bands are **headcount** bands. Policy thresholds stated in FTEs (the ACA applicable-large-employer cut is 50 *full-time equivalents* at 30 hours/week, not headcount) are handled by a person-side hours join and -are out of C2 scope. +are out of IC2 scope. **Canonical bands.** Five bands with edges at 10 / 50 / 100 / 500:: diff --git a/tests/test_firms_banding.py b/tests/test_firms_banding.py index ae8e1f3f..3c474b64 100644 --- a/tests/test_firms_banding.py +++ b/tests/test_firms_banding.py @@ -1,4 +1,4 @@ -"""Tests for the canonical firm-size banding (contract C2). +"""Tests for the canonical firm-size banding (contract IC2). Checks the properties the contract promises: canonical bands partition the positive integers; every raw source code maps to diff --git a/tests/test_noemp_band_evidence.py b/tests/test_noemp_band_evidence.py index 1a98c64a..4f1c1c44 100644 --- a/tests/test_noemp_band_evidence.py +++ b/tests/test_noemp_band_evidence.py @@ -1,7 +1,7 @@ """Pin the NOEMP band-label evidence artifact (issue #192). The committed ``runs/noemp_band_evidence_v1.json`` records the -discontinuity test behind the C2 decision to read ASEC NOEMP codes +discontinuity test behind the IC2 decision to read ASEC NOEMP codes 2/3 as 10-49 / 50-99 in every year. These tests pin the artifact's internal consistency, and — when the ASEC files are staged — reproduce it from the raw data. From 3fa68007f51a186ba0fb5b9e4076e036a9ac38c1 Mon Sep 17 00:00:00 2001 From: Vahid Ahmadi Date: Thu, 23 Jul 2026 15:41:30 +0100 Subject: [PATCH 09/17] Address review: finish the Proposed fix, rename the operative plan MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Two should-fixes from Daphne's #277 review: 1. The stale "ADR 0003 (Proposed — this is a preview, not the frozen contract)" text was corrected in the module docstring but survived in `job_spells`'s own docstring. Post-merge the ADR says Accepted while that line said Proposed. It now mirrors the module wording: the schema is frozen; what is preview-grade is this collapse's single-`ref_year` coverage. 2. `docs/plans/employer-firm-plan.html` used C1/C2/C3 in the contract sense while being cited by the ADR's Context section as the operative split — the one file on the wrong side of the rename boundary. Renamed to IC1/IC2/IC3 (six lines; the SVG path data containing `C265,247` is untouched), and Amendment 1 now states the boundary explicitly: history keeps the old names, live documents are renamed, and the three unrenamed senses stay as the table gives them. Co-Authored-By: Claude Opus 4.8 (1M context) --- docs/adr/0003-employer-firm-extension.md | 8 ++++++++ docs/plans/employer-firm-plan.html | 12 ++++++------ src/populace_dynamics/data/sipp_jobs.py | 6 ++++-- 3 files changed, 18 insertions(+), 8 deletions(-) diff --git a/docs/adr/0003-employer-firm-extension.md b/docs/adr/0003-employer-firm-extension.md index 1b6591f3..ab8951cc 100644 --- a/docs/adr/0003-employer-firm-extension.md +++ b/docs/adr/0003-employer-firm-extension.md @@ -34,6 +34,14 @@ fingerprint side already carries. Prior discussion (issue #192, the ADR history, merged PR bodies) uses the old names and is not rewritten; this note is the mapping. +**Boundary: history keeps the old names, live documents are +renamed.** The plan (`docs/plans/employer-firm-plan.html`), cited by +the Context section below as the operative split, is a live document +and is renamed with this amendment, so a referee following the ADR's +own link does not meet unmapped names. The unrenamed senses in the +table above (the locked `gates.yaml` fingerprints, the SSA table +labels, the RNG substream) remain as they are, by the reasons given. + **Sign-off:** @vahid-ahmadi (Workstream B, author) · @daphnehanse11 (Workstream A) — the joint sign-off is recorded by the merge of the freeze PR: authorship by one workstream owner plus diff --git a/docs/plans/employer-firm-plan.html b/docs/plans/employer-firm-plan.html index 413453ea..56480a6b 100644 --- a/docs/plans/employer-firm-plan.html +++ b/docs/plans/employer-firm-plan.html @@ -255,11 +255,11 @@

Targets, register & calibration

INTERFACE CONTRACTS — frozen week 1, changed only by joint PR
    -
  • C1 · Spell schema. One table: person_id, spell_id, start_period, end_period, industry (major), firm_size_band, earnings_share, primary_job. A writes it, B reads it. Firm-size bands use the canonical banding B defines (C2). Multi-job resolved primary-job-only in phase 0.
  • -
  • C2 · Canonical firm-size banding + semantics. B proposes the band set reconcilable across NOEMP / SIPP-establishment / SUSB-enterprise, and the decision of what the variable means (administrative firm size, per review F5). A trains to it; documented in the ADR.
  • -
  • C3 · Gate pre-registration. Jointly authored employer gate block (E1–E12 thresholds after floor runs), split ownership as above, one referee round, locked before any candidate runs. Neither side's model work may start a one-shot run until C3 locks.
  • +
  • IC1 · Spell schema. One table: person_id, spell_id, start_period, end_period, industry (major), firm_size_band, earnings_share, primary_job. A writes it, B reads it. Firm-size bands use the canonical banding B defines (IC2). Multi-job resolved primary-job-only in phase 0.
  • +
  • IC2 · Canonical firm-size banding + semantics. B proposes the band set reconcilable across NOEMP / SIPP-establishment / SUSB-enterprise, and the decision of what the variable means (administrative firm size, per review F5). A trains to it; documented in the ADR.
  • +
  • IC3 · Gate pre-registration. Jointly authored employer gate block (E1–E12 thresholds after floor runs), split ownership as above, one referee round, locked before any candidate runs. Neither side's model work may start a one-shot run until IC3 locks.
-

Sync points: week 1 (freeze C1/C2), week 4 (lock C3), week 10 (joint phase-2 go/no-go with Max). Everything else is asynchronous — A can build readers/imputation against fixture spells; B can build the target pipeline and register against a synthetic spell file conforming to C1.

+

Sync points: week 1 (freeze IC1/IC2), week 4 (lock IC3), week 10 (joint phase-2 go/no-go with Max). Everything else is asynchronous — A can build readers/imputation against fixture spells; B can build the target pipeline and register against a synthetic spell file conforming to IC1.

Precedents — what similar projects did

@@ -277,8 +277,8 @@

Precedents — what similar projects did

Milestones

- - + + diff --git a/src/populace_dynamics/data/sipp_jobs.py b/src/populace_dynamics/data/sipp_jobs.py index 65be95df..43b65267 100644 --- a/src/populace_dynamics/data/sipp_jobs.py +++ b/src/populace_dynamics/data/sipp_jobs.py @@ -503,8 +503,10 @@ def job_spells(job_months: pd.DataFrame) -> pd.DataFrame: A spell is a maximal run of consecutive reference months for one (person, job id). The output mirrors the IC1 spell schema of ADR - 0003 (Proposed — this is a preview, not the frozen contract) and - doubles as Workstream B's generator for IC1-conforming fixtures. + 0003, which is **Accepted and frozen**; what remains preview-grade + is this collapse's own coverage (single ``ref_year`` only — see + below), not the schema's status. It doubles as Workstream B's + generator for IC1-conforming fixtures. Args: job_months: Output of :func:`read_sipp_job_months`. From ac0caa26b4b5f3f591078e8c819c2b3035463b96 Mon Sep 17 00:00:00 2001 From: Vahid Ahmadi Date: Thu, 23 Jul 2026 16:01:35 +0100 Subject: [PATCH 10/17] Fix the byte-drift check's input and the refuted docstring claim MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Two residuals from Daphne's re-review of the fix round: 1. `_verify_led_j2jod` hashed `path.read_bytes()` against `LED_J2JOD_SHA256`, but that pin is the *uncompressed* CSV's sha while the default path hands it the `.csv.gz`. Every archive-path run therefore printed the byte-drift note with a hardcoded "the tool reordered columns" diagnosis, regardless of cause — a permanently-lit channel nobody reads, which is how a real byte-only change would have gone unnoticed. The bytes are now decompressed before hashing (the note goes quiet on the default path, verified against the committed archive), and the canned diagnosis is replaced by what the code actually knows: the content pin has already passed, so the difference is layout-only and its cause is not determined here. 2. `build_j2jod_firmsize`'s docstring still carried the explanation the provenance fix removed — that the tool's margins sit below the flat-file `d_fs` margins because the latter include public-sector "N" flows. The measurement refutes it: the tool is *above* in 37/41 quarters, and a size-N exclusion could only bias it downward. The docstring now states the measured direction and points at the check script. Full suite: 3023 passed / 0 failed. Co-Authored-By: Claude Opus 4.8 (1M context) --- scripts/fetch_employer_firm_targets.py | 28 +++++++++++++++++++++----- 1 file changed, 23 insertions(+), 5 deletions(-) diff --git a/scripts/fetch_employer_firm_targets.py b/scripts/fetch_employer_firm_targets.py index ee0424b3..7973bd1f 100644 --- a/scripts/fetch_employer_firm_targets.py +++ b/scripts/fetch_employer_firm_targets.py @@ -301,12 +301,24 @@ def _verify_led_j2jod(path: Path) -> Path: "re-pin only after diffing the cells and updating the " "provenance note with the new release." ) - digest = hashlib.sha256(path.read_bytes()).hexdigest() + # LED_J2JOD_SHA256 pins the *uncompressed* response bytes, so the + # archive path must be decompressed before hashing. Hashing the + # .gz container against it made this note fire on every default + # run — a permanently-lit byte-drift channel is one nobody reads, + # which is exactly how a real byte-only change goes unnoticed. + raw = path.read_bytes() + if path.suffix == ".gz": + raw = gzip.decompress(raw) + digest = hashlib.sha256(raw).hexdigest() if digest != LED_J2JOD_SHA256: + # Cause unknown by construction: the content pin above has + # already passed, so the values are identical and the change + # is in the layout (column order, quoting, line endings, ...). + # Naming one cause here would be a guess. print( f"note: LED J2JOD response bytes changed ({digest[:12]} != " - f"{LED_J2JOD_SHA256[:12]}) but every value is unchanged; " - "the tool reordered columns. Not an error." + f"{LED_J2JOD_SHA256[:12]}) while every value is unchanged; " + "a layout-only difference. Not an error." ) return path @@ -562,8 +574,14 @@ def build_j2jod_firmsize(cache_dir: Path) -> None: status flag 10/12). Column subset and sort only, no re-aggregation. Suppressed cells (status flag 11) load as NaN. NOTE: the tool's margins are aggregates of the firm-size-coded - tabulation, so they sit slightly below the flat-file ``d_fs`` - margins, which include public-sector (firm size "N") flows. + tabulation and do **not** sit systematically below the flat-file + ``d_fs`` margins: checked across all 41 quarters the tool is + *above* in 37, deviating −1.00% to +2.02% (mean +0.75%). The + public-sector (firm size "N") explanation is refuted by that + direction — excluding size N could only bias the tool downward. + The gap is dominated by independent noise infusion applied to the + two tabulations; see the provenance note and + ``scripts/check_j2jod_margin_agreement.py``. """ raw = pd.read_csv(fetch_led_j2jod(cache_dir), low_memory=False) keep = raw[raw["year"] >= LEHD_START_YEAR].copy() From f961bf3033f54591d1b27b3c9aa962859e6645e7 Mon Sep 17 00:00:00 2001 From: Vahid Ahmadi Date: Thu, 23 Jul 2026 16:30:24 +0100 Subject: [PATCH 11/17] Correct the e11_margin_trend magnitude and re-pin all three digests MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Daphne's re-review caught a factual error inside the now-pinned v1 artifact: `e11_margin_trend` said the aggregate-relative variant "runs roughly half the raw one", while the committed numbers make it **4.5x to 9.5x tighter** on the full-window floor means (firmsize1 0.1054 raw vs 0.0233 relative; 3.4x-6.6x on the ex-pandemic window). No test caught it — only `rel < raw` was asserted, which the wrong magnitude satisfies. Because the artifact, the builder, and the input digests are all pinned, the fix is the full ceremony rather than a text edit: the sentence is corrected in the builder, the artifact is rebuilt from the committed extracts (diff confirmed to be this note and nothing else), and the artifact and builder sha256s are deliberately re-pinned in the reproduction test. That is the drift ceremony the promotion exists to make visible, working as designed. Added `test_e11_margin_trend_note_states_the_measured_magnitude`, which recomputes the five per-band ratios from the artifact and pins the claim against them, so prose and numbers can no longer drift apart silently inside a pinned artifact. tier_counts +1 artifact. Verified: reproduction from committed extracts passes, unit+artifact tiers 1831 passed / 0 failed, tier manifest exact. Co-Authored-By: Claude Opus 4.8 (1M context) --- runs/employer_firm_floors_v1.json | 2 +- scripts/build_employer_firm_floors.py | 12 +++++++++--- tests/test_employer_firm_floors.py | 25 +++++++++++++++++++++++-- tests/tier_counts.json | 2 +- 4 files changed, 34 insertions(+), 7 deletions(-) diff --git a/runs/employer_firm_floors_v1.json b/runs/employer_firm_floors_v1.json index c09c699b..db092bbb 100644 --- a/runs/employer_firm_floors_v1.json +++ b/runs/employer_firm_floors_v1.json @@ -36,7 +36,7 @@ "e12_deferred": "E12 (AKM moments) has no committed extract: AKM variance decompositions require linked employer-employee microdata, and the published decompositions are research outputs rather than a recurring aggregate release. No floor is buildable; E12 is recorded as deferred pending a committed, provenance-pinned reference extract, and must not lock with C3 without one", "cycle_signal_in_floors": "temporal-stability floors on published aggregates include true business-cycle variation (2020-2021 most visibly) as well as source noise; both the full-sample and ex-pandemic figures are committed rather than choosing one \u2014 the C3 referee round picks the formulation with both on the record", "floors_not_monotone_in_disaggregation": "an empirical finding from the sex x age build, and a trap for the threshold policy: the temporal floor is NOT monotone in disaggregation. Of the 26 non-aggregate sex x age cells, the number whose ex-pandemic floor is TIGHTER than the all-sexes all-ages cell is 13 (hire), 10 (separation), 6 (j2j hire), 7 (j2j separation). The pattern is interpretable -- the 45-99 age cells are the most stable and the 19-34 cells the least, while the aggregate carries compositional shift the older cells do not -- but the consequence is procedural: a floor measured on a margin CANNOT be used as a conservative bound for the cells beneath it. Every gated cell needs its own floor, or the threshold policy must say explicitly which cell's floor governs (C3 open question 1)", - "e11_margin_trend": "the E11 destination-size margins are EE flow COUNTS, so their year-over-year variation carries aggregate flow growth (a trend, not noise) exactly as raw EarnS carries nominal wage growth. Both are committed: 'ee' (raw counts) and 'ee_rel' (share of the quarter's all-size EE total, which divides the common trend out). The relative variant runs roughly half the raw one; the C3 referee round picks the formulation, as for E7", + "e11_margin_trend": "the E11 destination-size margins are EE flow COUNTS, so their year-over-year variation carries aggregate flow growth (a trend, not noise) exactly as raw EarnS carries nominal wage growth. Both are committed: 'ee' (raw counts) and 'ee_rel' (share of the quarter's all-size EE total, which divides the common trend out). The relative variant is far TIGHTER than the raw one: across the five destination bands its floor mean is 4.5x to 9.5x smaller (e.g. firmsize1 0.1054 raw vs 0.0233 relative), and 3.4x to 6.6x smaller on the ex-pandemic window. Most of the raw floor is the aggregate flow trend, which is exactly what the relative variant removes; the C3 referee round picks the formulation, as for E7", "e7_nominal_trend": "raw EarnS YoY variation embeds aggregate nominal wage growth (a trend, not noise); the aggregate-relative EarnS floor is committed alongside the raw one, both on the record" }, "e1": { diff --git a/scripts/build_employer_firm_floors.py b/scripts/build_employer_firm_floors.py index 8a3f2062..e4aa70dd 100644 --- a/scripts/build_employer_firm_floors.py +++ b/scripts/build_employer_firm_floors.py @@ -697,9 +697,15 @@ def build() -> dict: "as raw EarnS carries nominal wage growth. Both are " "committed: 'ee' (raw counts) and 'ee_rel' (share of " "the quarter's all-size EE total, which divides the " - "common trend out). The relative variant runs roughly " - "half the raw one; the C3 referee round picks the " - "formulation, as for E7" + "common trend out). The relative variant is far " + "TIGHTER than the raw one: across the five " + "destination bands its floor mean is 4.5x to " + "9.5x smaller (e.g. firmsize1 0.1054 raw vs 0.0233 " + "relative), and 3.4x to 6.6x smaller on the " + "ex-pandemic window. Most of the raw floor is the " + "aggregate flow trend, which is exactly what the " + "relative variant removes; the C3 referee round picks " + "the formulation, as for E7" ), "e7_nominal_trend": ( "raw EarnS YoY variation embeds aggregate nominal " diff --git a/tests/test_employer_firm_floors.py b/tests/test_employer_firm_floors.py index c1cc500f..54ab371e 100644 --- a/tests/test_employer_firm_floors.py +++ b/tests/test_employer_firm_floors.py @@ -36,10 +36,10 @@ BUILDER = ROOT / "scripts/build_employer_firm_floors.py" ARTIFACT_SHA256 = ( - "c9c50b7521b1df3ee0c9ffc942a3aa8593fc89c0eec8d1cc1682ce3a426716ed" + "78918b15ba21c58cb179e6f40668a4db052136e426e1e71a7beecb384baa18da" ) BUILDER_SHA256 = ( - "b85c2234289c99e166f9343a69a1bb14417b98bb77351b9ba9ca4131f3625677" + "fac6c6be6d185fee704661b4d3338639fd8957ca9fd52308f4cab78a25ffa263" ) CANONICAL_NAMES = {band.name for band in banding.CANONICAL_BANDS} @@ -280,6 +280,27 @@ def test_e11_margin_relative_floor_is_tighter_than_raw(artifact): ) +def test_e11_margin_trend_note_states_the_measured_magnitude(artifact): + """`rel < raw` alone let a wrong magnitude ride inside the pin. + + The note said the relative variant "runs roughly half the raw + one" while the committed numbers make it 4.5x to 9.5x tighter — + a factual error inside a sha256-pinned artifact, caught by + review rather than by a test. This pins the claim against the + numbers it describes, so the next drift fails here. + """ + cells = artifact["e11"]["destination_size_margin"].values() + ratios = [ + cell["ee"]["floor_abs_log_ratio_mean"] + / cell["ee_rel"]["floor_abs_log_ratio_mean"] + for cell in cells + ] + assert 4.5 <= min(ratios) < max(ratios) <= 9.5 + note = artifact["method_findings"]["e11_margin_trend"] + assert "4.5x to 9.5x smaller" in note + assert "roughly half" not in note + + def test_e11_records_the_cross_source_margin_disagreement(artifact): """The margins-only bound that survives the missing detail.""" note = artifact["e11"]["cross_source_margin_disagreement"] diff --git a/tests/tier_counts.json b/tests/tier_counts.json index 3080f19e..8371e6e8 100644 --- a/tests/tier_counts.json +++ b/tests/tier_counts.json @@ -2,7 +2,7 @@ "schema_version": 1, "counts": { "unit": 755, - "artifact": 1121, + "artifact": 1122, "integration_psid": 804, "reproduction_legacy": 520, "oracle_policyengine": 159 From 3d0282d4e6622813c8683f01e1d8a76971317a67 Mon Sep 17 00:00:00 2001 From: Vahid Ahmadi Date: Thu, 30 Jul 2026 13:36:48 +0200 Subject: [PATCH 12/17] Reclassify J2J target tests in tier manifest --- tests/README-tiers.md | 6 +++--- tests/tier_counts.json | 4 ++-- 2 files changed, 5 insertions(+), 5 deletions(-) diff --git a/tests/README-tiers.md b/tests/README-tiers.md index c9f17d23..c47b2ea1 100644 --- a/tests/README-tiers.md +++ b/tests/README-tiers.md @@ -38,9 +38,9 @@ pytest --collect-only -q -m oracle_policyengine | tail -1 | Tier | Tests at HEAD | |---|---:| -| `unit` | 822 | -| `artifact` | 1,919 | +| `unit` | 803 | +| `artifact` | 1,953 | | `integration_psid` | 804 | | `reproduction_legacy` | 520 | | `oracle_policyengine` | 159 | -| **Total** | **4,224** | +| **Total** | **4,239** | diff --git a/tests/tier_counts.json b/tests/tier_counts.json index 92e35448..6814f4b6 100644 --- a/tests/tier_counts.json +++ b/tests/tier_counts.json @@ -1,8 +1,8 @@ { "schema_version": 1, "counts": { - "unit": 837, - "artifact": 1919, + "unit": 803, + "artifact": 1953, "integration_psid": 804, "reproduction_legacy": 520, "oracle_policyengine": 159 From c5b4d11f1b3bd6b34a3de8ea1a1c8d72e6777ee0 Mon Sep 17 00:00:00 2001 From: Vahid Ahmadi Date: Thu, 30 Jul 2026 13:39:30 +0200 Subject: [PATCH 13/17] Keep naming amendment outside sealed production sources --- docs/adr/0003-employer-firm-extension.md | 5 ++++ src/populace_dynamics/data/asec_firm_size.py | 4 +-- src/populace_dynamics/data/sipp_jobs.py | 30 ++++++++------------ src/populace_dynamics/firms/__init__.py | 2 +- src/populace_dynamics/firms/banding.py | 4 +-- 5 files changed, 22 insertions(+), 23 deletions(-) diff --git a/docs/adr/0003-employer-firm-extension.md b/docs/adr/0003-employer-firm-extension.md index ab8951cc..5eb3280b 100644 --- a/docs/adr/0003-employer-firm-extension.md +++ b/docs/adr/0003-employer-firm-extension.md @@ -41,6 +41,11 @@ and is renamed with this amendment, so a referee following the ADR's own link does not meet unmapped names. The unrenamed senses in the table above (the locked `gates.yaml` fingerprints, the SSA table labels, the RNG substream) remain as they are, by the reasons given. +Production-source docstrings sealed by the published first-estimates +replay ceremony also retain their historical `C1`/`C2` wording. They +are not operative contract text and are interpreted through this +one-to-one mapping; cosmetic edits would invalidate the sealed replay +identity. New source text uses the `IC` names. **Sign-off:** @vahid-ahmadi (Workstream B, author) · @daphnehanse11 (Workstream A) — the joint sign-off is recorded by diff --git a/src/populace_dynamics/data/asec_firm_size.py b/src/populace_dynamics/data/asec_firm_size.py index 6f78c3a3..5f32d12d 100644 --- a/src/populace_dynamics/data/asec_firm_size.py +++ b/src/populace_dynamics/data/asec_firm_size.py @@ -22,7 +22,7 @@ share (~7.5%), while a true 25-99 band carries ~15%. This reader therefore uses the 10-49 / 50-99 reading for all years and records the dictionary conflict here rather than silently following the -2019+ label text into a factor-two mis-band. Consequence for IC2: +2019+ label text into a factor-two mis-band. Consequence for C2: the 50-employee edge (ACA and state mandates) is directly observed in every supported year — the "post-2019 label cannot resolve the 50 cut" problem stated in earlier drafts dissolves. @@ -374,7 +374,7 @@ def firm_size_tabulation( "class_of_worker", ), ) -> pd.DataFrame: - """Weighted firm-size tabulation — the IC2 evidence artifact. + """Weighted firm-size tabulation — the C2 evidence artifact. Args: records: Output of :func:`read_asec_firm_size` (one or more diff --git a/src/populace_dynamics/data/sipp_jobs.py b/src/populace_dynamics/data/sipp_jobs.py index 43b65267..c722c9e5 100644 --- a/src/populace_dynamics/data/sipp_jobs.py +++ b/src/populace_dynamics/data/sipp_jobs.py @@ -1,4 +1,4 @@ -"""SIPP job-level monthly records and IC1-preview spells (issue #200). +"""SIPP job-level monthly records and C1-preview spells (issue #200). The 2014-redesign SIPP public-use files are the employer-firm plan's primary label panel (#192): one row per person-month (``SSUID`` x @@ -8,7 +8,7 @@ within-panel employer-attachment key that phase-1 transition hazards rest on. ``EJB{n}_EMPSIZE`` measures **establishment** size at the worker's location (the redesign dropped the all-locations question), -so it is the IC2 proxy-chain input, never firm size (ADR 0003; +so it is the C2 proxy-chain input, never firm size (ADR 0003; ``firms/banding.py``). Every variable this reader touches was verified against the Census @@ -28,14 +28,10 @@ string-typed in the API schema. ``job_spells`` collapses maximal consecutive-month runs per -(person, job id) into spell rows whose shape mirrors the IC1 spell -schema. It is still labeled **IC1-preview**, but for a narrower -reason than when it was written: ADR 0003 is now Accepted and IC1 -is frozen, so what remains preview-grade is this collapse's own -coverage (single ``ref_year`` only — cross-year spell linkage -raises rather than guessing), not the schema's status. The output -also serves as Workstream B's generator for IC1-conforming fixture -files. Attribute changes inside a spell +(person, job id) into spell rows whose shape mirrors the C1 spell +schema. It is labeled **C1-preview**: ADR 0003 is Proposed, not +frozen, and this output also serves as Workstream B's generator for +C1-conforming fixture files. Attribute changes inside a spell (class of worker, industry, establishment size) are surfaced via ``attributes_constant`` — never silently averaged. @@ -499,14 +495,12 @@ def read_sipp_job_months( def job_spells(job_months: pd.DataFrame) -> pd.DataFrame: - """Collapse job-months into IC1-preview spell rows. + """Collapse job-months into C1-preview spell rows. A spell is a maximal run of consecutive reference months for one - (person, job id). The output mirrors the IC1 spell schema of ADR - 0003, which is **Accepted and frozen**; what remains preview-grade - is this collapse's own coverage (single ``ref_year`` only — see - below), not the schema's status. It doubles as Workstream B's - generator for IC1-conforming fixtures. + (person, job id). The output mirrors the C1 spell schema of ADR + 0003 (Proposed — this is a preview, not the frozen contract) and + doubles as Workstream B's generator for C1-conforming fixtures. Args: job_months: Output of :func:`read_sipp_job_months`. @@ -566,7 +560,7 @@ def job_spells(job_months: pd.DataFrame) -> pd.DataFrame: ] ) - # Cross-year spell linkage is undefined in this IC1 preview: the + # Cross-year spell linkage is undefined in this C1 preview: the # break/run detection, the person-month earnings lookup, and the # spell edges all key on the calendar ``month`` (1-12) alone, so two # different reference years sharing a month would collapse into one @@ -581,7 +575,7 @@ def job_spells(job_months: pd.DataFrame) -> pd.DataFrame: raise ValueError( "job_spells received job-months spanning multiple ref_years " f"({sorted(int(y) for y in ref_years)}); cross-year spell " - "linkage is undefined in this IC1 preview. Collapse one SIPP " + "linkage is undefined in this C1 preview. Collapse one SIPP " "file's months at a time." ) diff --git a/src/populace_dynamics/firms/__init__.py b/src/populace_dynamics/firms/__init__.py index 9748b63e..daa46544 100644 --- a/src/populace_dynamics/firms/__init__.py +++ b/src/populace_dynamics/firms/__init__.py @@ -1,6 +1,6 @@ """Employer-firm extension, workstream B (firm side). -Canonical firm-size banding (interface contract IC2) and label-verified +Canonical firm-size banding (interface contract C2) and label-verified loaders for the committed external target extracts (SUSB, BDS, QWI, J2J). See ``docs/adr/0003-employer-firm-extension.md`` and issue #192. """ diff --git a/src/populace_dynamics/firms/banding.py b/src/populace_dynamics/firms/banding.py index df02e2e8..67843686 100644 --- a/src/populace_dynamics/firms/banding.py +++ b/src/populace_dynamics/firms/banding.py @@ -1,4 +1,4 @@ -"""Canonical firm-size banding — interface contract IC2. +"""Canonical firm-size banding — interface contract C2. **Semantics (review finding F5).** The canonical variable means *administrative enterprise size*: the total employment of the legal @@ -26,7 +26,7 @@ Bands are **headcount** bands. Policy thresholds stated in FTEs (the ACA applicable-large-employer cut is 50 *full-time equivalents* at 30 hours/week, not headcount) are handled by a person-side hours join and -are out of IC2 scope. +are out of C2 scope. **Canonical bands.** Five bands with edges at 10 / 50 / 100 / 500:: From f5070b4a5c0e5eeb20eb98cd1c33bae408793167 Mon Sep 17 00:00:00 2001 From: Vahid Ahmadi Date: Thu, 30 Jul 2026 13:42:30 +0200 Subject: [PATCH 14/17] Keep firm targets outside historical estimate identity --- scripts/first_estimates_birth_evidence.py | 1 + tests/estimates/test_birth_evidence_artifact.py | 1 + 2 files changed, 2 insertions(+) diff --git a/scripts/first_estimates_birth_evidence.py b/scripts/first_estimates_birth_evidence.py index a78b4128..38a007c5 100644 --- a/scripts/first_estimates_birth_evidence.py +++ b/scripts/first_estimates_birth_evidence.py @@ -134,6 +134,7 @@ ) POST_REVIEW_SOURCE_EXCLUSIONS = ( Path("src/populace_dynamics/artifacts.py"), + Path("src/populace_dynamics/firms/targets.py"), Path("src/populace_dynamics/estimates/anchor_context_coordinator.py"), Path("src/populace_dynamics/estimates/anchor_context_publication.py"), Path("src/populace_dynamics/estimates/anchor_context_registry.py"), diff --git a/tests/estimates/test_birth_evidence_artifact.py b/tests/estimates/test_birth_evidence_artifact.py index 10430ab8..89529a54 100644 --- a/tests/estimates/test_birth_evidence_artifact.py +++ b/tests/estimates/test_birth_evidence_artifact.py @@ -66,6 +66,7 @@ def test_reducer_input_identity_matches_reviewed_branch(): def test_context_report_sources_are_outside_historical_reducer_identity(): assert reducer.POST_REVIEW_SOURCE_EXCLUSIONS == ( Path("src/populace_dynamics/artifacts.py"), + Path("src/populace_dynamics/firms/targets.py"), Path("src/populace_dynamics/estimates/anchor_context_coordinator.py"), Path("src/populace_dynamics/estimates/anchor_context_publication.py"), Path("src/populace_dynamics/estimates/anchor_context_registry.py"), From f027c841a4c452b768d14fa724e552f5f90ddc5c Mon Sep 17 00:00:00 2001 From: Vahid Ahmadi Date: Thu, 30 Jul 2026 13:45:20 +0200 Subject: [PATCH 15/17] Refresh aggregate floors for the IC3 contract --- runs/employer_firm_floors_v1.json | 16 +++++++------- scripts/build_employer_firm_floors.py | 32 ++++++++++++++------------- tests/README-tiers.md | 4 ++-- tests/test_employer_firm_floors.py | 23 ++++++++++--------- tests/tier_counts.json | 2 +- 5 files changed, 41 insertions(+), 36 deletions(-) diff --git a/runs/employer_firm_floors_v1.json b/runs/employer_firm_floors_v1.json index db092bbb..004e7c70 100644 --- a/runs/employer_firm_floors_v1.json +++ b/runs/employer_firm_floors_v1.json @@ -1,7 +1,7 @@ { "artifact": "employer_firm_floors", "version": "v1", - "status": "PRE-LOCK REFERENCE - NOT RATIFIED; C3 not locked; no thresholds. v1 marks the artifact sha256-pinned and reproduction-tested (#230 section 12.2 item 2), which is a pinning event, not a ratification: the numbers here bind nothing until the C3 amendment PR merges", + "status": "PRE-LOCK REFERENCE - NOT RATIFIED; IC3 not locked; no thresholds. v1 marks the artifact sha256-pinned and reproduction-tested (#230 section 12.2 item 2), which is a pinning event, not a ratification: the numbers here bind nothing until the IC3 amendment PR merges", "input_extract_sha256": { "susb_us_sector_size_2022.csv": "b2db9502cf71480f4284cbeb8b78f31e8eb77f63963f679c167bfd40ade9d5e0", "bds_us_firm_size_1978_2022.csv": "0cbfec27392d4d328ddf8be9800c30a65d954d3a50ef170e9c98fc4babc82b31", @@ -23,20 +23,20 @@ }, "method": "temporal-stability floors on published administrative aggregates: year-over-year same-quarter |log ratio| per cell (QWI/J2J, 2015Q1 on; same-quarter comparison absorbs seasonality in the not-seasonally-adjusted extracts), year-over-year |log share ratio| for the BDS size margin (2012-2022), and published noise-flag CV bounds for the single-vintage SUSB table; banding via populace_dynamics.firms.banding only; thin flag at minimum cell denominator < 10000 jobs (draft choice)", "unit_rules": [ - "QWI/J2J cells count jobs, not persons (ADR 0003): the job-to-person adjustment (~ multiple-jobholding rate, ~5%) is a pre-registered C3 item", + "QWI/J2J cells count jobs, not persons (ADR 0003): the job-to-person adjustment (~ multiple-jobholding rate, ~5%) is a pre-registered IC3 item", "QWI EarnS is MEAN monthly earnings of full-quarter employees; QWI never publishes medians; E7 is stated on means", - "J2J extract ownership is oslp (state/local + private) while QWI is private-only (op) and SUSB excludes government; NAICS 92 is dropped from the J2J extract but state/local employment embedded in other sectors (esp. 61, 62) remains \u2014 E2/E11 cells must restate on a private-comparable basis or carry this scope caveat (locks with C3)" + "J2J extract ownership is oslp (state/local + private) while QWI is private-only (op) and SUSB excludes government; NAICS 92 is dropped from the J2J extract but state/local employment embedded in other sectors (esp. 61, 62) remains \u2014 E2/E11 cells must restate on a private-comparable basis or carry this scope caveat (locks with IC3)" ], "method_findings": { "e1_no_sector_replicate": "the committed SUSB extract is a single 2022 cross-section: a same-source temporal or resampling floor on the size x sector cells is degenerate. The E1 floor is therefore composed of the published SUSB noise-flag CV bounds per cell plus a BDS year-over-year stability floor that exists only for the national size margin \u2014 the sector axis has no stability floor derivable from committed extracts", "e1_bds_straddle": "the BDS '20 to 99' category straddles the canonical 50 edge (banding.bds_fsize_to_canonical is inexact there), so the BDS margin floor is stated on a coarsened partition (20_99 kept whole), not on the five canonical bands", "e2_sex_age_axis_built": "SUPERSEDES draft_v0's 'e2_no_age_sex_axis'. E2's registered sex x age axis is now floored from the committed J2J sex x age extract (#228): the full 3 x 9 grid at the all-industry margin, 2015Q1-2025Q1, same |log YoY ratio| machinery as the firm-size axis, reported per cell and pooled over the 2 x 8 non-margin cells. The firm-size x sector floors remain the aggregate-side references they always were; the two E2 axes are now on one footing. Naming correction carried from the earlier draft: LEHD's sex x age tabulation is 'sa'; 'se' is sex x EDUCATION, and the draft_v0 finding named the wrong one", "e11_extract_committed_but_no_temporal_replicate": "SUPERSEDES draft_v0's 'e11_no_od_extract', which is now factually stale: the origin x destination firm-size cross IS committed (#228, the full 6 x 6 grid). The obstacle is temporal, not availability. The national detail is published only for 2015Q1-2016Q1 (status flag 11 from 2016Q2), so same-quarter year-over-year pairing yields at most ONE pair per detail cell \u2014 a gap with no dispersion, hence no mean + k*sd floor on the cross. The destination-size margins run through 2025Q1 and are floored in the e11 block. A second, independent bound on any margin threshold comes from cross-source disagreement: the LED tool's margins and the LEHD flat file's differ by up to ~3% in either direction (e11.cross_source_margin_disagreement)", - "release_revision_noise_unfloored": "a third floorable concept, recorded and NOT built: vintage-to-vintage revision noise. LEHD revises across releases, and none of the floors here see that \u2014 every extract is a single release (R2026Q1). Observed during the #228 review: LEHD rotated to R2026Q2 mid-round and the J2JOD values for 2015Q1-2025Q1 were unchanged across the rotation (all 1,476 rows), which is one datum, on one series, over one rotation \u2014 suggestive that revision noise is small for these aggregates, not evidence that it is zero. Building it needs two release-stamped vintages of the same series committed; the C3 referee round should decide whether E1/E2/E6/E7/E11 thresholds must carry a revision allowance on top of the temporal floor", - "e12_deferred": "E12 (AKM moments) has no committed extract: AKM variance decompositions require linked employer-employee microdata, and the published decompositions are research outputs rather than a recurring aggregate release. No floor is buildable; E12 is recorded as deferred pending a committed, provenance-pinned reference extract, and must not lock with C3 without one", - "cycle_signal_in_floors": "temporal-stability floors on published aggregates include true business-cycle variation (2020-2021 most visibly) as well as source noise; both the full-sample and ex-pandemic figures are committed rather than choosing one \u2014 the C3 referee round picks the formulation with both on the record", - "floors_not_monotone_in_disaggregation": "an empirical finding from the sex x age build, and a trap for the threshold policy: the temporal floor is NOT monotone in disaggregation. Of the 26 non-aggregate sex x age cells, the number whose ex-pandemic floor is TIGHTER than the all-sexes all-ages cell is 13 (hire), 10 (separation), 6 (j2j hire), 7 (j2j separation). The pattern is interpretable -- the 45-99 age cells are the most stable and the 19-34 cells the least, while the aggregate carries compositional shift the older cells do not -- but the consequence is procedural: a floor measured on a margin CANNOT be used as a conservative bound for the cells beneath it. Every gated cell needs its own floor, or the threshold policy must say explicitly which cell's floor governs (C3 open question 1)", - "e11_margin_trend": "the E11 destination-size margins are EE flow COUNTS, so their year-over-year variation carries aggregate flow growth (a trend, not noise) exactly as raw EarnS carries nominal wage growth. Both are committed: 'ee' (raw counts) and 'ee_rel' (share of the quarter's all-size EE total, which divides the common trend out). The relative variant is far TIGHTER than the raw one: across the five destination bands its floor mean is 4.5x to 9.5x smaller (e.g. firmsize1 0.1054 raw vs 0.0233 relative), and 3.4x to 6.6x smaller on the ex-pandemic window. Most of the raw floor is the aggregate flow trend, which is exactly what the relative variant removes; the C3 referee round picks the formulation, as for E7", + "release_revision_noise_unfloored": "a third floorable concept, recorded and NOT built: vintage-to-vintage revision noise. LEHD revises across releases, and none of the floors here see that \u2014 every extract is a single release (R2026Q1). Observed during the #228 review: LEHD rotated to R2026Q2 mid-round and the J2JOD values for 2015Q1-2025Q1 were unchanged across the rotation (all 1,476 rows), which is one datum, on one series, over one rotation \u2014 suggestive that revision noise is small for these aggregates, not evidence that it is zero. Building it needs two release-stamped vintages of the same series committed; the IC3 referee round should decide whether E1/E2/E6/E7/E11 thresholds must carry a revision allowance on top of the temporal floor", + "e12_deferred": "E12 (AKM moments) has no committed extract: AKM variance decompositions require linked employer-employee microdata, and the published decompositions are research outputs rather than a recurring aggregate release. No floor is buildable; E12 is deferred and does not gate the first IC3 lock. True-linked validation remains deferred pending a committed, provenance-pinned reference extract; Phase 2 must not certify two-sided moments until that reference is adjudicable", + "cycle_signal_in_floors": "temporal-stability floors on published aggregates include true business-cycle variation (2020-2021 most visibly) as well as source noise; both the full-sample and ex-pandemic figures are committed rather than choosing one \u2014 the IC3 referee round picks the formulation with both on the record", + "floors_not_monotone_in_disaggregation": "an empirical finding from the sex x age build, and a trap for the threshold policy: the temporal floor is NOT monotone in disaggregation. Of the 26 non-aggregate sex x age cells, the number whose ex-pandemic floor is TIGHTER than the all-sexes all-ages cell is 13 (hire), 10 (separation), 6 (j2j hire), 7 (j2j separation). The pattern is interpretable -- the 45-99 age cells are the most stable and the 19-34 cells the least, while the aggregate carries compositional shift the older cells do not -- but the consequence is procedural: a floor measured on a margin CANNOT be used as a conservative bound for the cells beneath it. Every gated cell needs its own floor, or the threshold policy must say explicitly which cell's floor governs (IC3 open question 1)", + "e11_margin_trend": "the E11 destination-size margins are EE flow COUNTS, so their year-over-year variation carries aggregate flow growth (a trend, not noise) exactly as raw EarnS carries nominal wage growth. Both are committed: 'ee' (raw counts) and 'ee_rel' (share of the quarter's all-size EE total, which divides the common trend out). The relative variant is far TIGHTER than the raw one: across the five destination bands its floor mean is 4.5x to 9.5x smaller (e.g. firmsize1 0.1054 raw vs 0.0233 relative), and 3.4x to 6.6x smaller on the ex-pandemic window. Most of the raw floor is the aggregate flow trend, which is exactly what the relative variant removes; the IC3 referee round picks the formulation, as for E7", "e7_nominal_trend": "raw EarnS YoY variation embeds aggregate nominal wage growth (a trend, not noise); the aggregate-relative EarnS floor is committed alongside the raw one, both on the record" }, "e1": { diff --git a/scripts/build_employer_firm_floors.py b/scripts/build_employer_firm_floors.py index e4aa70dd..4ad262cb 100644 --- a/scripts/build_employer_firm_floors.py +++ b/scripts/build_employer_firm_floors.py @@ -1,7 +1,7 @@ -"""Build DRAFT aggregate-side noise floors for gates E1/E2/E6/E7/E11 +"""Build pre-lock aggregate-side noise floors for gates E1/E2/E6/E7/E11 (workstream B, issue #192). -REPORTED ANCHOR, NOT A GATE RUN — and explicitly a DRAFT: C3 (the +REPORTED ANCHOR, NOT A GATE RUN: IC3 (the employer gate block) has not locked, no thresholds are proposed here, and nothing below is ratified. This is the firm-side counterpart to the workstream-A floor battery (#212): it commits the floor-building @@ -35,7 +35,7 @@ here. Cells whose minimum denominator over the window is below ``THIN_JOBS`` (a draft choice, recorded) are flagged thin; national cells are all thick in practice, and the flag is carried so the -state-level C3 cells inherit the convention. +state-level IC3 cells inherit the convention. Usage:: @@ -67,7 +67,7 @@ #: bytes: a silently re-fetched extract changes the floors, and a #: reproduction test that reads the same changed file would still #: pass. v1 is a pinning event, not a ratification -- the artifact -#: stays pre-lock with no thresholds until the C3 amendment merges. +#: stays pre-lock with no thresholds until the IC3 amendment merges. INPUT_EXTRACTS = ( "susb_us_sector_size_2022.csv", "bds_us_firm_size_1978_2022.csv", @@ -541,11 +541,11 @@ def build() -> dict: "artifact": "employer_firm_floors", "version": "v1", "status": ( - "PRE-LOCK REFERENCE - NOT RATIFIED; C3 not locked; no " + "PRE-LOCK REFERENCE - NOT RATIFIED; IC3 not locked; no " "thresholds. v1 marks the artifact sha256-pinned and " "reproduction-tested (#230 section 12.2 item 2), which " "is a pinning event, not a ratification: the numbers " - "here bind nothing until the C3 amendment PR merges" + "here bind nothing until the IC3 amendment PR merges" ), "input_extract_sha256": _input_digests(), "issue": "192", @@ -574,7 +574,7 @@ def build() -> dict: "unit_rules": [ "QWI/J2J cells count jobs, not persons (ADR 0003): the " "job-to-person adjustment (~ multiple-jobholding rate, " - "~5%) is a pre-registered C3 item", + "~5%) is a pre-registered IC3 item", "QWI EarnS is MEAN monthly earnings of full-quarter " "employees; QWI never publishes medians; E7 is stated on " "means", @@ -584,7 +584,7 @@ def build() -> dict: "but state/local employment embedded in other sectors " "(esp. 61, 62) remains — E2/E11 cells must restate on a " "private-comparable basis or carry this scope caveat " - "(locks with C3)", + "(locks with IC3)", ], "method_findings": { "e1_no_sector_replicate": ( @@ -650,7 +650,7 @@ def build() -> dict: "revision noise is small for these aggregates, not " "evidence that it is zero. Building it needs two " "release-stamped vintages of the same series " - "committed; the C3 referee round should decide " + "committed; the IC3 referee round should decide " "whether E1/E2/E6/E7/E11 thresholds must carry a " "revision allowance on top of the temporal floor" ), @@ -660,16 +660,18 @@ def build() -> dict: "employer-employee microdata, and the published " "decompositions are research outputs rather than a " "recurring aggregate release. No floor is buildable; " - "E12 is recorded as deferred pending a committed, " - "provenance-pinned reference extract, and must not " - "lock with C3 without one" + "E12 is deferred and does not gate the first IC3 " + "lock. True-linked validation remains deferred " + "pending a committed, provenance-pinned reference " + "extract; Phase 2 must not certify two-sided moments " + "until that reference is adjudicable" ), "cycle_signal_in_floors": ( "temporal-stability floors on published aggregates " "include true business-cycle variation (2020-2021 " "most visibly) as well as source noise; both the " "full-sample and ex-pandemic figures are committed " - "rather than choosing one — the C3 referee round " + "rather than choosing one — the IC3 referee round " "picks the formulation with both on the record" ), "floors_not_monotone_in_disaggregation": ( @@ -688,7 +690,7 @@ def build() -> dict: "conservative bound for the cells beneath it. Every " "gated cell needs its own floor, or the threshold " "policy must say explicitly which cell's floor " - "governs (C3 open question 1)" + "governs (IC3 open question 1)" ), "e11_margin_trend": ( "the E11 destination-size margins are EE flow " @@ -704,7 +706,7 @@ def build() -> dict: "relative), and 3.4x to 6.6x smaller on the " "ex-pandemic window. Most of the raw floor is the " "aggregate flow trend, which is exactly what the " - "relative variant removes; the C3 referee round picks " + "relative variant removes; the IC3 referee round picks " "the formulation, as for E7" ), "e7_nominal_trend": ( diff --git a/tests/README-tiers.md b/tests/README-tiers.md index c47b2ea1..b869bcc5 100644 --- a/tests/README-tiers.md +++ b/tests/README-tiers.md @@ -39,8 +39,8 @@ pytest --collect-only -q -m oracle_policyengine | tail -1 | Tier | Tests at HEAD | |---|---:| | `unit` | 803 | -| `artifact` | 1,953 | +| `artifact` | 1,974 | | `integration_psid` | 804 | | `reproduction_legacy` | 520 | | `oracle_policyengine` | 159 | -| **Total** | **4,239** | +| **Total** | **4,260** | diff --git a/tests/test_employer_firm_floors.py b/tests/test_employer_firm_floors.py index 54ab371e..5dcc934b 100644 --- a/tests/test_employer_firm_floors.py +++ b/tests/test_employer_firm_floors.py @@ -4,11 +4,11 @@ (workstream B counterpart to the #212 battery): PRE-LOCK, NOT RATIFIED, no thresholds — it commits the floor-building method for the E1/E2/E6/E7/E11 aggregate references, and the E11/E12 deferral -findings, before C3 locks. +findings, before IC3 locks. **v1 is a pinning event, not a ratification** (#230 section 12.2 item 2). Three digests are pinned, and each catches a different way -the artifact could drift out from under the C3 record: +the artifact could drift out from under the IC3 record: * the artifact's own bytes — an edited artifact; * the builder's bytes — a changed method that happens to land on @@ -17,7 +17,7 @@ * every input extract's bytes — a re-fetched source. This is the one a reproduction test alone cannot catch: rebuild from a silently changed extract and the artifact and the rebuild agree - with each other while both differ from what C3 was shown. + with each other while both differ from what IC3 was shown. """ from __future__ import annotations @@ -36,10 +36,10 @@ BUILDER = ROOT / "scripts/build_employer_firm_floors.py" ARTIFACT_SHA256 = ( - "78918b15ba21c58cb179e6f40668a4db052136e426e1e71a7beecb384baa18da" + "500bea1564746797815253b2c1feb04a39b31c0e0815f2d0a56fad74918856be" ) BUILDER_SHA256 = ( - "fac6c6be6d185fee704661b4d3338639fd8957ca9fd52308f4cab78a25ffa263" + "5011e68668c283cf4d8238d1c9d8aa8087c8cccf30a9d6d9d3722a8744a2ee17" ) CANONICAL_NAMES = {band.name for band in banding.CANONICAL_BANDS} @@ -50,7 +50,7 @@ def artifact() -> dict: return json.loads(ARTIFACT.read_text()) -def test_artifact_is_a_draft_with_no_thresholds(artifact): +def test_artifact_is_a_prelock_reference_with_no_thresholds(artifact): assert artifact["artifact"] == "employer_firm_floors" assert artifact["version"] == "v1" # "DRAFT" gave way to "PRE-LOCK REFERENCE" at v1: the artifact @@ -169,7 +169,10 @@ def test_method_findings_are_recorded(artifact): findings["release_revision_noise_unfloored"] ) assert "trend, not noise" in findings["e11_margin_trend"] - assert "must not lock with C3" in findings["e12_deferred"] + assert "does not gate the first IC3 lock" in findings["e12_deferred"] + assert "Phase 2 must not certify two-sided moments" in ( + findings["e12_deferred"] + ) assert "business-cycle" in findings["cycle_signal_in_floors"] assert "nominal wage growth" in findings["e7_nominal_trend"] assert artifact["e11"]["status"].startswith("detail floor NOT") @@ -337,7 +340,7 @@ def test_input_extract_digests_match_the_committed_files(artifact): """The drift a reproduction test structurally cannot catch. If an extract is re-fetched, the artifact and a rebuild from it - agree with each other while both differ from what the C3 record + agree with each other while both differ from what the IC3 record was shown. Only a digest recorded *at build time* and compared against the file *now* separates those. """ @@ -348,7 +351,7 @@ def test_input_extract_digests_match_the_committed_files(artifact): assert _sha256(path) == digest, ( f"{name} has changed since the floors were built; rebuild " "the artifact and re-pin deliberately, and say so in the " - "C3 record — the floors move with it" + "IC3 record — the floors move with it" ) @@ -366,7 +369,7 @@ def test_every_consumed_extract_is_digest_recorded(artifact): def test_v1_is_pinned_but_not_ratified(artifact): # The distinction the whole ceremony rests on: pinning makes the # numbers immovable, not binding. Thresholds arrive only with the - # C3 amendment PR. + # IC3 amendment PR. status = artifact["status"] assert "NOT RATIFIED" in status assert "no thresholds" in status diff --git a/tests/tier_counts.json b/tests/tier_counts.json index 6814f4b6..74d00d57 100644 --- a/tests/tier_counts.json +++ b/tests/tier_counts.json @@ -2,7 +2,7 @@ "schema_version": 1, "counts": { "unit": 803, - "artifact": 1953, + "artifact": 1974, "integration_psid": 804, "reproduction_legacy": 520, "oracle_policyengine": 159 From 34a70fc8c809d23b4643588ca228565b1c7b6513 Mon Sep 17 00:00:00 2001 From: Vahid Ahmadi Date: Thu, 30 Jul 2026 18:17:00 +0200 Subject: [PATCH 16/17] Pin the E12 true-link claims boundary --- runs/employer_firm_floors_v1.json | 4 ++-- scripts/build_employer_firm_floors.py | 15 ++++++++++++--- tests/test_employer_firm_floors.py | 17 ++++++++++++----- 3 files changed, 26 insertions(+), 10 deletions(-) diff --git a/runs/employer_firm_floors_v1.json b/runs/employer_firm_floors_v1.json index 004e7c70..97546639 100644 --- a/runs/employer_firm_floors_v1.json +++ b/runs/employer_firm_floors_v1.json @@ -33,7 +33,7 @@ "e2_sex_age_axis_built": "SUPERSEDES draft_v0's 'e2_no_age_sex_axis'. E2's registered sex x age axis is now floored from the committed J2J sex x age extract (#228): the full 3 x 9 grid at the all-industry margin, 2015Q1-2025Q1, same |log YoY ratio| machinery as the firm-size axis, reported per cell and pooled over the 2 x 8 non-margin cells. The firm-size x sector floors remain the aggregate-side references they always were; the two E2 axes are now on one footing. Naming correction carried from the earlier draft: LEHD's sex x age tabulation is 'sa'; 'se' is sex x EDUCATION, and the draft_v0 finding named the wrong one", "e11_extract_committed_but_no_temporal_replicate": "SUPERSEDES draft_v0's 'e11_no_od_extract', which is now factually stale: the origin x destination firm-size cross IS committed (#228, the full 6 x 6 grid). The obstacle is temporal, not availability. The national detail is published only for 2015Q1-2016Q1 (status flag 11 from 2016Q2), so same-quarter year-over-year pairing yields at most ONE pair per detail cell \u2014 a gap with no dispersion, hence no mean + k*sd floor on the cross. The destination-size margins run through 2025Q1 and are floored in the e11 block. A second, independent bound on any margin threshold comes from cross-source disagreement: the LED tool's margins and the LEHD flat file's differ by up to ~3% in either direction (e11.cross_source_margin_disagreement)", "release_revision_noise_unfloored": "a third floorable concept, recorded and NOT built: vintage-to-vintage revision noise. LEHD revises across releases, and none of the floors here see that \u2014 every extract is a single release (R2026Q1). Observed during the #228 review: LEHD rotated to R2026Q2 mid-round and the J2JOD values for 2015Q1-2025Q1 were unchanged across the rotation (all 1,476 rows), which is one datum, on one series, over one rotation \u2014 suggestive that revision noise is small for these aggregates, not evidence that it is zero. Building it needs two release-stamped vintages of the same series committed; the IC3 referee round should decide whether E1/E2/E6/E7/E11 thresholds must carry a revision allowance on top of the temporal floor", - "e12_deferred": "E12 (AKM moments) has no committed extract: AKM variance decompositions require linked employer-employee microdata, and the published decompositions are research outputs rather than a recurring aggregate release. No floor is buildable; E12 is deferred and does not gate the first IC3 lock. True-linked validation remains deferred pending a committed, provenance-pinned reference extract; Phase 2 must not certify two-sided moments until that reference is adjudicable", + "e12_deferred": "E12 (AKM moments) has no committed extract: AKM variance decompositions require linked employer-employee microdata, and the published decompositions are research outputs rather than a recurring aggregate release. No floor is buildable; E12 is deferred and does not gate the first IC3 lock. True-linked validation remains deferred pending a committed, provenance-pinned reference extract. Reproducing aggregate size/industry employment, mean-earnings, or flow margins cannot certify true worker-firm linkage, coworker sorting, within/between-firm variance, firm effects, or spillovers. Those stronger Phase 2 claims remain a no-go until a true-linked reference is adjudicable", "cycle_signal_in_floors": "temporal-stability floors on published aggregates include true business-cycle variation (2020-2021 most visibly) as well as source noise; both the full-sample and ex-pandemic figures are committed rather than choosing one \u2014 the IC3 referee round picks the formulation with both on the record", "floors_not_monotone_in_disaggregation": "an empirical finding from the sex x age build, and a trap for the threshold policy: the temporal floor is NOT monotone in disaggregation. Of the 26 non-aggregate sex x age cells, the number whose ex-pandemic floor is TIGHTER than the all-sexes all-ages cell is 13 (hire), 10 (separation), 6 (j2j hire), 7 (j2j separation). The pattern is interpretable -- the 45-99 age cells are the most stable and the 19-34 cells the least, while the aggregate carries compositional shift the older cells do not -- but the consequence is procedural: a floor measured on a margin CANNOT be used as a conservative bound for the cells beneath it. Every gated cell needs its own floor, or the threshold policy must say explicitly which cell's floor governs (IC3 open question 1)", "e11_margin_trend": "the E11 destination-size margins are EE flow COUNTS, so their year-over-year variation carries aggregate flow growth (a trend, not noise) exactly as raw EarnS carries nominal wage growth. Both are committed: 'ee' (raw counts) and 'ee_rel' (share of the quarter's all-size EE total, which divides the common trend out). The relative variant is far TIGHTER than the raw one: across the five destination bands its floor mean is 4.5x to 9.5x smaller (e.g. firmsize1 0.1054 raw vs 0.0233 relative), and 3.4x to 6.6x smaller on the ex-pandemic window. Most of the raw floor is the aggregate flow trend, which is exactly what the relative variant removes; the IC3 referee round picks the formulation, as for E7", @@ -2724,6 +2724,6 @@ } }, "e12": { - "status": "deferred - no committed extract" + "status": "deferred - true-linked reference required; aggregate fit cannot certify linkage or two-sided moments" } } diff --git a/scripts/build_employer_firm_floors.py b/scripts/build_employer_firm_floors.py index 4ad262cb..fdb724c1 100644 --- a/scripts/build_employer_firm_floors.py +++ b/scripts/build_employer_firm_floors.py @@ -663,8 +663,12 @@ def build() -> dict: "E12 is deferred and does not gate the first IC3 " "lock. True-linked validation remains deferred " "pending a committed, provenance-pinned reference " - "extract; Phase 2 must not certify two-sided moments " - "until that reference is adjudicable" + "extract. Reproducing aggregate size/industry " + "employment, mean-earnings, or flow margins cannot " + "certify true worker-firm linkage, coworker sorting, " + "within/between-firm variance, firm effects, or " + "spillovers. Those stronger Phase 2 claims remain a " + "no-go until a true-linked reference is adjudicable" ), "cycle_signal_in_floors": ( "temporal-stability floors on published aggregates " @@ -720,7 +724,12 @@ def build() -> dict: "e2": e2, "e6_e7": e6_e7_block(), "e11": e11, - "e12": {"status": "deferred - no committed extract"}, + "e12": { + "status": ( + "deferred - true-linked reference required; aggregate " + "fit cannot certify linkage or two-sided moments" + ) + }, } diff --git a/tests/test_employer_firm_floors.py b/tests/test_employer_firm_floors.py index 5dcc934b..f8ee4d57 100644 --- a/tests/test_employer_firm_floors.py +++ b/tests/test_employer_firm_floors.py @@ -36,10 +36,10 @@ BUILDER = ROOT / "scripts/build_employer_firm_floors.py" ARTIFACT_SHA256 = ( - "500bea1564746797815253b2c1feb04a39b31c0e0815f2d0a56fad74918856be" + "eb58474b42166d51ccbe80a1c58d33ffb8a60a4a5ac097290fecc6c2a8b92f17" ) BUILDER_SHA256 = ( - "5011e68668c283cf4d8238d1c9d8aa8087c8cccf30a9d6d9d3722a8744a2ee17" + "a748975e787f3b255df611ebcf9cb3808c7b0e88866d9aa10ebe320864900a72" ) CANONICAL_NAMES = {band.name for band in banding.CANONICAL_BANDS} @@ -170,9 +170,16 @@ def test_method_findings_are_recorded(artifact): ) assert "trend, not noise" in findings["e11_margin_trend"] assert "does not gate the first IC3 lock" in findings["e12_deferred"] - assert "Phase 2 must not certify two-sided moments" in ( - findings["e12_deferred"] - ) + assert "aggregate size/industry employment" in findings["e12_deferred"] + for unsupported_claim in ( + "true worker-firm linkage", + "coworker sorting", + "within/between-firm variance", + "firm effects", + "spillovers", + ): + assert unsupported_claim in findings["e12_deferred"] + assert "no-go until a true-linked reference" in findings["e12_deferred"] assert "business-cycle" in findings["cycle_signal_in_floors"] assert "nominal wage growth" in findings["e7_nominal_trend"] assert artifact["e11"]["status"].startswith("detail floor NOT") From b4c5b6f117b66b70a5527ec5d842f490ff3296c5 Mon Sep 17 00:00:00 2001 From: Vahid Ahmadi Date: Fri, 31 Jul 2026 10:55:13 +0200 Subject: [PATCH 17/17] Recount aggregate-floor tiers on refreshed roots --- tests/README-tiers.md | 4 ++-- tests/tier_counts.json | 2 +- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/tests/README-tiers.md b/tests/README-tiers.md index 0d121c95..953aed41 100644 --- a/tests/README-tiers.md +++ b/tests/README-tiers.md @@ -39,8 +39,8 @@ pytest --collect-only -q -m oracle_policyengine | tail -1 | Tier | Tests at HEAD | |---|---:| | `unit` | 834 | -| `artifact` | 2,001 | +| `artifact` | 2,022 | | `integration_psid` | 812 | | `reproduction_legacy` | 520 | | `oracle_policyengine` | 159 | -| **Total** | **4,326** | +| **Total** | **4,347** | diff --git a/tests/tier_counts.json b/tests/tier_counts.json index 37ae0b3b..2a07b3d0 100644 --- a/tests/tier_counts.json +++ b/tests/tier_counts.json @@ -2,7 +2,7 @@ "schema_version": 1, "counts": { "unit": 834, - "artifact": 2001, + "artifact": 2022, "integration_psid": 812, "reproduction_legacy": 520, "oracle_policyengine": 159
Workstream A — Daphne (person side)Workstream B — Vahid (firm side)
SIPP job-level reader (label-verified, family.py pattern); CPS NOEMP/tenure loaders; ADR drafted jointly · freeze C1/C2Target pipeline: SUSB/BDS/QWI/J2J/JOLTS extracts committed with provenance notes; canonical banding proposal (C2)
SIPP noise-floor runs; seam-vs-J2J reconciliation run; draft E3–E5/E8–E10 thresholdsAggregate-side floor studies; target/gate partition; draft E1/E2/E6/E7/E11 thresholds · joint: referee round, lock C3
SIPP job-level reader (label-verified, family.py pattern); CPS NOEMP/tenure loaders; ADR drafted jointly · freeze IC1/IC2Target pipeline: SUSB/BDS/QWI/J2J/JOLTS extracts committed with provenance notes; canonical banding proposal (IC2)
SIPP noise-floor runs; seam-vs-J2J reconciliation run; draft E3–E5/E8–E10 thresholdsAggregate-side floor studies; target/gate partition; draft E1/E2/E6/E7/E11 thresholds · joint: referee round, lock IC3
Phase-0 QRF imputation of spells + attributes onto CPSCalibration of the imputed file to partitioned QWI/SUSB cells; E1/E7 evidence artifacts
Phase-1 transition candidates registered; one-shot runs against locked gatesBLM firm-type register prototype; E12 feasibility study (are published AKM/coworker moments sufficient targets?)
Joint: phase-2 go/no-go review with Max, based on committed gate evidence + the E12 identification story