keepset 0.18.0 → 0.19.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -485,12 +485,41 @@ const ParserSchema = z.discriminatedUnion("format", [
485
485
  }).refine((parser) => parser.columns === void 0 || new Set(parser.columns).size === parser.columns.length, {
486
486
  message: "a column may be listed once",
487
487
  path: ["columns"]
488
+ }),
489
+ z.object({
490
+ format: z.literal("geojson"),
491
+ encoding: z.literal("utf-8"),
492
+ idColumn: ColumnNameSchema.nullable(),
493
+ numericColumns: z.array(z.object({
494
+ column: ColumnNameSchema,
495
+ factor: z.number().positive()
496
+ }).strict()),
497
+ dateColumns: z.array(ColumnNameSchema),
498
+ columns: z.array(ColumnNameSchema).min(1)
499
+ }).strict().refine((parser) => new Set(parser.columns).size === parser.columns.length, {
500
+ message: "a column may be listed once",
501
+ path: ["columns"]
502
+ }).refine((parser) => parser.idColumn === null || !parser.columns.includes(parser.idColumn), {
503
+ message: "the id column is the row's id, so it is not listed among the columns",
504
+ path: ["columns"]
505
+ }).refine((parser) => parser.numericColumns.every((numeric) => parser.columns.includes(numeric.column)) && parser.dateColumns.every((date) => parser.columns.includes(date)), {
506
+ message: "a numeric or date column must be among the columns kept",
507
+ path: ["columns"]
508
+ }).refine((parser) => (/* @__PURE__ */ new Set([...parser.numericColumns.map((numeric) => numeric.column), ...parser.dateColumns])).size === parser.numericColumns.length + parser.dateColumns.length, {
509
+ message: "a column may be numeric or a date, not both, and once",
510
+ path: ["dateColumns"]
488
511
  })
489
512
  ]);
513
+ /** Where a source is a paged query and not one file: an ArcGIS feature layer, whose query endpoint returns a limited number of features per request. The source URL is the layer's, the download reads every page in `orderBy` order and the parser reads the one GeoJSON collection they make. */
514
+ const PagingSchema = z.discriminatedUnion("kind", [z.object({
515
+ kind: z.literal("arcgis-query"),
516
+ orderBy: z.string().regex(/^[A-Za-z_][A-Za-z0-9_]*$/, { message: "must be a field name of the layer" })
517
+ }).strict()]);
490
518
  /** How to obtain the dataset: a fetchable recipe naming the source (by index into `sources`), the archive layout and the parser, or a statement that no declarative recipe exists yet and why. */
