amat — Source Data Validation Report

This report was generated by the Canonical GTFS Schedule validator, version 8.0.1 at 2026-08-21T14:16:55Z,
for the dataset file:///shared/amat_542e5b1a.zip. No country code was provided.

Use this report alongside our documentation.

Summary

Agencies included


Feed Info


Publisher Name:
AMAT_Milan_feed
Publisher URL:
http://www.amat-mi.it
Feed Email:
N/A
Feed Language:
Italian
Feed Start Date:
2026-08-11

Files included


  1. agency.txt
  2. calendar.txt
  3. calendar_dates.txt
  4. feed_info.txt
  5. routes.txt
  6. shapes.txt
  7. stop_times.txt
  8. stops.txt
  9. transfers.txt
  10. trips.txt

Counts


  • Agencies: 1
  • Blocks: 0
  • Routes: 167
  • Shapes: 682
  • Stops: 4859
  • Trips: 181668

Specification Compliance report

165884 notices reported (0 errors, 104089 warnings, 61795 infos)

Notice Code Severity Total
leading_or_trailing_whitespaces WARNING 7

leading_or_trailing_whitespaces

The value in CSV file has leading or trailing whitespaces.

This notice is emitted for values protected with double quotes since whitespaces for non-protected values are trimmed automatically by CSV parser.

The validator strips whitespaces from protected values. We do not see any use case when such a whitespace may be needed. On the other hand, some real-world feeds use trailing whitespaces for some values and omit them for the others. This is causing the largest problem when a primary key and a foreign key differ just by a whitespace: it is clear that they are intended to be the same, that is why we always strip whitespaces.

You can see more about this notice here.

filename (?) The name of the faulty file. csvRowNumber (?) The row of the faulty record. fieldName (?) Faulty record's field name. fieldValue (?) Faulty value.
"routes.txt" 156 "route_long_name" "pieve e. (staz fs) - milano (ripamonti) "
"routes.txt" 158 "route_long_name" "assago m2 - rozzano "
"routes.txt" 159 "route_long_name" "settimo m.(della libertà) - milano (san siro m5) "
"routes.txt" 160 "route_long_name" "bareggio (gallina) - molino dorino m1 "
"stops.txt" 4617 "stop_name" "gobetti "
"stops.txt" 4727 "stop_name" " porta vercellina"
"stops.txt" 4729 "stop_name" " santa sofia"
missing_feed_contact_email_and_url WARNING 1

missing_feed_contact_email_and_url

Best Practices for feed_info.txt suggest providing at least one of feed_contact_email and feed_contact_url.

You can see more about this notice here.

csvRowNumber (?) The row number of the validated record.
2
missing_feed_info_date WARNING 1

missing_feed_info_date

One of feed_start_date or feed_end_date is specified, but not both.

Even though feed_info.start_date and feed_info.end_date are optional, if one field is provided the second one should also be provided.

You can see more about this notice here.

csvRowNumber (?) The row number of the faulty record. fieldName (?) Either `feed_end_date` or `feed_start_date`.
2 "feed_end_date"
missing_recommended_field WARNING 1

missing_recommended_field

A recommended field is missing.

The given field has no value in some input row, even though values are recommended.

You can see more about this notice here.

filename (?) The name of the faulty file. csvRowNumber (?) The row of the faulty record. fieldName (?) The name of the missing field.
"feed_info.txt" 2 "feed_end_date"
mixed_case_recommended_field WARNING 104079

mixed_case_recommended_field

This field has customer-facing text and should use Mixed Case (should contain upper and lower case letters).

This field contains customer-facing text and should use Mixed Case (upper and lower case letters) to ensure good readability when displayed to riders. Avoid the use of abbreviations throughout the feed (e.g. St. for Street) unless a location is called by its abbreviated name (e.g. “JFK Airport”). Abbreviations may be problematic for accessibility by screen reader software and voice user interfaces.

Good examples:
Field Text Dataset
"Schwerin, Hauptbahnhof" Verkehrsverbund Berlin-Brandenburg
"Red Hook/Atlantic Basin" NYC Ferry
"Campo Grande Norte" Carris
Bad examples:
Field Text
"GALLERIA MALL"
"3427 GG 17"
"21 Clark Rd Est"

