{-# LANGUAGE OverloadedStrings #-} {-# LANGUAGE RecordWildCards #-} -- | module VDV452 where import Data.Time (Day) import Data.Text (Text) import VDV451 (ÖPNVEncode (encode), ÖPNVDatum (..), ÖPNVType (..), Feld (F), AsNumber (AsNumber), Longitude, Latitude) import Data.ByteString (ByteString) -- | 993 data BasisVerGueltigkeit = BasisVerGueltigkeit { basisVerGueltigkeit :: Day -- ^ Primärschlüssel , basisBasisVersion :: Int -- ^ Fremdschlüssel von MengeBasisVersionen } instance ÖPNVDatum BasisVerGueltigkeit where tableName _ = "BASIS_VER_GUELTIGKEIT" tableNumber _ = 993 tableSchema _ = [ ("VER_GUELTIGKEIT", ÖNum 8, F . AsNumber . basisVerGueltigkeit) , ("BASIS_VERSION", ÖNum 9, F . basisBasisVersion)] -- | 485 data MengeBasisVersionen = MengeBasisVersionen { mengeBasisVersion :: Int -- ^ Primärschlüssel , mengeBasisVersionText :: Text -- ^ Beschreibung der allgemeinen Version } instance ÖPNVDatum MengeBasisVersionen where tableName _ = "MENGE_BASIS_VERSIONEN" tableNumber _ = 485 tableSchema _ = [ ("BASIS_VERSION", ÖNum 9, F . mengeBasisVersion) , ("BASIS_VERSION_TEXT", ÖChar 40, F . mengeBasisVersionText)] -- | 348 data Firmenkalender = Firmenkalender { firmenkalenderBasisVersion :: Int -- ^ Fremdschlüssel von MengeBasisVersionen , firmenkalenderBetriebstag :: Day , firmenkalenderBetriebstagText :: Text , firmenkalenderTagesArtNr :: Int -- TODO this is probably en enum } instance ÖPNVDatum Firmenkalender where tableName _ = "FIRMENKALENDER" tableNumber _ = 348 tableSchema _ = [ ("BASIS_VERSION", ÖNum 9, F . firmenkalenderBasisVersion) , ("BETRIEBSTAG", ÖNum 8, F . firmenkalenderBetriebstag) , ("BETRIEBSTAG_TEXT", ÖChar 40, F . firmenkalenderBetriebstagText) , ("TAGESART_NR", ÖNum 3, F . firmenkalenderTagesArtNr) ] data MengeTagesart = MengeTagesart { tagesartBasisVersion :: Int -- ^ P1, Fremdschlüssel von MengeBasisVersionen , tagesartTagesartNr :: Int -- ^ P2 , tagesartTagesartText :: Text } instance ÖPNVDatum MengeTagesart where tableName _ = "MENGE_TAGESART" tableNumber _ = 290 tableSchema _ = [ ("BASIS_VERSION", ÖNum 9, F . tagesartBasisVersion) , ("TAGESART_NR", ÖNum 3, F . tagesartTagesartNr) , ("TAGESART_TEXT", ÖChar 40, F . tagesartTagesartText) ] ---- Ortsdaten data OnrTypNr = OnrHaltepunkt | OnrBetriebshofpunkt | OnrOrtsmarke | OnrLSAPunkt | OnrRoutenzwischenpunkt | OnrBetriebspunkt | OnrGrenzpunkt deriving (Show, Enum) instance ÖPNVEncode OnrTypNr where encode typ = encode (1 + fromEnum typ) data MengeOnrTyp = MengeOnrTyp { onrtypBasisVersion :: Int , onrtypTypNr :: OnrTypNr , onrtypStrTyp :: Text -- TODO: this might be an enum? , onrtypText :: Text } instance ÖPNVDatum MengeOnrTyp where tableName _ = "MENGE_ONR_TYP" tableNumber _ = 998 tableSchema _ = [ ("BASIS_VERSION", ÖNum 9, F . onrtypBasisVersion) , ("ONR_TYP_NR", ÖNum 2, F . onrtypTypNr) , ("STR_ONR_TYP", ÖChar 6, F . onrtypStrTyp) , ("ONR_TYP_TEXT", ÖChar 40, F . onrtypText) ] data OrtTypNr = OrtHaltestelle | OrtBetriebshof deriving Show instance ÖPNVEncode OrtTypNr where encode OrtHaltestelle = encode (1 :: Int) encode OrtBetriebshof = encode (2 :: Int) data MengeOrtTyp = MengeOrtTyp { orttypBasisVersion :: Int , orttypTypNr :: OrtTypNr , orttypText :: Text } instance ÖPNVDatum MengeOrtTyp where tableName _ = "MENGE_ONR_TYP" tableNumber _ = 997 tableSchema _ = [ ("BASIS_VERSION", ÖNum 9, F . orttypBasisVersion) , ("ORT_TYP_NR", ÖNum 2, F . orttypTypNr) , ("ORT_TYP_TEXT", ÖChar 40, F . orttypText) ] data RecHp = RecHp { rechpBasisVersion :: Int , rechpOnrTypNr :: OrtTypNr , rechpOrtNr :: Int , rechpHaltepunktNr :: Int , rechpZusatzInfo :: Text } instance ÖPNVDatum RecHp where tableName _ = "REC_HP" tableNumber _ = 229 tableSchema _ = [ ("BASIS_VERSION", ÖNum 9, F . rechpBasisVersion) , ("ONR_TYP_NR", ÖNum 2, F . rechpOnrTypNr) , ("ORT_NR", ÖNum 6, F . rechpOrtNr) , ("HALTEPUNKT_NR", ÖNum 2, F . rechpHaltepunktNr) , ("ZUSATZ_INFO", ÖChar 40, F . rechpZusatzInfo) ] data RecOm = RecOm { recomBasisVersion :: Int , recomOnrTypNr :: OnrTypNr -- ^ nur 3..4 , recomOrtNr :: Int , recomOrmKuerzel :: Text , recomOrmacode :: Int , recomOrmText :: Text } instance ÖPNVDatum RecOm where tableName _ = "REC_OM" tableNumber _ = 295 tableSchema _ = [ ("BASIS_VERSION", ÖNum 9, F . recomBasisVersion) , ("ONR_TYP_NR", ÖNum 2, F . recomOnrTypNr) , ("ORT_NR", ÖNum 6, F . recomOrtNr) , ("ORM_KUERZEL", ÖChar 6, F . recomOrmKuerzel) , ("ORMACODE", ÖNum 5, F . recomOrmacode) , ("ORM_TEXT", ÖChar 40, F . recomOrmText) ] -- | tatsächliche Ortsbeschreibung data RecOrt = RecOrt { recortBasisVersion :: Int , recortOnrTypNr :: OnrTypNr , recortOrtNr :: Int , recortOrtName :: Text , recortHastNrLokal :: Int , recortHstNrNational :: Int , recortHstNrInternational :: Text -- these only if recortOnrTypNr = 1 or 2 , recortOrtRefOrt :: Int , recortOrtRefOrtTyp :: OrtTypNr , recortOrtRefOrtLangNr :: Maybe Int , recortOrtRefOrtKuerzel :: Text , recortOrtRefOrtName :: Text , recortZoneWabeNr :: Maybe Int --- these are entirely optional , recortOrtPosLaenge :: Maybe Longitude , recortOrtPosBreite :: Maybe Latitude , recortPosHoehe :: Maybe Int , recortOrtRichtung :: Maybe Int } instance ÖPNVDatum RecOrt where tableName _ = "REC_ORT" tableNumber _ = 253 tableSchema _ = [ ("BASIS_VERSION", ÖNum 9, F . recortBasisVersion) , ("ONR_TYP_NR", ÖNum 2, F . recortOnrTypNr) , ("ORT_NR", ÖNum 6, F . recortOrtNr) , ("ORT_NAME", ÖChar 40, F . recortOrtName) , ("ORT_REF_ORT", ÖNum 6, F . recortOrtRefOrt) , ("ORT_REF_ORT_TYP", ÖNum 2, F . recortOrtRefOrtTyp) , ("ORT_REF_ORT_LangNr", ÖNum 7, F . recortOrtRefOrtLangNr) , ("ORT_REF_ORT_KUERZEL", ÖChar 8, F . recortOrtRefOrtKuerzel) , ("ORT_REF_ORT_NAME", ÖChar 40, F . recortOrtRefOrtName) , ("ZONE_WABE_NR", ÖNum 5, F . recortZoneWabeNr) , ("ORT_POS_LAENGE", ÖNum 10, F . recortOrtPosLaenge) , ("ORT_POS_BREITE", ÖNum 10, F . recortOrtPosBreite) , ("ORT_POS_HOEHE", ÖNum 10, F . recortPosHoehe) , ("ORT_RICHTUNG", ÖNum 3, F . recortOrtRichtung) , ("HAST_NR_LOKAL", ÖNum 9, F . recortHastNrLokal) , ("HST_NR_NATIONAL", ÖNum 9, F . recortHstNrNational) , ("HST_NR_INTERNATIONAL", ÖChar 30, F . recortHstNrInternational) ] -- Betriebsdaten data Fahrzeug = Fahrzeug { fzgBasisVersion :: Int , fzgNr :: Int , fzgTypNr :: Maybe Int , fzgPolKenn :: Text , fzgUnternehmen :: Maybe Int -- ^ fremdschlüssel ZulVerkehsbetrieb , fzgFIN :: Text } instance ÖPNVDatum Fahrzeug where tableName _ = "FAHRZEUG" tableNumber _ = 443 tableSchema _ = [ ("BASIS_VERSION", ÖNum 9, F . fzgBasisVersion) , ("FZG_NR", ÖNum 4, F . fzgNr) , ("FZG_TYP_NR", ÖNum 3, F . fzgTypNr) , ("POLKENN", ÖChar 20, F . fzgPolKenn) , ("FIN", ÖChar 17, F . fzgFIN) ] data ZulVerkehsbetrieb = ZulVerkehsbetrieb { zulBasisVersion :: Int , zulUnternehmen :: Int , zulAbkUnternehmen :: Text , zulBetriebsgebietBez :: Text } instance ÖPNVDatum ZulVerkehsbetrieb where tableName _ = "ZUL_VERKEHRSBETRIEB" tableNumber _ = 992 tableSchema _ = [ ("BASIS_VERSION", ÖNum 9, F . zulBasisVersion) , ("UNTERNEHMEN", ÖNum 3, F . zulUnternehmen) , ("ABK_UNTERNEHMEN", ÖChar 6, F . zulAbkUnternehmen) , ("BETRIEBSGEBIET_BEZ", ÖChar 40, F . zulBetriebsgebietBez) ] -- | 333 data MengeBereich = MengeBereich { mengebereichBasisVersion :: Int , mengebereichBereichNr :: Int , mengebereichStrBereich :: Text , mengebereichBereichText :: Text } instance ÖPNVDatum MengeBereich where tableName _ = "MENGE_BEREICH" tableNumber _ = 333 tableSchema _ = [ ("BASIS_VERSION", ÖNum 9, F . mengebereichBasisVersion) , ("BEREICH_NR", ÖNum 3, F . mengebereichBereichNr) , ("STR_BEREICH", ÖChar 6, F . mengebereichStrBereich) , ("BEREICH_TEXT", ÖChar 40, F . mengebereichBereichText) ] -- | 293 data MengeFzgTyp = MengeFzgTyp { fzgtypBasisVersion :: Int , fzgtypFzgTypNr :: Int , fzgtypFzgLaenge :: Int -- ^ given in metres , fzgtypBreite :: Int -- ^ given in centimetres , fzgtypHoehe :: Int -- ^ given in centimetres , fzgtypGewicht :: Int -- ^ kilograms , fzgtypSitz :: Int , fzgtypSteh :: Int , fzgtypText :: Text , fzgtypSonderPlatz :: Int , fzgtypStrFzgTyp :: Text -- ^ kursbezeichnung des fahrzeugtyps -- , fzgtypBatterieTypNr :: Maybe Int -- -- this one is optional, but the others maybe not? -- -- fremdschlüssel MengeBatterieTyp -- , fzgtypVerbrauchDistanz :: Int -- , fzgtypVerbrauchZeit :: Int } instance ÖPNVDatum MengeFzgTyp where tableName _ = "MENGE_FZG_TYP" tableNumber _ = 293 tableSchema _ = [ ("BASIS_VERSION", ÖNum 9, F . fzgtypBasisVersion) , ("FZG_TYP_NR", ÖNum 3, F . fzgtypFzgTypNr) , ("FZG_LAENGE", ÖNum 2, F . fzgtypFzgLaenge) , ("FZG_TYP_BREITE", ÖNum 3, F . fzgtypBreite) , ("FZG_TYP_HOEHE", ÖNum 3, F . fzgtypHoehe) , ("FZG_TYP_GEWICHT", ÖNum 6, F . fzgtypGewicht) , ("FZG_TYP_SITZ", ÖNum 3, F . fzgtypSitz) , ("FZG_TYP_STEH", ÖNum 3, F . fzgtypSteh) , ("FZG_TYP_TEXT", ÖChar 40, F . fzgtypText) , ("SONDER_PLATZ", ÖNum 3, F . fzgtypSonderPlatz) , ("STR_FZG_TYP", ÖChar 6, F . fzgtypStrFzgTyp) ] -- | 996: Aufzählung von Fahrzeug-Ansagetexten -- this one seems to be optional data RecAnr = RecAnr { recanrBasisVersion :: Int , recanrAnrNr :: Int , recanrAnrKuerzel :: Text , recanrAnrText :: Text } instance ÖPNVDatum RecAnr where tableName _ = "REC_ANR" tableNumber _ = 996 tableSchema _ = [ ("BASIS_VERSION", ÖNum 9, F . recanrBasisVersion) , ("ANR_NR", ÖNum 4, F . recanrAnrNr) , ("ANR_KUERZEL", ÖChar 10, F . recanrAnrKuerzel) , ("ANR_TEXT", ÖChar 200, F . recanrAnrText) ] -- | 995: Aufzählung der am Fahrzeug angezeigten Fahrtziele -- this one is probably optional as well data RecZnr = RecZnr { recznrBasisVersion :: Int , recznrZnrNr :: Int , recznrKuerzel :: Text , recznrFahrerkurztext :: Text , recznrSeitentext :: Text , recznrZnrText :: Text , recznrCode :: Text } instance ÖPNVDatum RecZnr where tableName _ = "REC_ZNR" tableNumber _ = 994 tableSchema _ = [ ("BASIS_VERSION", ÖNum 9, F . recznrBasisVersion) , ("ZNR_NR", ÖNum 4, F . recznrZnrNr) , ("ZNR_KUERZEL", ÖChar 10, F . recznrKuerzel) , ("FAHRERKURZTEXT", ÖChar 44, F . recznrFahrerkurztext) , ("SEITENTEXT", ÖChar 160, F . recznrSeitentext) , ("ZNR_TEXT", ÖChar 160, F . recznrZnrText) , ("ZNR_CODE", ÖChar 68, F . recznrCode) ] ------- Netzdaten -- 299 data RecSel = RecSel { recselBasisVersion :: Int , recselBereichNr :: Int -- ^ fremdschlüssel MangeBereich , recselOnrTypNr :: OnrTypNr -- ^ fremdschlüssel MengeOnrTyp , recselOrtNr :: Int -- ^ fremdschlüssel RecOrt , recselSelZiel :: Int , recselSelZielTyp :: OrtTypNr , recselSelLaenge :: Int } instance ÖPNVDatum RecSel where tableName _ = "REC_SEL" tableNumber _ = 299 tableSchema _ = [ ("BASIS_VERSION", ÖNum 9, F . recselBasisVersion) , ("BEREICH_NR", ÖNum 3, F . recselBereichNr) , ("ONR_TYP_NR", ÖNum 2, F . recselOnrTypNr) , ("ORT_NR", ÖNum 6, F . recselOrtNr) , ("SEL_ZIEL", ÖNum 6, F . recselSelZiel) , ("SEL_ZIEL_TYP", ÖNum 2, F . recselSelZielTyp) , ("SEL_LAENGE", ÖNum 5, F . recselSelLaenge) ] -- | 995: definition von zwischenpunkten -- honestly i hope this one's optional data RecSelZp = RecSelZp { recselzpBasisVersion :: Int , recselzpBereichNr :: Int , recselzpOnrTypNr :: OrtTypNr , recselzpOrtNr :: Int , recselzpSelZiel :: Int , recselzpSelZielTyp :: OrtTypNr , recselzpZpOnr :: Int , recselzpZpTyp :: Int -- this one only takes values 3..7??? , recselzpSelZpLaenge :: Maybe Int , recselzpZpLfdNr :: Maybe Int } instance ÖPNVDatum RecSelZp where tableName _ = "REC_SEL_ZP" tableNumber _ = 995 tableSchema _ = [ ("BASIS_VERSION", ÖNum 9, F . recselzpBasisVersion) , ("BEREICH_NR", ÖNum 3, F . recselzpBereichNr) , ("ONR_TYP_NR", ÖNum 2, F . recselzpOnrTypNr) , ("ORT_NR", ÖNum 6, F . recselzpOrtNr) , ("SEL_ZIEL", ÖNum 6, F . recselzpSelZiel) , ("SEL_ZIEL_TYP", ÖNum 2, F . recselzpSelZielTyp) , ("ZP_ONR", ÖNum 6, F . recselzpZpOnr) , ("ZP_TYP", ÖNum 2, F . recselzpZpTyp) , ("SEL_ZP_LAENGE", ÖNum 5, F . recselzpSelZpLaenge) , ("ZP_LFD_NR", ÖNum 3, F . recselzpZpLfdNr) ] -- | 222: Fahrzeitgruppen (whatever that is) -- seems to be optional? data MengeFgr = MengeFgr { mengefgrBasisVersion :: Int , mengefgrFgrNr :: Int , mengefgrText :: Text -- , mengefgrTypNr :: Int } instance ÖPNVDatum MengeFgr where tableName _ = "MENGE_FGR" tableNumber _ = 222 tableSchema _ = [ ("BASIS_VERSION", ÖNum 9, F . mengefgrBasisVersion) , ("FGR_NR", ÖNum 9, F . mengefgrFgrNr) , ("FGR_TEXT", ÖChar 40, F . mengefgrText) -- , ("FGR_TYP_NR", ÖNum 3, F . mengefgrTypNr) ] --- | 999: Angabe von Haltezeiten je Fahrzeitgruppe und Ort -- definitely optional, which is a good thing because -- i don't know what it's even for data OrtHztf = OrtHztf { orthztfBasisVersion :: Int , orthztfFgrNr :: Int , orthztfOnrTypNr :: OrtTypNr , orthztfOrtNr :: Int , orthztfHpHzt :: Int } instance ÖPNVDatum OrtHztf where tableName _ = "ORT_HZTF" tableNumber _ = 999 tableSchema _ = [ ("BASIS_VERSION", ÖNum 9, F . orthztfBasisVersion) , ("FGR_NR", ÖNum 9, F . orthztfFgrNr) , ("ONR_TYP_NR", ÖNum 2, F . orthztfOnrTypNr) , ("ORT_NR", ÖNum 6, F . orthztfOrtNr) , ("HP_HZT", ÖNum 6, F . orthztfHpHzt) ] -- | 282: für streckenabschnitte planmäßig vorgesehen Fahrzeit -- nie als fremdschlüssel benutzt, ist optional data SelFztFeld = SelFztFeld { selfztBasisVersion :: Int , selfztBereichNr :: Int , selfztFgrNr :: Int , selfztOnrTypNr :: OrtTypNr , selfztOrtNr :: Int , selfztSelZiel :: Int , selfztSelZielTyp :: OrtTypNr , selfztSelFzt :: Int } instance ÖPNVDatum SelFztFeld where tableName _ = "SEL_FZT_FELD" tableNumber _ = 282 tableSchema _ = [ ("BASIS_VERSION", ÖNum 9, F . selfztBasisVersion) , ("BEREICH_NR", ÖNum 3, F . selfztBereichNr) , ("FGR_NR", ÖNum 9, F . selfztFgrNr) , ("ONR_TYP_NR", ÖNum 2, F . selfztOnrTypNr) , ("ORT_NR", ÖNum 6, F . selfztOrtNr) , ("SEL_ZIEL", ÖNum 6, F . selfztSelZiel) , ("SEL_ZIEL_TYP", ÖNum 2, F . selfztSelZielTyp) , ("SEL_FZT", ÖNum 6, F . selfztSelFzt) ] -- | 225: keine ahnung, irgendwas halt data RecUeb = RecUeb { recuebBasisVersion :: Int , recuebBereichNr :: Int , recuebOnrTypNr :: OrtTypNr , recuebOrtNr :: Int , recuebZielTyp :: OrtTypNr , recuebZiel :: Int , recuebLaenge :: Int } instance ÖPNVDatum RecUeb where tableName _ = "REC_UEB" tableNumber _ = 225 tableSchema _ = [ ("BASIS_VERSION", ÖNum 9, F . recuebBasisVersion) , ("BEREICH_NR", ÖNum 3, F . recuebBereichNr) , ("ONR_TYP_NR", ÖNum 2, F . recuebOnrTypNr) , ("ORT_NR", ÖNum 6, F . recuebOrtNr) , ("UEB_ZIEL_TYP", ÖNum 2, F . recuebZielTyp) , ("UEB_ZIEL", ÖNum 6, F . recuebZiel) , ("UEB_LAENGE", ÖNum 6, F . recuebLaenge) ] -- | 247 -- nirgendwo anders benutzt, ist wohl optional data UebFzt = UebFzt { uebfztBasisVersion :: Int , uebfztBereichNr :: Int , uebfztFgrNr :: Int , uebfztOnrTypNr :: OrtTypNr , uebfztOrtNr :: Int , uebfztZielTyp :: OrtTypNr , uebfztZiel :: Int , uebfztFahrzeit :: Int } instance ÖPNVDatum UebFzt where tableName _ = "UEB_FZT" tableNumber _ = 247 tableSchema _ = [ ("BASIS_VERSION", ÖNum 9, F . uebfztBasisVersion) , ("BEREICH_NR", ÖNum 3, F . uebfztBereichNr) , ("FGR_NR", ÖNum 9, F . uebfztFgrNr) , ("ONR_TYP_NR", ÖNum 2, F . uebfztOnrTypNr) , ("ORT_NR", ÖNum 6, F . uebfztOrtNr) , ("UEB_ZIEL_TYP", ÖNum 2, F . uebfztZielTyp) , ("UEB_ZIEL", ÖNum 6, F . uebfztZiel) , ("UEB_Fahrzeit", ÖNum 6, F . uebfztFahrzeit)] data Fahrtart = Normalfahrt | Betriebshofausfahrt | Betriebshofeinfahrt | Zufahrt deriving (Show, Enum) instance ÖPNVEncode Fahrtart where encode a = encode (1 + fromEnum a) -- | 332: Aufzählung von Fahrtarten data MengeFahrtart = MengeFahrtart { fahrtartBasisVersion :: Int , fahrtartNr :: Fahrtart , fahrtartStrFahrtart :: Text } instance ÖPNVDatum MengeFahrtart where tableName _ = "MENGE_FAHRTART" tableNumber _ = 332 tableSchema _ = [ ("BASIS_VERSION", ÖNum 9, F . fahrtartBasisVersion) , ("FAHRTART_NR", ÖNum 2, F . fahrtartNr) , ("STR_FAHRTART", ÖChar 6, F . fahrtartStrFahrtart)] -- | 571: Beschreibung von Flächenzonen data FlaechenZone = FlaechenZone { flaechenBasisVersion :: Int , flaechenZoneTypNr :: Int , flaechenZoneNr :: Int , flaechenZoneKuerzel :: Text , flaechenZoneName :: Text , flaechenZoneAmtlicheNr :: Text } instance ÖPNVDatum FlaechenZone where tableName _ = "FLAECHEN_ZONE" tableNumber _ = 571 tableSchema _ = [ ("BASIS_VERSION", ÖNum 9, F . flaechenBasisVersion) , ("FL_ZONE_TYP_NR", ÖNum 1, F . flaechenZoneTypNr) , ("FL_ZONE_NR", ÖNum 6, F . flaechenZoneNr) , ("FL_ZONE_KUERZEL", ÖChar 8, F . flaechenZoneKuerzel) , ("FL_ZONE_NAME", ÖChar 40, F . flaechenZoneName) , ("FL_AMTLICHE_NR", ÖChar 20, F . flaechenZoneAmtlicheNr) ] -- | 539: Zuordnung der Orte zu Flächenzonen -- nirgendwo referenziert, ist optional data FlZoneOrt = FlZoneOrt { flzoneBasisVersion :: Int , flzoneTypNr :: Int , flzoneNr :: Int , flzoneOnrTypNr :: OnrTypNr , flzoneOrtNr :: Int } instance ÖPNVDatum FlZoneOrt where tableName _ = "FL_ZONE_ORT" tableNumber _ = 539 tableSchema _ = [ ("BASIS_VERSION", ÖNum 9, F . flzoneBasisVersion) , ("FL_ZONE_TYP_NR", ÖNum 1, F . flzoneTypNr) , ("FL_ZONE_NR", ÖNum 6, F . flzoneNr) , ("ONR_TYP_NR", ÖNum 2, F . flzoneOnrTypNr) , ("ORT_NR", ÖNum 6, F . flzoneOrtNr) ] -- TODO: this probably has more fields? data ZoneTypNr = Gebietskörperschaft | Verkehrszonen deriving Show instance ÖPNVEncode ZoneTypNr where encode Gebietskörperschaft = encode (1 :: Int) encode Verkehrszonen = encode (1 ::Int) -- | 572: Typen von Flächenzonen (Gebietskörperschaft) data MengeFlaechenZoneTyp = MengeFlaechenZoneTyp { mflzoneBasisVersion :: Int , mflzoneTypNr :: ZoneTypNr , mflzoneTypText :: Text } instance ÖPNVDatum MengeFlaechenZoneTyp where tableName _ = "MENGE_FLAECHEN_ZONE_TYP" tableNumber _ = 572 tableSchema _ = [ ("BASIS_VERSION", ÖNum 9, F . mflzoneBasisVersion) , ("FL_ZONE_TYP_NR", ÖNum 1, F . mflzoneTypNr) , ("FL_ZONE_TYP_TEXT", ÖChar 40, F . mflzoneTypText) ] -- | 540 -- nirgendwo fremdschlüssel, optional data SelFztFeldZp = SelFztFeldZp { selfztfeldBasisVersion :: Int , selfztfeldBereichNr :: Int , selfztfeldFgrNr :: Int , selfztfeldOnrTypNr :: OrtTypNr , selfztfeldOrtNr :: Int , selfztfeldSelZiel :: Int , selfztfeldSelZielTyp :: Int -- this one can only be 1 or 2?? , selfztfeldZpOnr :: Int , selfztfeldZpTyp :: Int -- this one must always be 7??? , selfztfeldSelFztZp :: Int } instance ÖPNVDatum SelFztFeldZp where tableName _ = "SEL_FZT_FELD_ZP" tableNumber _ = 540 tableSchema _ = [ ("BASIS_VERSION", ÖNum 9, F . selfztfeldBasisVersion) , ("BEREICH_NR", ÖNum 3, F . selfztfeldBereichNr) , ("FGR_NR", ÖNum 9, F . selfztfeldFgrNr) , ("ONR_TYP_NR", ÖNum 2, F . selfztfeldOnrTypNr) , ("ORT_NR", ÖNum 6, F . selfztfeldOrtNr) , ("SEL_ZIEL", ÖNum 6, F . selfztfeldSelZiel) , ("SEL_ZIEL_TYP", ÖNum 2, F . selfztfeldSelZielTyp) , ("ZP_ONR", ÖNum 6, F . selfztfeldZpOnr) , ("ZP_TYP", ÖNum 2, F . selfztfeldZpTyp) , ("SEL_FZT_ZP", ÖNum 6, F . selfztfeldSelFztZp) ] ---- Liniendaten -- | 246: Linienverlauf als aufzählung von halten -- nirgendwo sonst fremdschlüssel data LidVerlauf = LidVerlauf { verlaufBasisVersion :: Int , verlaufLfdNr :: Int , verlaufNr :: Int , verlaufStrLiVar :: Text , verlaufOnrTypNr :: OrtTypNr , verlaufOrtNr :: Int , verlaufZnrNr :: Int , verlaufAnrNr :: Maybe Int , verlaufEinfangbereich :: Int , verlaufLiKnoten :: Bool , verlaufProduktiv :: Bool , verlaufEinsteigeverbot :: Bool , verlaufAussteigeverbot :: Bool , verlaufInnerortsverbot :: Bool , verlaufBedarfshalt :: Bool } instance ÖPNVDatum LidVerlauf where tableName _ = "LID_VERLAUF" tableNumber _ = 246 tableSchema _ = [ ("BASIS_VERSION", ÖNum 9, F . verlaufBasisVersion) , ("LI_LFD_NR", ÖNum 3, F . verlaufLfdNr) , ("LI_NR", ÖNum 6, F . verlaufNr) , ("STR_LI_VAR", ÖChar 6, F . verlaufStrLiVar) , ("ONR_TYP_NR", ÖNum 2, F . verlaufOnrTypNr) , ("ORT_NR", ÖNum 6, F . verlaufOrtNr) , ("ZNR_NR", ÖNum 4, F . verlaufZnrNr) , ("ANR_NR", ÖNum 4, F . verlaufAnrNr) , ("EINFANGBEREICH", ÖNum 3, F . verlaufEinfangbereich) , ("LI_KNOTEN", ÖNum 1, F . verlaufLiKnoten) , ("PRODUKTIV", ÖNum 1, F . verlaufProduktiv) , ("EINSTEIGEVERBOT", ÖNum 1, F . verlaufEinsteigeverbot) , ("AUSSTEIGEVERBOT", ÖNum 1, F . verlaufAussteigeverbot) , ("INNERORTSVERBOT", ÖNum 1, F . verlaufInnerortsverbot) , ("BEDARFSHALT", ÖNum 1, F . verlaufBedarfshalt) ] -- | 226 data RecLid = RecLid { reclidBasisVersion :: Int , reclidLiNr :: Int , reclidStrLiVar :: Text , reclidRoutenNr :: Int , reclidLiRiNr :: Int -- ^ 1..2 , reclidBereichNr :: Int , reclidLiKuerzel :: Text , reclidLidname :: Text , reclidRoutenArt :: Fahrtart , reclidLinienCode :: Maybe Int , reclidLinienId :: Text -- ^ this one might just be a byte array?? } instance ÖPNVDatum RecLid where tableName _ = "REC_LID" tableNumber _ = 226 tableSchema _ = [ ("BASIS_VERSION", ÖNum 9, F . reclidBasisVersion) , ("LI_NR", ÖNum 6, F . reclidLiNr) , ("STR_LI_VAR", ÖChar 6, F . reclidStrLiVar) , ("ROUTEN_NR", ÖNum 4, F . reclidRoutenNr) , ("LI_RI_NR", ÖNum 3, F . reclidLiRiNr) , ("BEREICH_NR", ÖNum 3, F . reclidBereichNr) , ("LI_KUERZEL", ÖChar 6, F . reclidLiKuerzel) , ("LIDNAME", ÖChar 40, F . reclidLidname) , ("ROUTEN_ART", ÖNum 2, F . reclidRoutenArt) , ("LINIEN_CODE", ÖNum 2, F . reclidLinienCode) , ("LinienID", ÖChar 128, F . reclidLinienId) ] ------ Fahrplandaten -- | 715 data RecFrt = RecFrt { recfrtBasisVersion :: Int , recfrtFid :: Int , recfrtStart :: Int , recfrtLiNr :: Int , recfrtTagesartNr :: Int , recfrtLiKuNr :: Maybe Int , recfrtFahrtartNr :: Fahrtart , recfrtFgrNr :: Int , recfrtStrLiVar :: Text , recfrtUmUid :: Maybe Int , recfrtZugNr :: Int , recfrtDurchbiFrtStart :: Bool , recfrtDurchbiFrtEnde :: Bool , recfrtFahrtBezeichner :: Text , recfrtZielEnergieMenge :: Int } instance ÖPNVDatum RecFrt where tableName _ = "REC_FRT" tableNumber _ = 715 tableSchema _ = [ ("BASIS_VERSION", ÖNum 9, F . recfrtBasisVersion) , ("FRT_FID", ÖNum 10, F . recfrtFid) , ("FRT_START", ÖNum 6, F . recfrtStart) , ("LI_NR", ÖNum 6, F . recfrtLiNr) , ("TAGESART_NR", ÖNum 3, F . recfrtTagesartNr) , ("LI_KU_NR", ÖNum 6, F . recfrtLiKuNr) , ("FAHRTART_NR", ÖNum 2, F . recfrtFahrtartNr) , ("FGR_NR", ÖNum 9, F . recfrtFgrNr) , ("STR_LI_VAR", ÖChar 6, F . recfrtStrLiVar) , ("UM_UID", ÖNum 8, F . recfrtUmUid) , ("ZUGNR", ÖNum 7, F . recfrtZugNr) , ("DURCHBI_FRT_START", ÖNum 1, F . recfrtDurchbiFrtStart) , ("DURCHBI_FRT_ENDE", ÖNum 1, F . recfrtDurchbiFrtEnde) , ("FahrtBezeichner", ÖChar 128, F . recfrtFahrtBezeichner) , ("ZIEL_ENERGIE_MENGE", ÖNum 6, F . recfrtZielEnergieMenge) ] -- | 308: Fahrtabhängiges Warten am Haltepunkt (e.g. Anschlusssicherung) -- nicht in fremdschlüsseln erwähnt, optional data RecFrtHzt = RecFrtHzt { recfrthztBasisVersion :: Int , recfrthztFid :: Int , recfrthztOnrTypNr :: OrtTypNr , recfrthztOrtNr :: Int , recfrthztZeit :: Int } instance ÖPNVDatum RecFrtHzt where tableName _ = "REC_FRT_HZT" tableNumber _ = 308 tableSchema _ = [ ("BASIS_VERSION", ÖNum 9, F . recfrthztBasisVersion) , ("FRT_FID", ÖNum 10, F . recfrthztFid) , ("ONR_TYP_NR", ÖNum 2, F . recfrthztOnrTypNr) , ("ORT_NR", ÖNum 6, F . recfrthztOrtNr) , ("FRT_HZT_ZEIT", ÖNum 6, F . recfrthztZeit) ] -- | 310: Fahrzeugumläufe data RecUmlauf = RecUmlauf { umlaufBasisVersion :: Int , umlaufTagesartNr :: Int , umlaufUmUid :: Int , umlaufAnfOrt :: Int , umlaufAnfOnrTyp :: OrtTypNr , umlaufEndOrt :: Int , umlaufEndOnrTyp :: OrtTypNr , umlaufFzgTypNr :: Maybe Int } instance ÖPNVDatum RecUmlauf where tableName _ = "REC_UMLAUF" tableNumber _ = 310 tableSchema _ = [ ("BASIS_VERSION", ÖNum 9, F . umlaufBasisVersion) , ("TAGESART_NR", ÖNum 3, F . umlaufTagesartNr) , ("UM_UID", ÖNum 8, F . umlaufUmUid) , ("ANF_ORT", ÖNum 6, F . umlaufAnfOrt) , ("ANF_ONR_TYP", ÖNum 2, F . umlaufAnfOnrTyp) , ("END_ORT", ÖNum 6, F . umlaufEndOrt) , ("END_ONR_TYP", ÖNum 2, F . umlaufEndOnrTyp) , ("FZG_TYP_NR", ÖNum 3, F . umlaufFzgTypNr) ] -- TODO: ÖPNV DM 4.1 UMS_Z_RI Bezeichner der Linien-Richtung data Richtung ------ Anschlussdaten data Einzelanschluss = Einzelanschluss { einzelBasisVersion :: Int , einzelBasisEinanNr :: Int , einzelBasisAnschlussName :: Text , einzelBasisAnschlussGruppe :: Text , einzelLeitstellenkennung :: Int , einzelZubLiNr :: Int , einzelZubLiRiNr :: Richtung , einzelZubOrtRefOrt :: Int , einzelZubOnrTypNr :: Maybe OnrTypNr , einzelZubOrtNr :: Maybe Int , einzelVonOrtRefOrt :: Maybe Int , einzelLinienId :: Text , einzelRichtungsId :: Text , einzelAsbid :: Text , einzelAbbLiNr :: Int , einzelAbbLiRiNr :: Int , einzelAbbOrtRefOrt :: Int , einzelAbbOnrTypNr :: Maybe OnrTypNr , einzelNachOrtRefOrt :: Maybe Int } data RecUms = RecUms { recumsBasisVersion :: Int , recumsEinanNr :: Int , recumsTagesartNr :: Int , recumsUmsBeginn :: Int , recumsUmsEnde :: Int , recumsUmsMin :: Int , recumsUmsMax :: Int , recumsMaxVerzMan :: Int , recumsMaxVerzAuto :: Int }