491
519
  const RecipeSchema = z.discriminatedUnion("status", [z.object({
492
520
  status: z.literal("fetchable"),
493
521
  source: z.int().min(0),
522
+ paging: PagingSchema.optional(),
494
523
  archive: ArchiveSchema,
495
524
  parser: ParserSchema
496
525
  }).strict(), z.object({
@@ -860,7 +889,7 @@ var catalogue_default = {
860
889
  "id": "keepset",
861
890
  "name": "keepset",
862
891
  "description": "The keepset catalogue: datasets with machine-readable recipes that fetch each one and normalise it into its category's target shape.",
863
- "version": "1.6.0",
892
+ "version": "1.7.0",
864
893
  "repository": "https://github.com/Mearman/keepset",
865
894
  "namespaceAliases": {
866
895
  "networkrepository": ["nr"],
@@ -1805,17 +1834,99 @@ var catalogue_default = {
1805
1834
  "retrieved": "2026-10-19",
1806
1835
  "status": "live"
1807
1836
  }, {
1808
- "url": "https://utility.arcgis.com/usrsvcs/servers/53520af18235499d9ecd9c96f624eeae/rest/services/AM/Leak_Repairs_Live/FeatureServer/0/query?where=1%3D1&outFields=*&returnGeometry=false&f=json",
1837
+ "url": "https://utility.arcgis.com/usrsvcs/servers/53520af18235499d9ecd9c96f624eeae/rest/services/AM/Leak_Repairs_Live/FeatureServer/0",
1809
1838
  "retrieved": "2026-10-19",
1810
1839
  "status": "live"
1811
1840
  }],
1812
1841
  "licence": { "kind": "unrecorded" },
1813
1842
  "citations": [],
1814
1843
  "recipe": {
1815
- "status": "not-fetchable",
1816
- "reason": "The source is an ArcGIS feature service that returns Esri JSON in pages of at most 2000 features, and keepset has no ArcGIS JSON parser or paging yet."
1844
+ "status": "fetchable",
1845
+ "source": 1,
1846
+ "paging": {
1847
+ "kind": "arcgis-query",
1848
+ "orderBy": "OBJECTID"
1849
+ },
1850
+ "archive": { "kind": "none" },
1851
+ "parser": {
1852
+ "format": "geojson",
1853
+ "encoding": "utf-8",
1854
+ "idColumn": "OBJECTID",
1855
+ "numericColumns": [{
1856
+ "column": "geometry_latitude",
1857
+ "factor": 1
1858
+ }, {
1859
+ "column": "geometry_longitude",
1860
+ "factor": 1
1861
+ }],
1862
+ "dateColumns": [
1863
+ "StartDateActual",
1864
+ "StopDateActual",
1865
+ "StopDateEstimated"
1866
+ ],
1867
+ "columns": [
1868
+ "StopDateActual",
1869
+ "StopDateEstimated",
1870
+ "geometry_latitude",
1871
+ "geometry_longitude",
1872
+ "StartDateActual",
1873
+ "Activity",
1874
+ "Status"
1875
+ ]
1876
+ }
1877
+ },
1878
+ "crosswalk": {
1879
+ "source": "geojson",
1880
+ "target": "or/v1",
1881
+ "rules": [
1882
+ {
1883
+ "op": "move",
1884
+ "from": "meta",
1885
+ "to": "meta"
1886
+ },
1887
+ {
1888
+ "op": "move",
1889
+ "from": "nodes[].id",
1890
+ "to": "nodes[].id"
1891
+ },
1892
+ {
1893
+ "op": "move",
1894
+ "from": "nodes[].StopDateActual",
1895
+ "to": "nodes[].closed"
1896
+ },
1897
+ {
1898
+ "op": "move",
1899
+ "from": "nodes[].StopDateEstimated",
1900
+ "to": "nodes[].deadline"
1901
+ },
1902
+ {
1903
+ "op": "move",
1904
+ "from": "nodes[].geometry_latitude",
1905
+ "to": "nodes[].lat"
1906
+ },
1907
+ {
1908
+ "op": "move",
1909
+ "from": "nodes[].geometry_longitude",
1910
+ "to": "nodes[].lon"
1911
+ },
1912
+ {
1913
+ "op": "move",
1914
+ "from": "nodes[].StartDateActual",
1915
+ "to": "nodes[].opened"
1916
+ },
1917
+ {
1918
+ "op": "move",
1919
+ "from": "nodes[].Activity",
1920
+ "to": "nodes[].skill"
1921
+ },
1922
+ {
1923
+ "op": "move",
1924
+ "from": "nodes[].Status",
1925
+ "to": "nodes[].status"
1926
+ }
1927
+ ],
1928
+ "oneWay": []
1817
1929
  },
1818
- "crosswalk": { "file": "crosswalks/or-v1/nodes.json" },
1819
1930
  "expectedCounts": {},
1820
1931
  "properties": { "surveyId": "or-113" }
1821
1932
  },
@@ -3481,18 +3592,74 @@ var catalogue_default = {
3481
3592
  "url": "https://gis.ccc.govt.nz/server/rest/services/OpenData/WaterSupply/FeatureServer/3",
3482
3593
  "retrieved": "2026-10-19",
3483
3594
  "status": "live"
3484
- }, {
3485
- "url": "https://gis.ccc.govt.nz/server/rest/services/OpenData/WaterSupply/FeatureServer/3/query?where=1%3D1&outFields=*&returnGeometry=false&f=json",
3486
- "retrieved": "2026-10-19",
3487
- "status": "live"
3488
3595
  }],
3489
3596
  "licence": { "kind": "unrecorded" },
3490
3597
  "citations": [],
3491
3598
  "recipe": {
3492
- "status": "not-fetchable",
3493
- "reason": "The source is an ArcGIS feature service that returns Esri JSON in pages of at most 2000 features, and keepset has no ArcGIS JSON parser or paging yet."
3599
+ "status": "fetchable",
3600
+ "source": 0,
3601
+ "paging": {
3602
+ "kind": "arcgis-query",
3603
+ "orderBy": "WaterShutOffID"
3604
+ },
3605
+ "archive": { "kind": "none" },
3606
+ "parser": {
3607
+ "format": "geojson",
3608
+ "encoding": "utf-8",
3609
+ "idColumn": "WaterShutOffID",
3610
+ "numericColumns": [],
3611
+ "dateColumns": ["PlannedFinishTime", "CreateDate"],
3612
+ "columns": [
3613
+ "PlannedFinishTime",
3614
+ "CreateDate",
3615
+ "IsPlanned",
3616
+ "WorkStatus",
3617
+ "LocationSuburb"
3618
+ ]
3619
+ }
3620
+ },
3621
+ "crosswalk": {
3622
+ "source": "geojson",
3623
+ "target": "or/v1",
3624
+ "rules": [
3625
+ {
3626
+ "op": "move",
3627
+ "from": "meta",
3628
+ "to": "meta"
3629
+ },
3630
+ {
3631
+ "op": "move",
3632
+ "from": "nodes[].id",
3633
+ "to": "nodes[].id"
3634
+ },
3635
+ {
3636
+ "op": "move",
3637
+ "from": "nodes[].PlannedFinishTime",
3638
+ "to": "nodes[].deadline"
3639
+ },
3640
+ {
3641
+ "op": "move",
3642
+ "from": "nodes[].CreateDate",
3643
+ "to": "nodes[].opened"
3644
+ },
3645
+ {
3646
+ "op": "move",
3647
+ "from": "nodes[].IsPlanned",
3648
+ "to": "nodes[].skill"
3649
+ },
3650
+ {
3651
+ "op": "move",
3652
+ "from": "nodes[].WorkStatus",
3653
+ "to": "nodes[].status"
3654
+ },
3655
+ {
3656
+ "op": "move",
3657
+ "from": "nodes[].LocationSuburb",
3658
+ "to": "nodes[].territory"
3659
+ }
3660
+ ],
3661
+ "oneWay": []
3494
3662
  },
3495
- "crosswalk": { "file": "crosswalks/or-v1/nodes.json" },
3496
3663
  "expectedCounts": {},
3497
3664
  "properties": { "surveyId": "or-114" }
3498
3665
  },
@@ -4583,6 +4750,10 @@ var catalogue_default = {
4583
4750
  "url": "https://hub.arcgis.com/datasets/297fcd81118a4d5cbf2fd07ebdee628c",
4584
4751
  "retrieved": "2026-10-19",
4585
4752
  "status": "live"
4753
+ }, {
4754
+ "url": "https://gis2.co.dakota.mn.us/arcgis/rest/services/DCGIS_OL_PropertyInformation/MapServer/80",
4755
+ "retrieved": "2026-10-19",
4756
+ "status": "live"
4586
4757
  }],
4587
4758
  "licence": {
4588
4759
  "kind": "custom",
@@ -4591,10 +4762,83 @@ var catalogue_default = {
4591
4762
  },
4592
4763
  "citations": [],
4593
4764
  "recipe": {
4594
- "status": "not-fetchable",
4595
- "reason": "The source is an ArcGIS map service that returns GeoJSON and keepset has no GeoJSON parser yet."
4765
+ "status": "fetchable",
4766
+ "source": 1,
4767
+ "paging": {
4768
+ "kind": "arcgis-query",
4769
+ "orderBy": "OBJECTID"
4770
+ },
4771
+ "archive": { "kind": "none" },
4772
+ "parser": {
4773
+ "format": "geojson",
4774
+ "encoding": "utf-8",
4775
+ "idColumn": "OBJECTID",
4776
+ "numericColumns": [
4777
+ {
4778
+ "column": "geometry_latitude",
4779
+ "factor": 1
4780
+ },
4781
+ {
4782
+ "column": "geometry_longitude",
4783
+ "factor": 1
4784
+ },
4785
+ {
4786
+ "column": "SaleAmount",
4787
+ "factor": 1
4788
+ }
4789
+ ],
4790
+ "dateColumns": ["SaleDate"],
4791
+ "columns": [
4792
+ "SaleDate",
4793
+ "geometry_latitude",
4794
+ "geometry_longitude",
4795
+ "SaleAmount",
4796
+ "CITYNAME"
4797
+ ]
4798
+ }
4799
+ },
4800
+ "crosswalk": {
4801
+ "source": "geojson",
4802
+ "target": "or/v1",
4803
+ "rules": [
4804
+ {
4805
+ "op": "move",
4806
+ "from": "meta",
4807
+ "to": "meta"
4808
+ },
4809
+ {
4810
+ "op": "move",
4811
+ "from": "nodes[].id",
4812
+ "to": "nodes[].id"
4813
+ },
4814
+ {
4815
+ "op": "move",
4816
+ "from": "nodes[].SaleDate",
4817
+ "to": "nodes[].deadline"
4818
+ },
4819
+ {
4820
+ "op": "move",
4821
+ "from": "nodes[].geometry_latitude",
4822
+ "to": "nodes[].lat"
4823
+ },
4824
+ {
4825
+ "op": "move",
4826
+ "from": "nodes[].geometry_longitude",
4827
+ "to": "nodes[].lon"
4828
+ },
4829
+ {
4830
+ "op": "move",
4831
+ "from": "nodes[].SaleAmount",
4832
+ "to": "nodes[].prize"
4833
+ },
4834
+ {
4835
+ "op": "move",
4836
+ "from": "nodes[].CITYNAME",
4837
+ "to": "nodes[].territory"
4838
+ }
4839
+ ],
4840
+ "oneWay": []
4596
4841
  },
4597
- "crosswalk": { "file": "crosswalks/or-v1/nodes.json" },
4598
4842
  "expectedCounts": {},
4599
4843
  "properties": { "surveyId": "or-46" }
4600
4844
  },
@@ -5201,10 +5445,61 @@ var catalogue_default = {
5201
5445
  "licence": { "kind": "unrecorded" },
5202
5446
  "citations": [],
5203
5447
  "recipe": {
5204
- "status": "not-fetchable",
5205
- "reason": "The source is an ArcGIS feature service that returns GeoJSON in pages of a limited number of features and keepset has no GeoJSON parser or paging yet."
5448
+ "status": "fetchable",
5449
+ "source": 0,
5450
+ "paging": {
5451
+ "kind": "arcgis-query",
5452
+ "orderBy": "OBJECTID"
5453
+ },
5454
+ "archive": { "kind": "none" },
5455
+ "parser": {
5456
+ "format": "geojson",
5457
+ "encoding": "utf-8",
5458
+ "idColumn": "OBJECTID",
5459
+ "numericColumns": [{
5460
+ "column": "lien_balance",
5461
+ "factor": 1
5462
+ }],
5463
+ "dateColumns": [],
5464
+ "columns": [
5465
+ "sale_or_purchase_date",
5466
+ "lien_balance",
5467
+ "lien_type"
5468
+ ]
5469
+ }
5470
+ },
5471
+ "crosswalk": {
5472
+ "source": "geojson",
5473
+ "target": "or/v1",
5474
+ "rules": [
5475
+ {
5476
+ "op": "move",
5477
+ "from": "meta",
5478
+ "to": "meta"
5479
+ },
5480
+ {
5481
+ "op": "move",
5482
+ "from": "nodes[].id",
5483
+ "to": "nodes[].id"
5484
+ },
5485
+ {
5486
+ "op": "move",
5487
+ "from": "nodes[].sale_or_purchase_date",
5488
+ "to": "nodes[].opened"
5489
+ },
5490
+ {
5491
+ "op": "move",
5492
+ "from": "nodes[].lien_balance",
5493
+ "to": "nodes[].prize"
5494
+ },
5495
+ {
5496
+ "op": "move",
5497
+ "from": "nodes[].lien_type",
5498
+ "to": "nodes[].skill"
5499
+ }
5500
+ ],
5501
+ "oneWay": []
5206
5502
  },
5207
- "crosswalk": { "file": "crosswalks/or-v1/nodes.json" },
5208
5503
  "expectedCounts": {},
5209
5504
  "properties": { "surveyId": "or-44" }
5210
5505
  },
@@ -5226,17 +5521,83 @@ var catalogue_default = {
5226
5521
  "retrieved": "2026-10-19",
5227
5522
  "status": "live"
5228
5523
  }, {
5229
- "url": "https://services-eu1.arcgis.com/PyGgzM45TvWtSBsM/arcgis/rest/services/DCC_Derelict_Sites_Register_Public_points_view/FeatureServer/0/query?where=1%3D1&outFields=*&f=geojson",
5524
+ "url": "https://services-eu1.arcgis.com/PyGgzM45TvWtSBsM/arcgis/rest/services/DCC_Derelict_Sites_Register_Public_points_view/FeatureServer/0",
5230
5525
  "retrieved": "2026-10-19",
5231
5526
  "status": "live"
5232
5527
  }],