You can see more about this notice here.

Only the first 50 of 104079 affected records are displayed below.

filename (?) Name of the faulty file. fieldName (?) Name of the faulty field. fieldValue (?) Faulty value. csvRowNumber (?) The row number of the faulty record.
"routes.txt" "route_long_name" "greco - roserio" 2
"routes.txt" "route_long_name" "negrelli - bausan (lav. torino)" 3
"routes.txt" "route_long_name" "lorenteggio - gratosoglio (lav. torino)" 4
"routes.txt" "route_long_name" "lagosta - p.za castello (lavori testi)" 5
"routes.txt" "route_long_name" "ospedale maggiore - ortica" 6
"routes.txt" "route_long_name" "testi/ s. marcellina - precotto (lavori prol per c.na gobba )" 7
"routes.txt" "route_long_name" "stz centrale - stz genova" 8
"routes.txt" "route_long_name" "lunigiana -24 maggio" 9
"routes.txt" "route_long_name" "p.za ovidio - roserio (lav. cappelli e bramante)" 10
"routes.txt" "route_long_name" "cusani - cim. maggiore (lav. bramante e torino)" 11
"routes.txt" "route_long_name" "dogana m1 m3 - rozzano via g. rossa" 12
"routes.txt" "route_long_name" "m.te velino - s.siro" 13
"routes.txt" "route_long_name" "cantu' - castelli (lav mazzini-albricci)" 14
"routes.txt" "route_long_name" "vigentino - fontana" 15
"routes.txt" "route_long_name" "fontana - ungheria" 16
"routes.txt" "route_long_name" "bicocca m5- cinisello b." 17
"routes.txt" "route_long_name" "lagosta - rimembranze di lambrate" 18
"routes.txt" "route_long_name" "toffetti - q.re fatima" 19
"routes.txt" "route_long_name" "molino dorino m1 - comasina m3" 20
"routes.txt" "route_long_name" "corelli - susa" 21
"routes.txt" "route_long_name" "loreto - pitteri" 22
"routes.txt" "route_long_name" "parco nord - bonola m1" 23
"routes.txt" "route_long_name" "niguarda - q.re bovisasca" 24
"routes.txt" "route_long_name" "q.re bicocca - stz centrale m2 m3" 25
"routes.txt" "route_long_name" "firenze - greco" 26
"routes.txt" "route_long_name" "turro - c.na gobba" 27
"routes.txt" "route_long_name" "san donato m3 - stz lambrate" 28
"routes.txt" "route_long_name" "q.re cantalupa - famagosta m2" 29
"routes.txt" "route_long_name" "romolo m2 - bisceglie m1" 30
"routes.txt" "route_long_name" "m.te rosa - palazzolo" 31
"routes.txt" "route_long_name" "lotto m1 m5 - tirana" 32
"routes.txt" "route_long_name" "lorenteggio - cairoli m1" 33
"routes.txt" "route_long_name" "zara m3 m5 - cimiano m2" 34
"routes.txt" "route_long_name" "bruzzano f.n. - bicocca (universita')" 35
"routes.txt" "route_long_name" "lambrate fs m2 - q.re adriano - sesto marelli m1" 36
"routes.txt" "route_long_name" "dateo m4 - stz lambrate m2" 37
"routes.txt" "route_long_name" "loreto - cim. lambrate" 38
"routes.txt" "route_long_name" "q.re adriano - loreto" 39
"routes.txt" "route_long_name" "q.to oggiaro - cairoli" 40
"routes.txt" "route_long_name" "58/ bisceglie m1 - noale" 41
"routes.txt" "route_long_name" "famagosta m2 - lodovica" 42
"routes.txt" "route_long_name" "duomo m1 m3 - zara m3 m5" 43
"routes.txt" "route_long_name" "duomo - murani" 44
"routes.txt" "route_long_name" "sire raul - lodi" 45
"routes.txt" "route_long_name" "de angeli m1 - muggiano" 46
"routes.txt" "route_long_name" "bonola m1 - lorenteggio" 47
"routes.txt" "route_long_name" "p.ta romana - abbiategrasso m2" 48
"routes.txt" "route_long_name" "cadore - peschiera b" 49
"routes.txt" "route_long_name" "scanini - baracca" 50
"routes.txt" "route_long_name" "bergognone - bonola m1 (lav. stuparich)" 51
trip_headsign_matches_intermediate_stop INFO 56420

