@@ -349,11 +349,56 @@ def mapStopCondition(jore3condition):
349349 return 'bad'
350350
351351def mapBoolean (jore3value ):
352- match jore3value :
353- case 1 :
354- return True
355- case _:
356- return False
352+ if jore3value is None :
353+ return False
354+ if isinstance (jore3value , bool ):
355+ return jore3value
356+ normalized = str (jore3value ).strip ().lower ()
357+ return normalized in ('1' , '01' , 'true' , 't' , 'yes' , 'y' )
358+
359+ def mapOptionalBoolean (jore3value ):
360+ if jore3value is None :
361+ return None
362+ return mapBoolean (jore3value )
363+
364+ def mapLimitationStatus (jore3value ):
365+ if jore3value is None :
366+ return 'UNKNOWN'
367+ return 'TRUE' if mapBoolean (jore3value ) else 'FALSE'
368+
369+ def mapAccessibilityLevel (jore3row ):
370+ if jore3row .get ('esteeton_kulku' ) is not None :
371+ return 'mostlyAccessible' if mapBoolean (jore3row .get ('esteeton_kulku' )) else 'partiallyInaccessible'
372+ if jore3row .get ('esteettomyys' ) is not None :
373+ return 'mostlyAccessible' if mapBoolean (jore3row .get ('esteettomyys' )) else 'inaccessible'
374+ return 'unknown'
375+
376+ def mapGuidanceType (jore3row ):
377+ if mapBoolean (jore3row .get ('varoitusalue' )) or mapBoolean (jore3row .get ('erotus_varoitusalue' )):
378+ return 'other'
379+ if jore3row .get ('varoitusalue' ) is None and jore3row .get ('erotus_varoitusalue' ) is None :
380+ return None
381+ return 'none'
382+
383+ def mapMapType (jore3row ):
384+ if jore3row .get ('kartat_hsl' ) is not None or jore3row .get ('kartat_hkl' ) is not None :
385+ return 'other'
386+ return None
387+
388+ def mapShelterWidthType (jore3row ):
389+ width = jore3row .get ('max_leveys' )
390+ if width is None :
391+ return None
392+ return 'wide' if width >= 250 else 'narrow'
393+
394+ def mapWheelchairLimitationStatus (jore3row ):
395+ if jore3row .get ('esteettomyys' ) is not None :
396+ return mapLimitationStatus (jore3row .get ('esteettomyys' ))
397+ if jore3row .get ('esteeton_kulku' ) is not None :
398+ return mapLimitationStatus (jore3row .get ('esteeton_kulku' ))
399+ if jore3row .get ('luokka' ) is not None :
400+ return 'PARTIAL'
401+ return 'UNKNOWN'
357402
358403def toFloat (value ):
359404 jsonval = json .dumps (value )
@@ -368,7 +413,6 @@ def getShelterEquipment(jore3row):
368413 "enclosed" : jore3row ['pysakkityyppi' ] == '01' or jore3row ['pysakkityyppi' ] == '02' ,
369414 "shelterType" : mapStopType (jore3row ['pysakkityyppi' ]),
370415 "shelterElectricity" : mapStopElectricity (jore3row ['sahko' ]),
371- # shelterLighting: primary jr_esteettomyys.valaistus, fallback inferred from jr_varustelutiedot_uusi.sahko
372416 "shelterLighting" : mapBoolean (jore3row .get ('valaistus' )) if jore3row .get ('valaistus' ) is not None else False ,
373417 "shelterCondition" : mapStopCondition (jore3row ['katos_kunto' ]),
374418 "timetableCabinets" : toFloat (jore3row ['kpl_lisavarusteet' ]) if jore3row ['lisavarusteet' ] == '01' else 0 ,
@@ -395,6 +439,50 @@ def getShelterEquipment(jore3row):
395439 shelterEquipment = [firstShelter ] + [baseShelterEquipment .copy () for _ in range (shelterCount - 1 )]
396440 return shelterEquipment
397441
442+ def getHslAccessibilityProperties (jore3row ):
443+ hslAccessibilityProperties = {
444+ "accessibilityLevel" : mapAccessibilityLevel (jore3row ),
445+ "curbBackOfRailDistance" : toFloat (jore3row ['korotus_ajorataan' ]),
446+ "curbDriveSideOfRailDistance" : None ,
447+ "curvedStop" : None ,
448+ "endRampSlope" : None ,
449+ "guidanceStripe" : mapOptionalBoolean (jore3row .get ('erotus_varoitusalue' )),
450+ "guidanceTiles" : mapOptionalBoolean (jore3row .get ('varoitusalue' )),
451+ "guidanceType" : mapGuidanceType (jore3row ),
452+ #"id": None,
453+ "lowerCleatHeight" : toFloat (jore3row ['alapiena_korkeus' ]),
454+ "mapType" : mapMapType (jore3row ),
455+ "pedestrianCrossingRampType" : None ,
456+ "platformEdgeWarningArea" : mapBoolean (jore3row ['varoitusalue' ]),
457+ "serviceAreaLength" : toFloat (jore3row .get ('syvyys' )),
458+ "serviceAreaStripes" : mapOptionalBoolean (jore3row .get ('erotus_odotusalue' )),
459+ "serviceAreaWidth" : toFloat (jore3row .get ('min_leveys' )),
460+ "shelterLaneDistance" : None ,
461+ "shelterType" : mapShelterWidthType (jore3row ),
462+ "sidewalkAccessibleConnection" : mapOptionalBoolean (jore3row .get ('esteeton_kulku' )),
463+ "stopAreaLengthwiseSlope" : toFloat (jore3row ['pituuskaltevuus' ]),
464+ "stopAreaSideSlope" : toFloat (jore3row ['sivukaltevuus' ]),
465+ "stopAreaSurroundingsAccessible" : mapBoolean (jore3row ['esteeton_kulku' ]),
466+ "stopElevationFromRailTop" : toFloat (jore3row .get ('korotus_ajorataan' )),
467+ "stopElevationFromSidewalk" : toFloat (jore3row ['korotus_kaytavaan' ]),
468+ "stopType" : mapStopModel (jore3row ['pysakin_malli' ]),
469+ "structureLaneDistance" : None
470+ }
471+
472+ return hslAccessibilityProperties
473+
474+ def getAccessibilityLimitations (jore3row ):
475+ limitations = {
476+ "audibleSignalsAvailable" : 'UNKNOWN' ,
477+ "escalatorFreeAccess" : 'UNKNOWN' ,
478+ #"id": None,
479+ "liftFreeAccess" : 'UNKNOWN' ,
480+ "stepFreeAccess" : mapLimitationStatus (jore3row .get ('esteeton_kulku' )),
481+ "wheelchairAccess" : mapWheelchairLimitationStatus (jore3row )
482+ }
483+
484+ return limitations
485+
398486def quayInputForJore4Stop (jore3row , label , validityStart , validityEnd , lon , lat ):
399487 return {
400488 "publicCode" : label ,
@@ -458,23 +546,9 @@ def quayInputForJore4Stop(jore3row, label, validityStart, validityEnd, lon, lat)
458546 }
459547 ],
460548 "accessibilityAssessment" : {
461- "hslAccessibilityProperties" : {
462- "curbBackOfRailDistance" : toFloat (jore3row ['korotus_ajorataan' ]),
463- "lowerCleatHeight" : toFloat (jore3row ['alapiena_korkeus' ]),
464- "platformEdgeWarningArea" : mapBoolean (jore3row ['varoitusalue' ]),
465- "stopAreaLengthwiseSlope" : toFloat (jore3row ['pituuskaltevuus' ]),
466- "stopAreaSideSlope" : toFloat (jore3row ['sivukaltevuus' ]),
467- "stopAreaSurroundingsAccessible" : mapBoolean (jore3row ['esteeton_kulku' ]),
468- "stopElevationFromSidewalk" : toFloat (jore3row ['korotus_kaytavaan' ]),
469- "stopType" : mapStopModel (jore3row ['pysakin_malli' ])
470- },
471- "limitations" : {
472- "audibleSignalsAvailable" : "FALSE" ,
473- "escalatorFreeAccess" : "FALSE" ,
474- "liftFreeAccess" : "FALSE" ,
475- "stepFreeAccess" : "FALSE" ,
476- "wheelchairAccess" : "FALSE"
477- }
549+ #"id": None,
550+ "hslAccessibilityProperties" : getHslAccessibilityProperties (jore3row ),
551+ "limitations" : getAccessibilityLimitations (jore3row )
478552 },
479553 "placeEquipments" : {
480554 "shelterEquipment" : getShelterEquipment (jore3row ),
0 commit comments