5233
5528
  "licence": { "kind": "unrecorded" },
5234
5529
  "citations": [],
5235
5530
  "recipe": {
5236
- "status": "not-fetchable",
5237
- "reason": "The data is an ArcGIS feature service that returns GeoJSON, and keepset has no GeoJSON parser or paging yet."
5531
+ "status": "fetchable",
5532
+ "source": 1,
5533
+ "paging": {
5534
+ "kind": "arcgis-query",
5535
+ "orderBy": "OBJECTID"
5536
+ },
5537
+ "archive": { "kind": "none" },
5538
+ "parser": {
5539
+ "format": "geojson",
5540
+ "encoding": "utf-8",
5541
+ "idColumn": "OBJECTID",
5542
+ "numericColumns": [{
5543
+ "column": "geometry_latitude",
5544
+ "factor": 1
5545
+ }, {
5546
+ "column": "geometry_longitude",
5547
+ "factor": 1
5548
+ }],
5549
+ "dateColumns": [],
5550
+ "columns": [
5551
+ "geometry_latitude",
5552
+ "geometry_longitude",
5553
+ "date_added_to_the_derelict_sites_register",
5554
+ "derelict_site_status",
5555
+ "administrative_area_name"
5556
+ ]
5557
+ }
5558
+ },
5559
+ "crosswalk": {
5560
+ "source": "geojson",
5561
+ "target": "or/v1",
5562
+ "rules": [
5563
+ {
5564
+ "op": "move",
5565
+ "from": "meta",
5566
+ "to": "meta"
5567
+ },
5568
+ {
5569
+ "op": "move",
5570
+ "from": "nodes[].id",
5571
+ "to": "nodes[].id"
5572
+ },
5573
+ {
5574
+ "op": "move",
5575
+ "from": "nodes[].geometry_latitude",
5576
+ "to": "nodes[].lat"
5577
+ },
5578
+ {
5579
+ "op": "move",
5580
+ "from": "nodes[].geometry_longitude",
5581
+ "to": "nodes[].lon"
5582
+ },
5583
+ {
5584
+ "op": "move",
5585
+ "from": "nodes[].date_added_to_the_derelict_sites_register",
5586
+ "to": "nodes[].opened"
5587
+ },
5588
+ {
5589
+ "op": "move",
5590
+ "from": "nodes[].derelict_site_status",
5591
+ "to": "nodes[].status"
5592
+ },
5593
+ {
5594
+ "op": "move",
5595
+ "from": "nodes[].administrative_area_name",
5596
+ "to": "nodes[].territory"
5597
+ }
5598
+ ],
5599
+ "oneWay": []
5238
5600
  },