trip_headsign_matches_intermediate_stop

Trip headsign matches the name of an intermediate stop, not the last stop.

The trip_headsign matches the stop_name of a stop that is not the last stop of the trip. This may confuse passengers boarding after that stop, since the headsign suggests the vehicle is heading to a stop it has already passed.

You can see more about this notice here.

Only the first 50 of 56420 affected records are displayed below.

csvRowNumber (?) The row number of the faulty record in `trips.txt`. tripId (?) The id of the trip with the problematic headsign. tripHeadsign (?) The headsign value that matches an intermediate stop name. stopId1 (?) The id of the intermediate stop whose name matches the headsign. stopSequence (?) The stop_sequence value of the intermediate stop that matches the headsign. stopId2 (?) The id of the actual last stop of the trip.
312 "20260810_fes_e_220_10545_81818789" "pieve e. (q.re delle rose)" "13578" 37 "13580"
313 "20260810_fes_e_220_10545_81818771" "pieve e. (q.re delle rose)" "13578" 37 "13580"
314 "20260810_fes_e_220_10545_81818748" "pieve e. (q.re delle rose)" "13578" 37 "13580"
315 "20260810_fes_e_220_10545_81818773" "pieve e. (q.re delle rose)" "13578" 37 "13580"
316 "20260810_fes_e_220_10545_81818791" "pieve e. (q.re delle rose)" "13578" 37 "13580"
317 "20260810_fes_e_220_10545_81818775" "pieve e. (q.re delle rose)" "13578" 37 "13580"
318 "20260810_fes_e_220_10545_81818793" "pieve e. (q.re delle rose)" "13578" 37 "13580"
319 "20260810_fes_e_220_10545_81818777" "pieve e. (q.re delle rose)" "13578" 37 "13580"
320 "20260810_fes_e_220_10545_81818795" "pieve e. (q.re delle rose)" "13578" 37 "13580"
321 "20260810_fes_e_220_10545_81818779" "pieve e. (q.re delle rose)" "13578" 37 "13580"
322 "20260810_fes_e_220_10545_81818797" "pieve e. (q.re delle rose)" "13578" 37 "13580"
323 "20260810_fes_e_220_10545_81818781" "pieve e. (q.re delle rose)" "13578" 37 "13580"
324 "20260810_fes_e_220_10545_81818799" "pieve e. (q.re delle rose)" "13578" 37 "13580"
325 "20260810_fes_e_220_10545_81818783" "pieve e. (q.re delle rose)" "13578" 37 "13580"
326 "20260810_fes_e_220_10545_81818801" "pieve e. (q.re delle rose)" "13578" 37 "13580"
327 "20260810_fes_e_220_10548_81818749" "rozzano (solidarietà)" "15975" 34 "15972"
328 "20260810_fes_e_220_10548_81818788" "rozzano (solidarietà)" "15975" 34 "15972"
329 "20260810_fes_e_220_10548_81818772" "rozzano (solidarietà)" "15975" 34 "15972"
330 "20260810_fes_e_220_10548_81818790" "rozzano (solidarietà)" "15975" 34 "15972"
331 "20260810_fes_e_220_10548_81818774" "rozzano (solidarietà)" "15975" 34 "15972"
332 "20260810_fes_e_220_10548_81818792" "rozzano (solidarietà)" "15975" 34 "15972"
333 "20260810_fes_e_220_10548_81818776" "rozzano (solidarietà)" "15975" 34 "15972"
334 "20260810_fes_e_220_10548_81818794" "rozzano (solidarietà)" "15975" 34 "15972"
335 "20260810_fes_e_220_10548_81818778" "rozzano (solidarietà)" "15975" 34 "15972"
336 "20260810_fes_e_220_10548_81818796" "rozzano (solidarietà)" "15975" 34 "15972"
337 "20260810_fes_e_220_10548_81818780" "rozzano (solidarietà)" "15975" 34 "15972"
338 "20260810_fes_e_220_10548_81818798" "rozzano (solidarietà)" "15975" 34 "15972"
339 "20260810_fes_e_220_10548_81818782" "rozzano (solidarietà)" "15975" 34 "15972"
340 "20260810_fes_e_220_10548_81818800" "rozzano (solidarietà)" "15975" 34 "15972"
341 "20260810_fes_e_220_10548_81818784" "rozzano (solidarietà)" "15975" 34 "15972"
342 "20260810_fes_e_220_10547_81818744" "rozzano (solidarietà)" "15975" 34 "15972"
343 "20260810_fes_e_220_10547_81818761" "rozzano (solidarietà)" "15975" 34 "15972"
344 "20260810_fes_e_220_10547_81818746" "rozzano (solidarietà)" "15975" 34 "15972"
345 "20260810_fes_e_220_10547_81818763" "rozzano (solidarietà)" "15975" 34 "15972"
346 "20260810_fes_e_220_10547_81818753" "rozzano (solidarietà)" "15975" 34 "15972"
347 "20260810_fes_e_220_10547_81818736" "rozzano (solidarietà)" "15975" 34 "15972"
348 "20260810_fes_e_220_10547_81818751" "rozzano (solidarietà)" "15975" 34 "15972"
349 "20260810_fes_e_220_10547_81818734" "rozzano (solidarietà)" "15975" 34 "15972"
350 "20260810_fes_e_220_10547_81818755" "rozzano (solidarietà)" "15975" 34 "15972"
351 "20260810_fes_e_220_10547_81818738" "rozzano (solidarietà)" "15975" 34 "15972"
352 "20260810_fes_e_220_10547_81818759" "rozzano (solidarietà)" "15975" 34 "15972"
353 "20260810_fes_e_220_10547_81818742" "rozzano (solidarietà)" "15975" 34 "15972"
354 "20260810_fes_e_220_10547_81818757" "rozzano (solidarietà)" "15975" 34 "15972"
355 "20260810_fes_e_220_10547_81818740" "rozzano (solidarietà)" "15975" 34 "15972"
362 "20260810_fes_e_220_10549_81818769" "rozzano (solidarietà)" "15975" 20 "15972"
363 "20260810_fes_e_220_10549_81818767" "rozzano (solidarietà)" "15975" 20 "15972"
364 "20260810_fes_e_220_10549_81818765" "rozzano (solidarietà)" "15975" 20 "15972"
365 "20260810_fes_e_220_10549_81818786" "rozzano (solidarietà)" "15975" 20 "15972"
366 "20260810_sa_e_220_10545_81818681" "pieve e. (q.re delle rose)" "13578" 37 "13580"
367 "20260810_sa_e_220_10545_81818722" "pieve e. (q.re delle rose)" "13578" 37 "13580"
unknown_column INFO 6