5239
- "crosswalk": { "file": "crosswalks/or-v1/nodes.json" },
5240
5601
  "expectedCounts": {},
5241
5602
  "properties": { "surveyId": "or-90" }
5242
5603
  },
@@ -5625,14 +5986,66 @@ var catalogue_default = {
5625
5986
  "url": "https://services1.arcgis.com/A14KNJpxNyBTu19J/arcgis/rest/services/Weed_Abatement_Parcels/FeatureServer",
5626
5987
  "retrieved": "2026-10-19",
5627
5988
  "status": "live"
5989
+ }, {
5990
+ "url": "https://services1.arcgis.com/A14KNJpxNyBTu19J/arcgis/rest/services/Weed_Abatement_Parcels/FeatureServer/0",
5991
+ "retrieved": "2026-10-19",
5992
+ "status": "live"
5628
5993
  }],
5629
5994
  "licence": { "kind": "unrecorded" },
5630
5995
  "citations": [],
5631
5996
  "recipe": {
5632
- "status": "not-fetchable",
5633
- "reason": "The data is an ArcGIS feature service that returns GeoJSON of parcel polygons in pages of at most 1000 features, and keepset has no GeoJSON parser or paging yet."
5997
+ "status": "fetchable",
5998
+ "source": 1,
5999
+ "paging": {
6000
+ "kind": "arcgis-query",
6001
+ "orderBy": "OBJECTID"
6002
+ },
6003
+ "archive": { "kind": "none" },
6004
+ "parser": {
6005
+ "format": "geojson",
6006
+ "encoding": "utf-8",
6007
+ "idColumn": "OBJECTID",
6008
+ "numericColumns": [],
6009
+ "dateColumns": [],
6010
+ "columns": [
6011
+ "TYPE",
6012
+ "STATUS",
6013
+ "CITY"
6014
+ ]
6015
+ }
6016
+ },
6017
+ "crosswalk": {
6018
+ "source": "geojson",
6019
+ "target": "or/v1",
6020
+ "rules": [
6021
+ {
6022
+ "op": "move",
6023
+ "from": "meta",
6024
+ "to": "meta"
6025
+ },
6026
+ {
6027
+ "op": "move",
6028
+ "from": "nodes[].id",
6029
+ "to": "nodes[].id"
6030
+ },
6031
+ {
6032
+ "op": "move",
6033
+ "from": "nodes[].TYPE",
6034
+ "to": "nodes[].skill"
6035
+ },
6036
+ {
6037
+ "op": "move",
6038
+ "from": "nodes[].STATUS",
6039
+ "to": "nodes[].status"
6040
+ },
6041
+ {
6042
+ "op": "move",
6043
+ "from": "nodes[].CITY",
6044
+ "to": "nodes[].territory"
6045
+ }
6046
+ ],
6047
+ "oneWay": []
5634
6048
  },
5635
- "crosswalk": { "file": "crosswalks/or-v1/nodes.json" },
5636
6049
  "expectedCounts": {},
5637
6050
  "properties": { "surveyId": "or-94" }
5638
6051
  },
@@ -7195,14 +7608,72 @@ var catalogue_default = {
7195
7608
  "url": "https://hub.arcgis.com/datasets/a963186c15d845bb93cce1c00022e380",
7196
7609
  "retrieved": "2026-10-19",
7197
7610
  "status": "live"
7611
+ }, {
7612
+ "url": "https://services3.arcgis.com/UYCjD74OfK5zL9b8/arcgis/rest/services/Arrears_2025/FeatureServer/0",
7613
+ "retrieved": "2026-10-19",
7614
+ "status": "live"
7198
7615
  }],
7199
7616
  "licence": { "kind": "unrecorded" },
7200
7617
  "citations": [],
7201
7618
  "recipe": {
7202
- "status": "not-fetchable",
7203
- "reason": "The source is an ArcGIS feature service that returns GeoJSON in pages of a limited number of features and keepset has no GeoJSON parser or paging yet."
7619
+ "status": "fetchable",
7620
+ "source": 1,
7621
+ "paging": {
7622
+ "kind": "arcgis-query",
7623
+ "orderBy": "FID"
7624
+ },
7625
+ "archive": { "kind": "none" },
7626
+ "parser": {
7627
+ "format": "geojson",
7628
+ "encoding": "utf-8",
7629
+ "idColumn": "FID",
7630
+ "numericColumns": [],
7631
+ "dateColumns": [],
7632
+ "columns": [
7633
+ "ArrearsC_2",
7634
+ "LeaseTypeD",
7635
+ "ArrearsSta",
7636
+ "RegionDesc"
7637
+ ]
7638
+ }
7639
+ },
7640
+ "crosswalk": {
7641
+ "source": "geojson",
7642
+ "target": "or/v1",
7643
+ "rules": [
7644
+ {
7645
+ "op": "move",
7646
+ "from": "meta",
7647
+ "to": "meta"
7648
+ },
7649
+ {
7650
+ "op": "move",
7651
+ "from": "nodes[].id",
7652
+ "to": "nodes[].id"
7653
+ },
7654
+ {
7655
+ "op": "move",
7656
+ "from": "nodes[].ArrearsC_2",
7657
+ "to": "nodes[].opened"
7658
+ },
7659
+ {
7660
+ "op": "move",
7661
+ "from": "nodes[].LeaseTypeD",
7662
+ "to": "nodes[].skill"
7663
+ },
7664
+ {
7665
+ "op": "move",
7666
+ "from": "nodes[].ArrearsSta",
7667
+ "to": "nodes[].status"
7668
+ },
7669
+ {
7670
+ "op": "move",
7671
+ "from": "nodes[].RegionDesc",
7672
+ "to": "nodes[].territory"
7673
+ }
7674
+ ],
7675
+ "oneWay": []
7204
7676
  },
7205
- "crosswalk": { "file": "crosswalks/or-v1/nodes.json" },
7206
7677
  "expectedCounts": {},
7207
7678
  "properties": { "surveyId": "or-41" }
7208
7679
  },
@@ -8349,14 +8820,97 @@ var catalogue_default = {
8349
8820
  "url": "https://hub.arcgis.com/datasets/1fd891c3301c4c4581b86c338468fbe4",
8350
8821
  "retrieved": "2026-10-19",
8351
8822
  "status": "live"
8823
+ }, {
8824
+ "url": "https://services1.arcgis.com/79kfd2K6fskCAkyg/arcgis/rest/services/PM_SiteVisit_Violations/FeatureServer/0",
8825
+ "retrieved": "2026-10-19",
8826
+ "status": "live"
8352
8827
  }],
8353
8828
  "licence": { "kind": "unrecorded" },
8354
8829
  "citations": [],
8355
8830
  "recipe": {
8356
- "status": "not-fetchable",
8357
- "reason": "The source is an ArcGIS feature service that returns GeoJSON in pages of a limited number of features, and keepset has no GeoJSON parser or paging yet."
8831
+ "status": "fetchable",
8832
+ "source": 1,
8833
+ "paging": {
8834
+ "kind": "arcgis-query",
8835
+ "orderBy": "ObjectId"
8836
+ },
8837
+ "archive": { "kind": "none" },
8838
+ "parser": {
8839
+ "format": "geojson",
8840
+ "encoding": "utf-8",
8841
+ "idColumn": "ObjectId",
8842
+ "numericColumns": [
8843
+ {
8844
+ "column": "geometry_latitude",
8845
+ "factor": 1
8846
+ },
8847
+ {
8848
+ "column": "geometry_longitude",
8849
+ "factor": 1
8850
+ },
8851
+ {
8852
+ "column": "CitationAmount",
8853
+ "factor": 1
8854
+ }
8855
+ ],
8856
+ "dateColumns": ["G6A_G6_COMPL_DD"],
8857
+ "columns": [
8858
+ "G6A_G6_COMPL_DD",
8859
+ "geometry_latitude",
8860
+ "geometry_longitude",
8861
+ "CitationAmount",
8862
+ "G6A_G6_STATUS",
8863
+ "CouncilDist"
8864
+ ]
8865
+ }
8866
+ },
8867
+ "crosswalk": {
8868
+ "source": "geojson",
8869
+ "target": "or/v1",
8870
+ "rules": [
8871
+ {
8872
+ "op": "move",
8873
+ "from": "meta",
8874
+ "to": "meta"
8875
+ },
8876
+ {
8877
+ "op": "move",
8878
+ "from": "nodes[].id",
8879
+ "to": "nodes[].id"
8880
+ },
8881
+ {
8882
+ "op": "move",
8883
+ "from": "nodes[].G6A_G6_COMPL_DD",
8884
+ "to": "nodes[].deadline"
8885
+ },
8886
+ {
8887
+ "op": "move",
8888
+ "from": "nodes[].geometry_latitude",
8889
+ "to": "nodes[].lat"
8890
+ },
8891
+ {
8892
+ "op": "move",
8893
+ "from": "nodes[].geometry_longitude",
8894
+ "to": "nodes[].lon"
8895
+ },
8896
+ {
8897
+ "op": "move",
8898
+ "from": "nodes[].CitationAmount",
8899
+ "to": "nodes[].prize"
8900
+ },
8901
+ {
8902
+ "op": "move",
8903
+ "from": "nodes[].G6A_G6_STATUS",
8904
+ "to": "nodes[].status"
8905
+ },
8906
+ {
8907
+ "op": "move",
8908
+ "from": "nodes[].CouncilDist",
8909
+ "to": "nodes[].territory"
8910
+ }
8911
+ ],
8912
+ "oneWay": []
8358
8913
  },
8359
- "crosswalk": { "file": "crosswalks/or-v1/nodes.json" },
8360
8914
  "expectedCounts": {},
8361
8915
  "properties": { "surveyId": "or-62" }
8362
8916
  },
@@ -13445,6 +13999,10 @@ var catalogue_default = {
13445
13999
  "url": "https://hub.arcgis.com/datasets/596fa66b53a948e4b74fea86dbe44690",
13446
14000
  "retrieved": "2026-10-19",
13447
14001
  "status": "live"
14002
+ }, {
14003
+ "url": "https://www.maps.north-ayrshire.gov.uk/arcgis/rest/services/AGOL/Building_Warrant_Applications_Weekly/FeatureServer/2",
14004
+ "retrieved": "2026-10-19",
14005
+ "status": "live"
13448
14006
  }],
13449
14007
  "licence": {
13450
14008
  "kind": "custom",
@@ -13453,10 +14011,82 @@ var catalogue_default = {
13453
14011
  },
13454
14012
  "citations": [],
13455
14013
  "recipe": {
13456
- "status": "not-fetchable",
13457
- "reason": "The data is an ArcGIS feature service that returns GeoJSON in pages of at most 2000 features, and keepset has no GeoJSON parser or paging yet."
14014
+ "status": "fetchable",
14015
+ "source": 1,
14016
+ "paging": {
14017
+ "kind": "arcgis-query",
14018
+ "orderBy": "OBJECTID"
14019
+ },
14020
+ "archive": { "kind": "none" },
14021
+ "parser": {
14022
+ "format": "geojson",
14023
+ "encoding": "utf-8",
14024
+ "idColumn": "OBJECTID",
14025
+ "numericColumns": [{
14026
+ "column": "geometry_latitude",
14027
+ "factor": 1
14028
+ }, {
14029
+ "column": "geometry_longitude",
14030
+ "factor": 1
14031
+ }],
14032
+ "dateColumns": ["RECPTD", "DECIDD"],
14033
+ "columns": [
14034
+ "DECIDD",
14035
+ "geometry_latitude",
14036
+ "geometry_longitude",
14037
+ "RECPTD",
14038
+ "APPTYP",
14039
+ "DECISION"
14040
+ ]
14041
+ }
14042
+ },
14043
+ "crosswalk": {
14044
+ "source": "geojson",
14045
+ "target": "or/v1",
14046
+ "rules": [
14047
+ {
14048
+ "op": "move",
14049
+ "from": "meta",
14050
+ "to": "meta"
14051
+ },
14052
+ {
14053
+ "op": "move",
14054
+ "from": "nodes[].id",
14055
+ "to": "nodes[].id"
14056
+ },
14057
+ {
14058
+ "op": "move",
14059
+ "from": "nodes[].DECIDD",
14060
+ "to": "nodes[].closed"
14061
+ },
14062
+ {
14063
+ "op": "move",
14064
+ "from": "nodes[].geometry_latitude",
14065
+ "to": "nodes[].lat"
14066
+ },
14067
+ {
14068
+ "op": "move",
14069
+ "from": "nodes[].geometry_longitude",
14070
+ "to": "nodes[].lon"
14071
+ },
14072
+ {
14073
+ "op": "move",
14074
+ "from": "nodes[].RECPTD",
14075
+ "to": "nodes[].opened"
14076
+ },
14077
+ {
14078
+ "op": "move",
14079
+ "from": "nodes[].APPTYP",
14080
+ "to": "nodes[].skill"
14081
+ },
14082
+ {
14083
+ "op": "move",
14084
+ "from": "nodes[].DECISION",
14085
+ "to": "nodes[].status"
14086
+ }
14087
+ ],
14088
+ "oneWay": []
13458
14089
  },
13459
- "crosswalk": { "file": "crosswalks/or-v1/nodes.json" },
13460
14090
  "expectedCounts": {},
13461
14091
  "properties": { "surveyId": "or-78" }
13462
14092
  },