unknown_column

A column name is unknown.

You can see more about this notice here.

filename (?) The name of the faulty file. fieldName (?) The name of the unknown column. index (?) The index of the faulty column.
"feed_info.txt" "surface_end_date" 6
"feed_info.txt" "mm_end_date" 7
"routes.txt" "x_accessibilita_linea" 10
"routes.txt" "x_ordinamento_linea" 11
"trips.txt" "x_trip_desc" 10
"trips.txt" "x_shape_id_order" 11
unsorted_stop_times INFO 5369

unsorted_stop_times

Stop times are not sorted by trip_id and stop_sequence.

'stop_times.txt' entries for a given trip are not sorted by stop_sequence, or are not contiguous in the file.

You can see more about this notice here.

Only the first 50 of 5369 affected records are displayed below.

tripId (?) The faulty record's trip_id. startCsvRowNumber (?) CSV row number of the first stop_times entry for this trip. endCsvRowNumber (?) CSV row number of the last stop_times entry for this trip.
"20260822_f5e_n2a_8230_23549114" 4195788 4195884
"20260822_f5e_n2a_8230_23549106" 4236168 4236264
"20260822_sa_e_433-528-542-560-561-566_12394_30557841" 4192457 4192548
"20260822_sa_e_433-528-542-560-561-566_12394_30557833" 4195419 4195511
"20260822_sa_e_433-528-542-560-561-566_12394_30557834" 4215074 4215199
"20260822_sa_e_433-528-542-560-561-566_12394_30557835" 4221279 4221401
"20260822_sa_e_433-528-542-560-561-566_12394_30557836" 4223814 4223938
"20260822_sa_e_433-528-542-560-561-566_12394_30557837" 4227257 4227381
"20260822_sa_e_433-528-542-560-561-566_12394_30557832" 4188122 4188246
"20260822_f5e_n2a_8230_23549078" 4204100 4204196
"20260822_sa_e_433-528-542-560-561-566_12394_30557804" 4251476 4251598
"20260822_sa_e_433-528-542-560-561-566_12394_30557805" 4255408 4255503
"20260822_sa_e_433-528-542-560-561-566_12394_30557806" 4199704 4199827
"20260822_sa_e_433-528-542-560-561-566_12394_30557807" 4201879 4202001
"20260822_sa_e_433-528-542-560-561-566_12394_30557808" 4208275 4208398
"20260822_sa_e_433-528-542-560-561-566_12394_30557828" 4185081 4185204
"20260822_sa_e_433-528-542-560-561-566_12394_30557797" 4234173 4234298
"20260822_sa_e_433-528-542-560-561-566_12394_30557798" 4241394 4241487
"20260822_sa_e_433-528-542-560-561-566_12394_30557799" 4248540 4248663
"20260822_sa_e_10536_38034666" 4235901 4235978
"20260822_sa_e_10536_38034662" 4224945 4225022
"20260810_8_VEN_EST_Sab_7-14-21-28-Ago_sa_e_95_14237_90209848" 1148782 1395133
"20260810_8_MAR_EST_Sab_4-11-18-25-Ago_sa_e_125_notturno_10011_34609048" 614684 614693
"20260822_sa_e_433-528-542-560-561-566_12841_30557838" 4259861 4259965
"20260822_sa_e_433-528-542-560-561-566_12841_30557818" 4196061 4196165
"20260822_sa_e_433-528-542-560-561-566_12841_30557819" 4204550 4204655
"20260822_sa_e_433-528-542-560-561-566_12841_30557816" 4186454 4186558
"20260822_sa_e_433-528-542-560-561-566_12841_30557817" 4189664 4189769
"20260822_sa_e_433-528-542-560-561-566_12841_30557810" 4243716 4243794
"20260822_sa_e_433-528-542-560-561-566_12841_30557820" 4210992 4211094
"20260822_sa_e_433-528-542-560-561-566_12841_30557821" 4218498 4218601
"20260822_sa_e_433-528-542-560-561-566_12841_30557822" 4230963 4231068
"20260822_sa_e_433-528-542-560-561-566_12841_30557809" 4237738 4237844
"20260822_sa_e_10536_38034658" 4214404 4214484
"20260822_sa_e_10536_38034606" 4241187 4241265
"20260822_sa_e_10536_38034602" 4230399 4230476
"20260820_sa_e_423-424-431_8057_23549136" 4188920 4188991
"20260820_sa_e_423-424-431_8057_23549158" 4191994 4192064
"20260820_sa_e_423-424-431_8057_23549178" 4194770 4194843
"20260820_sa_e_220_10545_81818726" 4244979 4245171
"20260820_sa_e_220_10545_81818728" 4256439 4256628
"20260820_sa_e_220_10545_81818730" 4265000 4265115
"20260820_sa_e_220_10545_81818716" 4189993 4190107
"20260820_sa_e_220_10545_81818718" 4202205 4202394
"20260820_sa_e_220_10545_81818722" 4223215 4223406
"20260820_sa_e_220_10545_81818724" 4233977 4234168
"20260820_sa_e_220_10545_81818720" 4212649 4212839
"20260820_sa_e_220_10545_81818714" 4193928 4194040
"20260820_sa_e_220_10545_81818698" 4187756 4187869
"20260820_sa_e_220_10545_81818693" 4266968 4267081