@@ -15201,14 +15831,84 @@ var catalogue_default = {
15201
15831
  "url": "https://utility.arcgis.com/usrsvcs/servers/931a175b8eaa4abebf1379743e6d71c1/rest/services/Environmental_Resources/Weed_Abatement/FeatureServer",
15202
15832
  "retrieved": "2026-10-19",
15203
15833
  "status": "live"
15834
+ }, {
15835
+ "url": "https://utility.arcgis.com/usrsvcs/servers/931a175b8eaa4abebf1379743e6d71c1/rest/services/Environmental_Resources/Weed_Abatement/FeatureServer/0",
15836
+ "retrieved": "2026-10-19",
15837
+ "status": "live"
15204
15838
  }],
15205
15839
  "licence": { "kind": "unrecorded" },
15206
15840
  "citations": [],
15207
15841
  "recipe": {
15208
- "status": "not-fetchable",
15209
- "reason": "The data is an ArcGIS feature service that returns GeoJSON in pages of at most 15000 features, and keepset has no GeoJSON parser or paging yet."
15842
+ "status": "fetchable",
15843
+ "source": 1,
15844
+ "paging": {
15845
+ "kind": "arcgis-query",
15846
+ "orderBy": "OBJECTID"
15847
+ },
15848
+ "archive": { "kind": "none" },
15849
+ "parser": {
15850
+ "format": "geojson",
15851
+ "encoding": "utf-8",
15852
+ "idColumn": "OBJECTID",
15853
+ "numericColumns": [{
15854
+ "column": "geometry_latitude",
15855
+ "factor": 1
15856
+ }, {
15857
+ "column": "geometry_longitude",
15858
+ "factor": 1
15859
+ }],
15860
+ "dateColumns": ["created_date"],
15861
+ "columns": [
15862
+ "geometry_latitude",
15863
+ "geometry_longitude",
15864
+ "created_date",
15865
+ "status",
15866
+ "district"
15867
+ ]
15868
+ }
15869
+ },
15870
+ "crosswalk": {
15871
+ "source": "geojson",
15872
+ "target": "or/v1",
15873
+ "rules": [
15874
+ {
15875
+ "op": "move",
15876
+ "from": "meta",
15877
+ "to": "meta"
15878
+ },
15879
+ {
15880
+ "op": "move",
15881
+ "from": "nodes[].id",
15882
+ "to": "nodes[].id"
15883
+ },
15884
+ {
15885
+ "op": "move",
15886
+ "from": "nodes[].geometry_latitude",
15887
+ "to": "nodes[].lat"
15888
+ },
15889
+ {
15890
+ "op": "move",
15891
+ "from": "nodes[].geometry_longitude",
15892
+ "to": "nodes[].lon"
15893
+ },
15894
+ {
15895
+ "op": "move",
15896
+ "from": "nodes[].created_date",
15897
+ "to": "nodes[].opened"
15898
+ },
15899
+ {
15900
+ "op": "move",
15901
+ "from": "nodes[].status",
15902
+ "to": "nodes[].status"
15903
+ },
15904
+ {
15905
+ "op": "move",
15906
+ "from": "nodes[].district",
15907
+ "to": "nodes[].territory"
15908
+ }
15909
+ ],
15910
+ "oneWay": []
15210
15911
  },
15211
- "crosswalk": { "file": "crosswalks/or-v1/nodes.json" },
15212
15912
  "expectedCounts": {},
15213
15913
  "properties": { "surveyId": "or-92" }
15214
15914
  },
@@ -18798,14 +19498,84 @@ var catalogue_default = {
18798
19498
  "url": "https://services3.arcgis.com/vtilYbC3YeF6EBJ1/arcgis/rest/services/service_05f1e63ba1494703b42f0dd606859f0b/FeatureServer",
18799
19499
  "retrieved": "2026-10-19",
18800
19500
  "status": "live"
19501
+ }, {
19502
+ "url": "https://services3.arcgis.com/vtilYbC3YeF6EBJ1/arcgis/rest/services/service_05f1e63ba1494703b42f0dd606859f0b/FeatureServer/0",
19503
+ "retrieved": "2026-10-19",
19504
+ "status": "live"
18801
19505
  }],
18802
19506
  "licence": { "kind": "unrecorded" },
18803
19507
  "citations": [],
18804
19508
  "recipe": {
18805
- "status": "not-fetchable",
18806
- "reason": "The data is an ArcGIS feature service that returns GeoJSON in pages of at most 1000 features, and keepset has no GeoJSON parser or paging yet."
19509
+ "status": "fetchable",
19510
+ "source": 1,
19511
+ "paging": {
19512
+ "kind": "arcgis-query",
19513
+ "orderBy": "objectid"
19514
+ },
19515
+ "archive": { "kind": "none" },
19516
+ "parser": {
19517
+ "format": "geojson",
19518
+ "encoding": "utf-8",
19519
+ "idColumn": "objectid",
19520
+ "numericColumns": [{
19521
+ "column": "geometry_latitude",
19522
+ "factor": 1
19523
+ }, {
19524
+ "column": "geometry_longitude",
19525
+ "factor": 1
19526
+ }],
19527
+ "dateColumns": ["date_towed"],
19528
+ "columns": [
19529
+ "geometry_latitude",
19530
+ "geometry_longitude",
19531
+ "date_towed",
19532
+ "reason",
19533
+ "vehicle_city"
19534
+ ]
19535
+ }
19536
+ },
19537
+ "crosswalk": {
19538
+ "source": "geojson",
19539
+ "target": "or/v1",
19540
+ "rules": [
19541
+ {
19542
+ "op": "move",
19543
+ "from": "meta",
19544
+ "to": "meta"
19545
+ },
19546
+ {
19547
+ "op": "move",
19548
+ "from": "nodes[].id",
19549
+ "to": "nodes[].id"
19550
+ },
19551
+ {
19552
+ "op": "move",
19553
+ "from": "nodes[].geometry_latitude",
19554
+ "to": "nodes[].lat"
19555
+ },
19556
+ {
19557
+ "op": "move",
19558
+ "from": "nodes[].geometry_longitude",
19559
+ "to": "nodes[].lon"
19560
+ },
19561
+ {
19562
+ "op": "move",
19563
+ "from": "nodes[].date_towed",
19564
+ "to": "nodes[].opened"
19565
+ },
19566
+ {
19567
+ "op": "move",
19568
+ "from": "nodes[].reason",
19569
+ "to": "nodes[].skill"
19570
+ },
19571
+ {
19572
+ "op": "move",
19573
+ "from": "nodes[].vehicle_city",
19574
+ "to": "nodes[].territory"
19575
+ }
19576
+ ],
19577
+ "oneWay": []
18807
19578
  },
18808
- "crosswalk": { "file": "crosswalks/or-v1/nodes.json" },
18809
19579
  "expectedCounts": {},
18810
19580
  "properties": { "surveyId": "or-96" }
18811
19581
  },
@@ -18938,14 +19708,91 @@ var catalogue_default = {
18938
19708
  "url": "https://hub.arcgis.com/datasets/b8ac65c653b343739be21cb2773faace",
18939
19709
  "retrieved": "2026-10-19",
18940
19710
  "status": "live"
19711
+ }, {
19712
+ "url": "https://services.arcgis.com/fLeGjb7u4uXqeF9q/arcgis/rest/services/REAL_ESTATE_TAX_DELINQUENCIES/FeatureServer/0",
19713
+ "retrieved": "2026-10-19",
19714
+ "status": "live"
18941
19715
  }],
18942
19716
  "licence": { "kind": "unrecorded" },
18943
19717
  "citations": [],
18944
19718
  "recipe": {
18945
- "status": "not-fetchable",
18946
- "reason": "The source is an ArcGIS feature service that returns GeoJSON in pages of a limited number of features and keepset has no GeoJSON parser or paging yet."
19719
+ "status": "fetchable",
19720
+ "source": 1,
19721
+ "paging": {
19722
+ "kind": "arcgis-query",
19723
+ "orderBy": "OBJECTID"
19724
+ },
19725
+ "archive": { "kind": "none" },
19726
+ "parser": {
19727
+ "format": "geojson",
19728
+ "encoding": "utf-8",
19729
+ "idColumn": "OBJECTID",
19730
+ "numericColumns": [
19731
+ {
19732
+ "column": "geometry_latitude",
19733
+ "factor": 1
19734
+ },
19735
+ {
19736
+ "column": "geometry_longitude",
19737
+ "factor": 1
19738
+ },
19739
+ {
19740
+ "column": "TOTAL_DUE",
19741
+ "factor": 1
19742
+ }
19743
+ ],
19744
+ "dateColumns": [],
19745
+ "columns": [
19746
+ "geometry_latitude",
19747
+ "geometry_longitude",
19748
+ "TOTAL_DUE",
19749
+ "BUILDING_CATEGORY",
19750
+ "ZIP_CODE"
19751
+ ]
19752
+ }
19753
+ },
19754
+ "crosswalk": {
19755
+ "source": "geojson",
19756
+ "target": "or/v1",
19757
+ "rules": [
19758
+ {
19759
+ "op": "move",
19760
+ "from": "meta",
19761
+ "to": "meta"
19762
+ },
19763
+ {
19764
+ "op": "move",
19765
+ "from": "nodes[].id",
19766
+ "to": "nodes[].id"
19767
+ },
19768
+ {
19769
+ "op": "move",
19770
+ "from": "nodes[].geometry_latitude",
19771
+ "to": "nodes[].lat"
19772
+ },
19773
+ {
19774
+ "op": "move",
19775
+ "from": "nodes[].geometry_longitude",
19776
+ "to": "nodes[].lon"
19777
+ },
19778
+ {
19779
+ "op": "move",
19780
+ "from": "nodes[].TOTAL_DUE",
19781
+ "to": "nodes[].prize"
19782
+ },
19783
+ {
19784
+ "op": "move",
19785
+ "from": "nodes[].BUILDING_CATEGORY",
19786
+ "to": "nodes[].skill"
19787
+ },
19788
+ {
19789
+ "op": "move",
19790
+ "from": "nodes[].ZIP_CODE",
19791
+ "to": "nodes[].territory"
19792
+ }
19793
+ ],
19794
+ "oneWay": []
18947
19795
  },
18948
- "crosswalk": { "file": "crosswalks/or-v1/nodes.json" },
18949
19796
  "expectedCounts": {},
18950
19797
  "properties": { "surveyId": "or-40" }
18951
19798
  },
@@ -52253,14 +53100,78 @@ var catalogue_default = {
52253
53100
  "url": "https://services3.arcgis.com/IgR6ay8jzuIj7VSF/arcgis/rest/services/Weed_Abatement_2017/FeatureServer",
52254
53101
  "retrieved": "2026-10-19",
52255
53102
  "status": "live"
53103
+ }, {
53104
+ "url": "https://services3.arcgis.com/IgR6ay8jzuIj7VSF/arcgis/rest/services/Weed_Abatement_2017/FeatureServer/0",
53105
+ "retrieved": "2026-10-19",
53106
+ "status": "live"
52256
53107
  }],
52257
53108
  "licence": { "kind": "unrecorded" },
52258
53109
  "citations": [],
52259
53110
  "recipe": {
52260
- "status": "not-fetchable",
52261
- "reason": "The data is an ArcGIS feature service that returns GeoJSON in pages of at most 1000 features, and keepset has no GeoJSON parser or paging yet."
53111
+ "status": "fetchable",
53112
+ "source": 1,
53113
+ "paging": {
53114
+ "kind": "arcgis-query",
53115
+ "orderBy": "OBJECTID"
53116
+ },
53117
+ "archive": { "kind": "none" },
53118
+ "parser": {
53119
+ "format": "geojson",
53120
+ "encoding": "utf-8",
53121
+ "idColumn": "OBJECTID",
53122
+ "numericColumns": [{
53123
+ "column": "geometry_latitude",
53124
+ "factor": 1
53125
+ }, {
53126
+ "column": "geometry_longitude",
53127
+ "factor": 1
53128
+ }],
53129
+ "dateColumns": ["CreationDate"],
53130
+ "columns": [
53131
+ "geometry_latitude",
53132
+ "geometry_longitude",
53133
+ "CreationDate",
53134
+ "ABATE"
53135
+ ]
53136
+ }
53137
+ },
53138
+ "crosswalk": {
53139
+ "source": "geojson",
53140
+ "target": "or/v1",
53141
+ "rules": [
53142
+ {
53143
+ "op": "move",
53144
+ "from": "meta",
53145
+ "to": "meta"
53146
+ },
53147
+ {
53148
+ "op": "move",
53149
+ "from": "nodes[].id",
53150
+ "to": "nodes[].id"
53151
+ },
53152
+ {
53153
+ "op": "move",
53154
+ "from": "nodes[].geometry_latitude",
53155
+ "to": "nodes[].lat"
53156
+ },
53157
+ {
53158
+ "op": "move",
53159
+ "from": "nodes[].geometry_longitude",
53160
+ "to": "nodes[].lon"
53161
+ },
53162
+ {
53163
+ "op": "move",
53164
+ "from": "nodes[].CreationDate",
53165
+ "to": "nodes[].opened"
53166
+ },
53167
+ {
53168
+ "op": "move",
53169
+ "from": "nodes[].ABATE",
53170
+ "to": "nodes[].status"
53171
+ }
53172
+ ],
53173
+ "oneWay": []
52262
53174
  },
52263
- "crosswalk": { "file": "crosswalks/or-v1/nodes.json" },
52264
53175
  "expectedCounts": {},
52265
53176
  "properties": { "surveyId": "or-93" }
52266
53177
  },
@@ -52671,17 +53582,77 @@ var catalogue_default = {
52671
53582
  "retrieved": "2026-10-19",
52672
53583
  "status": "live"
52673
53584
  }, {
52674
- "url": "https://services1.arcgis.com/eGSDp8lpKe5izqVc/arcgis/rest/services/2024_Sheriff_Evictions_WFL1/FeatureServer/0/query?where=1%3D1&outFields=*&f=json",
53585
+ "url": "https://services1.arcgis.com/eGSDp8lpKe5izqVc/arcgis/rest/services/2024_Sheriff_Evictions_WFL1/FeatureServer/0",
52675
53586
  "retrieved": "2026-10-19",
52676
53587
  "status": "live"
52677
53588
  }],
52678
53589
  "licence": { "kind": "unrecorded" },
52679
53590
  "citations": [],
52680
53591
  "recipe": {
52681
- "status": "not-fetchable",
52682
- "reason": "The source is an ArcGIS feature service that returns Esri JSON in pages of at most 2000 features, and keepset has no ArcGIS JSON parser or paging yet."
53592
+ "status": "fetchable",
53593
+ "source": 1,
53594
+ "paging": {
53595
+ "kind": "arcgis-query",
53596
+ "orderBy": "OBJECTID"
53597
+ },
53598
+ "archive": { "kind": "none" },
53599
+ "parser": {
53600
+ "format": "geojson",
53601
+ "encoding": "utf-8",
53602
+ "idColumn": "OBJECTID",
53603
+ "numericColumns": [{
53604
+ "column": "geometry_latitude",
53605
+ "factor": 1
53606
+ }, {
53607
+ "column": "geometry_longitude",
53608
+ "factor": 1
53609
+ }],
53610
+ "dateColumns": [],
53611
+ "columns": [
53612
+ "geometry_latitude",
53613
+ "geometry_longitude",
53614
+ "Date",
53615
+ "Status_1"
53616
+ ]
53617
+ }
53618
+ },
53619
+ "crosswalk": {
53620
+ "source": "geojson",
53621
+ "target": "or/v1",
53622
+ "rules": [
53623
+ {
53624
+ "op": "move",
53625
+ "from": "meta",
53626
+ "to": "meta"
53627
+ },
53628
+ {
53629
+ "op": "move",
53630
+ "from": "nodes[].id",
53631
+ "to": "nodes[].id"
53632
+ },
53633
+ {
53634
+ "op": "move",
53635
+ "from": "nodes[].geometry_latitude",
53636
+ "to": "nodes[].lat"
53637
+ },
53638
+ {
53639
+ "op": "move",
53640
+ "from": "nodes[].geometry_longitude",
53641
+ "to": "nodes[].lon"
53642
+ },
53643
+ {
53644
+ "op": "move",
53645
+ "from": "nodes[].Date",
53646
+ "to": "nodes[].opened"
53647
+ },
53648
+ {
53649
+ "op": "move",
53650
+ "from": "nodes[].Status_1",
53651
+ "to": "nodes[].status"
53652
+ }
53653
+ ],
53654
+ "oneWay": []
52683
53655
  },
52684
- "crosswalk": { "file": "crosswalks/or-v1/nodes.json" },
52685
53656
  "expectedCounts": {},
52686
53657
  "properties": { "surveyId": "or-103" }
52687
53658
  },
@@ -53968,6 +54939,10 @@ var catalogue_default = {
53968
54939
  "url": "https://hub.arcgis.com/datasets/1b2d03addfaa41bb83c17f9237e1504c",
53969
54940
  "retrieved": "2026-10-19",
53970
54941
  "status": "live"
54942
+ }, {
54943
+ "url": "https://services2.arcgis.com/CyVvlIiUfRBmMQuu/arcgis/rest/services/Delinquent_Real_Estate_Taxes_view/FeatureServer/0",
54944
+ "retrieved": "2026-10-19",
54945
+ "status": "live"
53971
54946
  }],
53972
54947
  "licence": {
53973
54948
  "kind": "custom",
@@ -53976,10 +54951,52 @@ var catalogue_default = {
53976
54951
  },
53977
54952
  "citations": [],
53978
54953
  "recipe": {
53979
- "status": "not-fetchable",
53980
- "reason": "The source is an ArcGIS feature service that returns GeoJSON in pages of a limited number of features and keepset has no GeoJSON parser or paging yet."
54954
+ "status": "fetchable",
54955
+ "source": 1,
54956
+ "paging": {
54957
+ "kind": "arcgis-query",
54958
+ "orderBy": "OBJECTID"
54959
+ },
54960
+ "archive": { "kind": "none" },
54961
+ "parser": {
54962
+ "format": "geojson",
54963
+ "encoding": "utf-8",
54964
+ "idColumn": "OBJECTID",
54965
+ "numericColumns": [{
54966
+ "column": "Total_Delinquent_Amount_Due",
54967
+ "factor": 1
54968
+ }],
54969
+ "dateColumns": [],
54970
+ "columns": ["Total_Delinquent_Amount_Due", "District"]
54971
+ }
54972
+ },
54973
+ "crosswalk": {
54974
+ "source": "geojson",
54975
+ "target": "or/v1",
54976
+ "rules": [
54977
+ {
54978
+ "op": "move",
54979
+ "from": "meta",
54980
+ "to": "meta"
54981
+ },
54982
+ {
54983
+ "op": "move",
54984
+ "from": "nodes[].id",
54985
+ "to": "nodes[].id"
54986
+ },
54987
+ {
54988
+ "op": "move",
54989
+ "from": "nodes[].Total_Delinquent_Amount_Due",
54990
+ "to": "nodes[].prize"
54991
+ },
54992
+ {
54993
+ "op": "move",
54994
+ "from": "nodes[].District",
54995
+ "to": "nodes[].territory"
54996
+ }
54997
+ ],
54998
+ "oneWay": []
53981
54999
  },
53982
- "crosswalk": { "file": "crosswalks/or-v1/nodes.json" },
53983
55000
  "expectedCounts": {},
53984
55001
  "properties": { "surveyId": "or-47" }
53985
55002
  },