Version 26 (modified by 8 years ago) ( diff ) | ,
---|
Detect orthographic errors, name abbreviations, tags not suitable in Portugal and misused tags. Messages are in Portuguese only. Feel free to fix errors (thanks!) Content available under Creative Commons (CC-BY-SA) https://creativecommons.org/licenses/by-sa/3.0/ and LGPL https://www.gnu.org/licenses/lgpl.html according to https://josm.openstreetmap.de site content licenses.
meta { title: "Português-Erros comuns PT2"; version: "1.38_2020-10-05"; description: "Encontra principalmente erros de ortografia, abreviaturas em nomes, algumas etiquetas não aplicáveis a Portugal e alguns erros de etiquetas mal aplicadas. Os erros começam com PT2 para serem facilmente identificados. Verificar com CUIDADO os erros apresentados por esta lista, pois nem sempre são erros."; author: "zermes"; link: "http://josm.openstreetmap.de/wiki/Rules/Portuguese-Errors-PT2"; watch-modified: true; baselanguage: "pt"; } /* * Muitas expressões regulares são provenientes da comunidade OpenStreetMap Brasil, mais concretamente dos autores naoliv, Skippern e boneco, * disponível em https://github.com/OSMBrasil/validador-josm Foram adaptadas a Portugal e serviram de inspiração a muitas outras. * * Os erros apresentados no JOSM por estas expressões regulares nem sempre são erros, apesar da tentativa de evitá-los na medida do possível. * Estas expressões regulares não são conservadoras: quando não é possível melhorar de forma prática uma expressão regular para que não apresente * alguns falsos erros, mas que detete muitos mais erros verdadeiros, opta-se por mantê-la aqui. * * Deve-se verificar as correções no josm COM CUIDADO e caso a caso, mesmo que esteja disponível o botão "Corrigir" de forma automática, * pois facilita muito as correções, mas não é à prova de erros. Caso se utilize esta ferramenta em locais do OpenStreetMap fora do território * português (não recomendável) deve-se ter cuidado redobrado pois muitos dos erros detetados não se aplicam a outros países. * * Se encontrarem algum erro comum podem editar esta página ou entrar em contacto com o autor em https://www.openstreetmap.org/user/zermes * Disponibilizado conforme as licenças do site https://josm.openstreetmap.de em que esta página está disponível: * Creative Commons (CC-BY-SA) https://creativecommons.org/licenses/by-sa/3.0/ e LGPL https://www.gnu.org/licenses/lgpl.html */ /* ERROS */ *[designation] { throwError: tr("PT2-VERIFICAR: designation não se aplica em Portugal, pode ser description, name, tipo de loja,etc. Muitas vezes contém informações importantes."); } *[highway=living_street] { throwError: tr("PT2- {0} não se aplica em Portugal", "{0.value}"); suggestAlternative: "residential"; fixAdd: "highway=residential"; } *[highway=bridleway] { throwError: tr("PT2- bridleway não se aplica em Portugal, usar highway=path"); fixAdd: "highway=path"; } *[amenity=biergarten] { throwError: tr("PT2- amenity=biergarten não se aplica em Portugal, usar amenity=pub"); } *[railway=monorail] { throwError: tr("PT2-Não existem monocarris em Portugal, será ferrovia?"); } *[shop=bike] { throwError: tr("PT2-Não é shop=bike mas sim shop=bicycle"); fixAdd: "shop=bicycle"; } /* AVISOS */ *[/name|name:pt|addr:street|addr:city/ =~ /\s([dn]as?|[dn]os?|de)\s[a-z]/] { throwWarning: tr("PT2-name, addr:street ou addr:city com minúscula após da,no,de,e..."); } *[/name|name:pt|addr:street|addr:city/ =~ /\s([DN]as?|[DN]os?|De)\s[a-zA-Z]|\sE\s/][name !~ /^European route/] { throwWarning: tr("PT2-name, addr:street ou addr:city com maiúscula em Da,No,De,E..."); } *[/^(name|name:pt|addr:street|addr:city)$/ =~ /^[a-z]/] { throwWarning: tr("PT2-name, addr:street ou addr:city que começa em minúscula"); } *[/name|name:pt|addr:street|addr:city/ =~ /^([!,:;_ºª+=]|\.|\?|\*|-)/] { throwWarning: tr("PT2-name, addr:street ou addr:city que começa com pontuação"); } *[name =~ /\s\s/], *["name:pt" =~ /\s\s/], *[short_name =~ /\s\s/], *[official_name =~ /\s\s/], *[loc_name =~ /\s\s/], *[old_name =~ /\s\s/], *[int_name =~ /\s\s/], *[nat_name =~ /\s\s/], *[reg_name =~ /\s\s/], *["addr:street" =~ /\s\s/], *[description =~ /\s\s/], *[ref =~ /\s\s/], *[old_ref =~ /\s\s/] { throwWarning: tr("PT2- {0} com 2 espaços em branco consecutivos", "{0.key}"); } *[website =~ /\s/][name !~ /(\s;|;\s)/] { throwWarning: tr("PT2-website com espaço em branco"); } *[/name|name:pt|addr:street/ =~ /(?i)(?u)(sem\s?nome|fix\s?me|\bfix\b|nome|no\s?name|desconhecido|n(ã|a)o conhecido)/][name !~ /(?i)(?u)soldado desconhecido/] { throwWarning: tr("PT2-Nome errado, sem nome..."); } way[highway][/name|name:pt|addr:street/ =~ /(-Os-|\sos\s)/] { throwWarning: tr("PT2-Corrigir nome ou endereço com o correto X-os-X"); } way[highway][/name|name:pt|addr:street/ =~ /-O-/] { throwWarning: tr("PT2-Corrigir nome ou endereço com o correto em minúscula X-o-X"); } way[highway][/name|name:pt|addr:street/ =~ /-A-/] { throwWarning: tr("PT2-Corrigir nome ou endereço com o correto em minúscula X-a-X"); } way[highway][/name|name:pt|addr:street/ =~ /(?i)(?u)(\bairport|\bbank|building|\bdrive\s?way|embassy|\bhelip(ort|ad)\b|\bPark(ing)?|piscine|Post\s?off?ice|\bRue\b|\bshop\b|\bstair|\bstation\b|\btra(c?k|ck?)|stree?t|Zebra cros)/] { throwWarning: tr("PT2-name ou addr:street com palavras por traduzir ou mudar a etiqueta"); } way[highway][/^(name|name:pt)$/ =~ /\b(Alf|Alm|Ant|Arq\.?º?|Az|B\.?º|Br|Bco?|Bl|Brg|Cac|Cc(nh)?|Ca[mp]|Churr|Csl|Cmdt|Comend|Cª|Cons|Cor|Cel|Dep|Dr?\.?[ºª]|Dr|Dq|Edf?|Emb|Enf[oº]?|Eng[ºª]?|Esc(nh)?|Est|Gen|Hab|Inf|Im[aª]|Im[oº]?|Im|Jrd?|Lg?|Lj|Lt|Loteam|Lu?g|Mto|Maj|Mal|Mq|Me|Min|Mons|M|Part|Pe|Pq|Pto|Pte|P[cç]|Pr|Pct[aª]?|Presid|Pro?fª?|Proj|Prolng|Qd|R\.|Rot|Sarg|Slj|Soc|Scv|Sq|Ten|Tr|Transv|Trav|Trv|Tv|Urb|Vl|Vi|Visc|Vv|Zn)(\.| )/] { throwWarning: tr("PT2-Nome abreviado"); } *["addr:city" =~ /\b[A-Z](\.| )/] { throwWarning: tr("PT2-addr:city abreviado"); } *["addr:street" =~ /\b(Alf|Alm|Ant|Arq\.?º?|Az|B\.?º|Br|Bco?|Bl|Brg|Cac|Cc(nh)?|Ca[mp]|Churr|Csl|Cmdt|Comend|Cª|Cons|Cor|Cel|Dep|Dr?\.?[ºª]|Dr|Dq|Edf?|Emb|Enf[oº]?|Eng[ºª]?|Esc(nh)?|Est|Gen|Hab|Inf|Im[aª]|Im[oº]?|Im|Jrd?|Lg?|Lj|Lt|Loteam|Lu?g|Mto|Maj|Mal|Mq|Me|Min|Mons|M|Pe|Pq|Part|Pe|Pto|P[cç]|Pr|Pct[aª]?|Presid|Pro?fª?|Proj|Prolng|Qd|R\.|Rot|Sarg|Slj|Soc|Scv|Sq|Ten|Tr|Transv|Trav|Trv|Tv|Urb|Vl|Vi|Visc|Vv|Zn)(\.| )/] { throwWarning: tr("PT2-addr:street abreviado"); } *["addr:street" =~ /\b(Ass|Av\.?ª?|[Bb](\.\s?|\s)?[Vv]|B(\.\s?|\s)?E(\.\s?|\s)?S|C(\.\s?|\s)?C|[Cc](\.\s?|\s)?[Gg](\.\s?|\s)?[Dd]|[Cc](\.\s?|\s)?[Mm]|C(\.\s?|\s)?V(\.\s?|\s)?P|C\.S|Congr|D|Dept|Dir|E(\.|\s)?T(\.|\s)?A(\.|\s)?R|Ed[Ee]|Ext|[FSfs](\.\s?|\s)?[Cc](lub)?e?|H|Inst|J(\.\s?|\s)?F|Lab|Mte|Na|Ns|N[^0-9º]|N(\.\s?|\s)?[ªa]|\sN\sS|Of|P(\.\s?|\s)?S(\.\s?|\s)?P|Qta|R|Res|Rib(\.a|\.?ª)?|S|S(\.\s?|\s)?C|Soc|Sª|Sr?\.?ª|Sra?|St\.?[oaºª]?|Univ)(\.|\s)/][/(name|name:pt|addr:street)/ !~ /S\.A\./] { throwWarning: tr("PT2-addr:street abreviado_"); } *[/^(name|name:pt)$/ =~ /\b(Ass|Av\.?ª?|[Bb](\.\s?|\s)?[Vv]|B(\.\s?|\s)?E(\.\s?|\s)?S|C(\.\s?|\s)?C|[Cc](\.\s?|\s)?[Gg](\.\s?|\s)?[Dd]|[Cc](\.\s?|\s)?[Mm]|C(\.\s?|\s)?V(\.\s?|\s)?P|C\.S|Congr|Coop(\.\s?|\s)|D|Dept|Dir|E(\.|\s)?T(\.|\s)?A(\.|\s)?R|Ed[Ee]|Ext|[FSfs](\.\s?|\s)?[Cc](lub)?e?|Gab|H|Inst|J(\.\s?|\s)?F|Lab|Mte|Na|Ns|N[^0-9º]|N(\.\s?|\s)?[ªa]|\sN\sS|Of|Pte|P(\.\s?|\s)?S(\.\s?|\s)?P|Qta|R|Res|Rib(\.a|\.?ª)?|S|S(\.\s?|\s)?C|Soc|Sª|Sr?\.?ª|Sra?|St\.?[oaºª]?|Univ)(\.|\s)/][/(name|name:pt|addr:street)/ !~ /S\.A\./] { throwWarning: tr("PT2-Nome abreviado-NÃO alterar se for nome de estabelecimento"); } *[/^(name|name:pt)$/ =~ /(E(\.|\s)[NRM]|C(\.|\s)M)(\.|\s)/] { throwWarning: tr("PT2-Nome de estrada abreviado. Confirmar se tem ref da estrada e introduzir nome longo"); } *[/name|name:pt|short_name|official_name|loc_name|old_name|int_name|nat_name|reg_name|addr:street|description|ref|old_ref/ =~ /[?!.,:;]{2,}/] { throwWarning: tr("PT2-Pontuação repetida 2 ou mais vezes"); } *[/^(name|name:pt)$/ =~ /\s['"»«ºª]\s/] { throwWarning: tr("PT2-Nome com acentuação isolada entre espaços"); } *[name =~ /[`~^¨]/], *["name:pt" =~ /[`~^¨]/], *[short_name =~ /[`~^¨]/], *[official_name =~ /[`~^¨]/], *[alt_name =~ /[`~^¨]/], *[loc_name =~ /[`~^¨]/], *[old_name =~ /[`~^¨]/], *[int_name =~ /[`~^¨]/], *[nat_name =~ /[`~^¨]/], *[reg_name =~ /[`~^¨]/], *["addr:street" =~ /[`~^¨]/], *[description =~ /[`~^¨]/], *[ref =~ /[`~^¨]/], *[old_ref =~ /[`~^¨]/], *[phone =~ /[`~^¨]/], *["contact:phone" =~ /[`~^¨]/], *[fax =~ /[`~^¨]/], *["contact:fax" =~ /[`~^¨]/], *[website =~ /[`~^¨]/], *["addr:housename" =~ /[`~^¨]/], *[sorting_name =~ /[`~^¨]/] { throwWarning: tr("PT2- {0} com caracteres estranhos", "{0.key}"); } *[name =~ /[´]/], *["name:pt" =~ /[´]/], *[short_name =~ /[´]/], *[official_name =~ /[´]/], *[alt_name =~ /[´]/], *[loc_name =~ /[´]/], *[old_name =~ /[´]/], *[int_name =~ /[´]/], *[nat_name =~ /[´]/], *[reg_name =~ /[´]/], *["addr:street" =~ /[´]/], *[description =~ /[´]/], *[ref =~ /[´]/], *[old_ref =~ /[´]/], *[phone =~ /[´]/], *["contact:phone" =~ /[´]/], *[fax =~ /[´]/], *["contact:fax" =~ /[´]/], *[website =~ /[´]/], *["addr:housename" =~ /[´]/], *["addr:street" =~ /[´]/], *[sorting_name =~ /[´]/] { throwWarning: tr("PT2- {0} com acento agudo e não apóstrofo", "{0.key}"); } /* erros ortográficos principais * certas palavras, apesar de poderem eventualmente estar erradas são problemáticas como "Luiz Vaz de Camoes" ou "Eça de Queiroz" que aparece * em alguns locais corretamente porque utiliza a grafia antiga, por isso não se deve colocar estes casos aqui. */ *[/^(name|name:pt|addr:street|addr:city|alt_name|int_name|nat_name|reg_name|loc_name|old_name|official_name|name:pt)$/ =~ /(?i)(?u)(oes\b|\bá\s|hà|\bAb[ìi]lio|Ac([àa]c|ass?|áss?)i[ao]|Academic[oa]|A((c|ss?)[ùu]|çù)de\b|\bAss?ore[sa]|Administra(ça|cã|ca)o|\bAdriao\b|Africa\b|Ag(enc|êns)ia|\b(Ág|Agu)eda\b|Agrari[ao]|Agricola|\bAgui?as?|\bAlamo\b|Alcantara|Alfandega|\bAl(ge|j[ée])s\b|Alvar(es|o)|Amalia|\bAmandio|\bAmeli[ao]\b|Americ[ao]s?\b|Amisade|\bAndre\b|\bAngel[ao]\b|\bAnibal|Antonio|Apolonia|Araujo|Arma(ze|sé)(m|ns)|\bArea\b|Arqueol(og|ój|oj)ic[oa]|\bArtes(ao|oes)|\bArtistic[oa]|Arvore|Ascen(sao|ção|çao)|\bAsenha\b|As(s?isten[cs]s?|istên[cs]s?i)ia|Astronomico|\bA[sc]is\b|Ass?o(c|ss?)ia(ça|cã|ca)o|Atlantic|Atletico|Auditorio|\bAzemeis|\bBaia\b|\bBalneario|B(as|áz)i(li)?c[ao]|\bBarao\b|\bBarbar[ao]s?\b|\bBa(zí|si)lica|\bB[éê]co\b|\bBelem\b|B(élj|el[gj]i)c|\bBelesa|\bBeltr[aâ]o\b|\bBetao\b|\bBissáu\b|Bonanico|Bonif(ac|as|ás)io|\bBrandao\b|\bBras\b|Bra(si|z[ií])lia|\bBrazil|Britanic|Cab(leireir[ao]|eleleir[ao]|eleire?[ao])|\bCacador|Cafe\b|Caf(ét[ea]|ata)ria|Cal(c|ss?)ada|C(alva|álv[áa])rio|\bC[àáã]mara|Cambio|Camelia|cami(onaj|no[gj]|nona[gj]|na[gj])em|Camoes|\bCa(mponez|npone[zs])|\bCandid[ao]\b|\bC[aâ]o\b\b|\bCapit(ao|aes|[õo]es)|Ca[cs]s?ador|\bCaza\b|C[ei]miterio|Centenari[ao]|\bC(e[zs]|éz)ar\b|Chafaris|\bCha[os]?\b|\bCidadao\b|Ci(enc|[êe]nss?)ia|Cir(ur[gj]|úrj)ica|\bClaudi[ao]|Clerigo|Clinica|Col(e[gj]|éj)io|Combustive(l|is)|Com(er[cs]|érs)io|\bCojo\b|Comdominio|Com(monit[áa]|unita)ri[ao]|Concei(ca|ça|cã)o|\bC[oô]nego\b|Con([cs]s?ervato|cervató)ri|Co(mdom[íi]|ndomi)nio|Coperativa|cosmetic(a|os)|\bCredito|Crist([oôó]va|[oô]vã)o|\bCrus\b|Con(c|ss?)ervatori[oa]|\bDalia\b|\bDami?ao\b|Dan(c|ss?)a\b|Dentari|Dep(oss?|óz|oz)ito|Diagnostico|Diario|Di(até|ete)tica|\bDili\b|Dion(is|iz|íz)io|Dire(cã|ça|ca)o|Domingao|\bE(c|ss?)ca\b|Edif(i[cçs]s?|íç|íss?)icio|Educa(ca|ça|cã)o|Elec?tr[ei](c[ao]|[çs]s?ista)s?|Elec?tr(e[cçs]s?|i[çs]s?)[ei]dade|Elec?trodomestic|\bElisi[ao]s?\b|\b([ÈÉ]m[íi]|Emi)di[ao]\b|\bEmili[ao]\b|Encarna(ca|ça|cã)o|Eremida|Escadori|Escoteiro|Espirit[ao]|Expli([çc][õo]es|ca(cõ|ço|co)es|ca(ça|cã)o)|Esta(ca|ça|cã)o|\bEstadio|Estasiona|Estatua|\bEstefani[ao]|Esternato|Estetic[ao]|Estradao|Est[êée]vao|Estufador|\bEufemi|Evan(ge|jé|je)lica|\bEvora\b|Ex(erc|érs)ito|\bEx(ilio|ílad)|Fabricas?\b|\bFamalicao|\bFamilia\b|(para)?Farmacia|Farmaceutic|Fatima|Felix|\bFerre[ao]|Ferr?oviari|Finan(c|ss?)as|\bFisic[ao]\b|\bFlavi[ao]\b|\bFont[ae]rio|Fortalesa|Fotebol\b|\bFotografo|Fran(ce|sê|se)s\b|F(egu?e[sz]|rege[sz]|regu?ez)ia|Fruticula|Funeraria|Gale\b|Garces|\bGa(rret|rett?)\b|\bGaviao\b|\b(Ge|J[ée])meos?\b|Gloria|\bGôa\b|\bGois\b|Gon(c|ss?)alves|\bGra[cs]s?as?\b|\bGrao\b|Guestao|Guimaraes|Gu?in(áz|as|az)io|Gu?ina[sz]tica|Guine(\sBiss?a[ou])?|Guiné(-|\s)?(Bi[çs]a[ou])|Hermini[ao]\b|Herois|Hipico|\bHor(áss?|ac)io|Horten[cs]ia|Horticula|\bH[õô]tel|Iberic[ao]|Imobiliaria|\bIn([áa]ss?|ac)io|Independencia|India\b|Industrias?\b|Inf(a[cs]s?ia|ânss?ia|antario)|\binformatica|\bIn(es|ez|êz)\b|Infantario|Informatica|Inspec?ç?(a|oes)|\bIrmao?s?\b|\bJeova\b|Jeronimo|\bJiesta|\bJoao\b|Joelheria|\bJoias?\b|J[oó]se\b|J[ou]d[iu]([cs]s?ia|ss?i[áa]|[cs]?i[cs]?ia)ria|\bJuliao\b|\bJusti(c|ss?)a|\bJulia?o\b|\bJuridic|Laboratorio|\bLampiao\b|L(ás|az|as)aro|Leao|Leitao|\bLinguas?\b|\bLiquido\b|\bLirio|Lo(gi|jí)stic|Loule|Louren(c|ss?)o|\bL(ú[çs]s?i|u[çcs]s?i)[ao]\b|Lu[sz]iada|Magalhaes|\bMalhao\b|Maquinas?|\bMarili|Maritim[oa]|\bMario\b|Martir(es)?\b|\bMatris\b|Marqu?(é[sz]|eza)\b|Matematic|\bMedic[oa]\b|Metal(úrjica|ur[jg]ica)|Mi(ss?iona|cion[áa])ri|M[ei][sz](erir?co|irec[oó])rd[ie](o[sz])?a|\bMoises\b|Mortuaria|Moveis|\bM(o[sz]e[ou]|useo|uze[ou])\b|M[uo]([sz]e[uo]lój|ze[uo]ló[gj])ic|Muni((c|ss?)i|ss?í)pio|Musica\b|\bNautic|\bNa(zare|sar[ée])|Negocio|Nem(éz|es)io\b|Ne[sç]s?e[scç]s?idades|Not(i[cs]s?|íss?)ias|\bNucleo\b|\bOp?tica\b|[ÒO]bidos?|Observatorio|O(ceanic[ao]\b|[çs]s?eânic)|Panoramic|\bPao\b|\bP[áa]teo\b|\bP[àaâã]tio\b|Pavilh(ao|oes)|\bPen(ss?a|ssã|çã)o\b|\bPredios?\b|P(siquia|ciqui[aá])tric[oa]|Politecnic|Porfirio|Portugue[sz]\b|Profi[cs]ional|\bProgre[sç]o|\bPublic(o|a)\b|P[ou]rifica(ca|ça|cã)o|Quiteria|\bRadio\b|\bRaínha\b|\bRaúl\b|Ress?into|\bR[eu]tunda\b|\bRe(gia|jiã|gi|ji)o\b|Rejimento|Remedio|Repara(cões|çoes|coes|çao|cao|cão)|R[ée]publica\b|R(épu|epú|épú)blican[ao]|Retro(za|[zs]e)ria|Re([zs]ide|zidê)n[cs]ias?\b|Rezid[êe]ncial|Re(zide|sidê)n[cs]ial|Re[sç]urrei(ça|[cs]s?ã)o|Ress?urrei(ça|[cs]s?ã)o|Retrozaria|\bRío\b|Rodoviari[oa]|\bRo([gj]e|jé)rio|Romanic[ao]|Romao|\bRo(sa|za|zá)[rl]i[oa]|Ruina|\bSa\b|Salao|Sand([ou][íi]x|[ou]ich|oích)e|\bSanitari|Sant(are|er[ée])m|Sant(í[sçc]|i[sçc]s?)im[ao]|\bSao\b|\bSaude|\sSe\b|Sebastiao|Seculo|Secundari[ao]|(Semina|Cemin[áa])rio|Senior|Ser(racao|raçao|racão|ação)|Sepulveda|Servi(c|ss?)o|S(erg|érji)io|Sidonio|\bSilverio|Sim(ao|oes)|Su(e(c|ss?)ia|éss?)ia|Su(íss?|iç|iss?)a|Su[çs]s?e(ss?|ç)o|\bT(ang|[âa]nj)er\b|Tape([çc]e|[cs]s?a)ria|Taxis?|Tecnico|Tecnol(ój|o[gj])ico|\bTenis\b|Tertulia|Teofilo|Teotonio|Textil|\bTilia|\bTipico|\bTomas\b|\bTome\b|\bTr(a[sz]|áz)\b|\bTr?ave[sç]a\b|\bTrese\b|\bTúlipa|\bTunel\b|\bTuristic|\bUniao\b|Univer(sita|cit[áa])ri|Univercidade|Urbani(za(ç|ss?)ao|sa(ç|ss?)ão|zac[aã]o)|Urg(enc|[êe]nss?)ia|\bV(ar[zs]|árs)ea\b|\bVarsim|\bV(árs|ar[zs])ea|\bValeri[ao]\b|\bVen(an[cs]s?|[âa]nss?)i[ao]|\bV(ide|[íi]di)o\b|\bV(ir[gj]i|jí|erj[íi]|ergi)li|Veter(i?na|en[áa])ri|\bVilaret?\b|Vitoria|Voluntario)/] { throwWarning: tr("PT2-Verificar:name ou similares, addr:street, addr:city com erros ortográficos"); } /* casos de marcas complicadas em que o melhor é indicar o nome correto na mensagem */ *[name =~ /(?i)(?u)[Dd]ecat?[hl]?on/] { throwWarning: tr("PT2-Correto é Decathlon"); } *[name =~ /(?i)(?u)Ma?c(\s[Dd]onald('|\s)?|[Dd]onald\s?)s/] { throwWarning: tr("PT2-Correto é McDonalds-com apóstrofo antes do s"); } *[name =~ /(?i)(?u)\b[Ll]evi[ ´]?s\b/] { throwWarning: tr("PT2-Correto é Levis-com apóstrofo antes do s"); } *[name =~ /[Pp]ingo((D|d| d)ol?ce| Dolce)/] { throwWarning: tr("PT2-Correto é Pingo Doce"); } *[name =~ /\b([Ee][Ll]ecler[kqc]|[Ee]\.[Ll]ecler[kq]|e\.Leclerc|E\.leclerc)/] { throwWarning: tr("PT2-Correto é E.Leclerc"); } *[name =~ /(?i)(?u)(Inter?(\s|-)?ma(rche|x[ée]|r?che)|Inter(\s|-)marché)/] { throwWarning: tr("PT2-Correto é Intermarché"); } *[name =~ /(?i)(?u)\bDeca(te?lo[mn]|th?lom|tom)\b/] { throwWarning: tr("PT2-Correto é Decathlon"); } *[name =~ /(mini(\s|-)?preço|Mini(\s|-)preço|Mini(\s|-)?Preço|MINI(\s|-)?PREÇO)/] { throwWarning: tr("PT2-Correto é Minipreço"); } *[name =~ /(?i)(?u)(^Phone House|[FP]one Hou[zs]e)/] { throwWarning: tr("PT2-Correto é The Phone House"); } *[name =~ /Banco Português de Investimento/][!short_name] { throwWarning: tr("PT2-Falta a etiqueta short_name=BPI"); fixAdd: "short_name=BPI"; } *[name =~ /Caixa Geral de Depósitos/][!short_name] { throwWarning: tr("PT2-Falta a etiqueta short_name=CGD"); fixAdd: "short_name=CGD"; } *[name =~ /Banco Espírito Santo/][!short_name] { throwWarning: tr("PT2-Falta a etiqueta short_name=BES"); fixAdd: "short_name=BES"; } *[name =~ /Banco Bilbao Vizcaya Argentaria/][!short_name] { throwWarning: tr("PT2-Falta a etiqueta short_name=BBVA"); fixAdd: "short_name=BBVA"; } *[name =~ /Guarda Nacional Republicana/][!short_name] { throwWarning: tr("PT2-Falta a etiqueta short_name=GNR"); fixAdd: "short_name=GNR"; } *[name =~ /Polícia de Segurança Pública/][!short_name] { throwWarning: tr("PT2-Falta a etiqueta short_name=PSP"); fixAdd: "short_name=PSP"; } *[amenity = police][name =~ /^(?i)(?u)P(\.\s?|\s)?S(\.\s?|\s)?P(\.\s?|\s)?$/] { throwWarning: tr("PT2-Nome abreviado de Polícia de Segurança Pública"); fixAdd: "name=Polícia de Segurança Pública"; fixAdd: "short_name=PSP"; } *[amenity = police][name =~ /^(?i)(?u)G(\.\s?|\s)?N(\.\s?|\s)?R(\.\s?|\s)?$/] { throwWarning: tr("PT2-Nome abreviado de Guarda Nacional Republicana"); fixAdd: "name=Guarda Nacional Republicana"; fixAdd: "short_name=GNR"; } *[amenity = bank][name =~ /^(?i)(?u)(Banco )?C(\.\s?|\s)?G(\.\s?|\s)?D(\.\s?|\s)?$/] { throwWarning: tr("PT2-Nome abreviado de Caixa Geral de Depósitos"); fixAdd: "name=Caixa Geral de Depósitos"; fixAdd: "short_name=CGD"; } *[amenity = bank][name =~ /(?i)(?u)Cai((cha) Ge(ne)?ral (de )?Dep[óo]sito|xa Ge(ne)?ral (de )?Deposito)/] { throwWarning: tr("PT2-O correto é Caixa Geral de Depósitos"); } *[amenity =~ /bank|atm/][operator =~ /^(?i)(?u)(Banco )?C(\.\s?|\s)?G(\.\s?|\s)?D(\.\s?|\s)?$/] { throwWarning: tr("PT2-operator abreviado de Caixa Geral de Depósitos"); fixAdd: "operator=Caixa Geral de Depósitos, S.A."; } *[amenity = bank][name =~ /^(?i)(?u)(Banco )?B(\.\s?|\s)?P(\.\s?|\s)?I(\.\s?|\s)?$/] { throwWarning: tr("PT2-Nome abreviado de Banco Português de Investimento"); fixAdd: "name=Banco Português de Investimento"; fixAdd: "short_name=BPI"; } *[amenity = bank][name =~ /^(?i)(?u)(Banco )?B(\.\s?|\s)?E(\.\s?|\s)?S(\.\s?|\s)?$/] { throwWarning: tr("PT2-Nome abreviado de Banco Espírito Santo"); fixAdd: "name=Banco Espírito Santo"; fixAdd: "short_name=BES"; } *[amenity = bank][name =~ /^(?i)(?u)(Banco )?B(\.\s?|\s)?B(\.\s?|\s)?V(\.\s?|\s)?A(\.\s?|\s)?$/] { throwWarning: tr("PT2-Nome abreviado de Banco Bilbao Vizcaya Argentaria"); fixAdd: "name=Banco Bilbao Vizcaya Argentaria"; fixAdd: "short_name=BBVA"; } *[amenity = bank][name =~ /^(?i)(?u)(Banco )?B(\.\s?|\s)?C(\.\s?|\s)?P(\.\s?|\s)?$/], *[amenity = bank][name =~ /^(Banco )?([Mm]ill?en?nium[Bb][Cc][Pp]|[Mm]ill?enn?i[ou]m?( B[Cc][Pp])?|Mil(en|le|e)nium BCP)$/] { throwWarning: tr("PT2-Nome abreviado ou errado de Millennium bcp"); fixAdd: "name=Millennium bcp"; fixAdd: "short_name=bcp"; fixAdd: "alt_name=Banco Comercial Português"; } *[name =~ /Banco Comercial Português/] { throwWarning: tr("PT2-O correto é Millennium bcp"); fixAdd: "name=Millennium bcp"; fixAdd: "short_name=bcp"; fixAdd: "alt_name=Banco Comercial Português"; } *[amenity = bank][name =~ /^(?i)(?u)(Banco )?(Santander|Tott?a|SantanderTott?a|Tott?a\s?Santander)$/] { throwWarning: tr("PT2-O correto é Santander Totta"); fixAdd: "name=Santander Totta"; } *[name =~ /(?i)(?u)Benett?o[mn]\b/][name !~ /\bUnited Colors\b/] { throwWarning: tr("PT2-O correto é United Colors of Benetton"); } *[amenity = bank][name =~ /^(?i)(?u)(Banco )?BANIF$/] { throwWarning: tr("PT2-Nome abreviado de Banco Internacional do Funchal"); fixAdd: "name=Banco Internacional do Funchal"; fixAdd: "short_name=Banif"; } *[shop=books][name =~ /^(?i)(?u)\bBiblioteca\b/] { throwWarning: tr("PT2-Biblioteca com etiqueta de livraria"); suggestAlternative: "amenity=library"; } *[amenity=library][name =~ /^(?i)(?u)\bLivraria\b/] { throwWarning: tr("PT2-Livraria com etiqueta de biblioteca"); suggestAlternative: "shop=books"; } *[!office][name =~ /^(?i)(?u)Associação/][name !~ /^(?i)(?u)\bAssociação Humanitária\b/] { throwWarning: tr("PT2-Associação sem etiqueta office=association"); fixAdd: "office=association"; } way[railway = rail][lanes][!tracks] { throwWarning: tr("PT2- railway não deve ter lanes mas sim tracks"); fixChangeKey: "lanes => tracks"; } *[amenity=grave_yard] { throwWarning: tr("PT2-Verificar: é muito raro sepulturas fora de cemitérios, usar cemetery"); } *[place][place != village][name =~ /^Freguesia\b/] { throwWarning: tr("PT2-A etiqueta de uma freguesia deve ser village"); fixAdd: "place=village"; } way[highway !~ /^(primary|trunk)/][name =~ /^(?i)(?u)(Estrada Nacional|EN)\s/], way[highway !~ /^(primary|trunk)/][ref =~ /^(?i)(?u)(E\.?)?N(\.|\s)?[0-9]{1,3}$/] { throwWarning: tr("PT2-Verificar: Estradas nacionais devem ser primárias/VR/IP/IC"); fixAdd: "highway=primary"; } way[highway !~ /^secondary/][name =~ /^(?i)(?u)(Estrada Regional|ER)\s/], way[highway !~ /^secondary/][ref =~ /^(?i)(?u)(E\.?)?R(\.|\s)?[0-9]{1,4}$/] { throwWarning: tr("PT2-Verificar: Estradas regionais devem ser secundárias"); fixAdd: "highway=secondary"; } way[highway !~ /^tertiary/][highway][name =~ /^(?i)(?u)((Estrada|Caminho) Municipal|EM|CM)\s/], way[highway !~ /^tertiary/][highway][ref =~ /^(?i)(?u)([EC]\.?)?M(\.|\s)?[0-9]{1,4}$/] { throwWarning: tr("PT2-Verificar: Estradas municipais devem ser terciárias"); fixAdd: "highway=tertiary"; } *[highway=mini_roundabout] { throwWarning: tr("PT2-Verificar: mini-rotundas são raras, será 1 rotunda?"); } node[junction=roundabout] { throwWarning: tr("PT2-Rotunda num nó, é melhor num círculo"); } node[amenity = place_of_worship] ∈ *[building] { throwWarning: tr("PT2- local de oração num nó, sobre 1 edifício"); } *[amenity=recycling][recycling_type != container][recycling_type != centre]{ throwWarning: tr("PT2- amenity=recycling sem recycling_type, se for ecoponto aplicar Corrigir, confirmar com imagens aéreas"); fixAdd: "amenity=recycling"; fixAdd: "recycling_type=container"; fixAdd: "recycling:aerosol_cans=yes"; fixAdd: "recycling:plastic_packaging=yes"; fixAdd: "recycling:plastic_bottles=yes"; fixAdd: "recycling:plastic_bags=yes"; fixAdd: "recycling:plastic=yes"; fixAdd: "recycling:paper=yes"; fixAdd: "recycling:glass_bottles=yes"; fixAdd: "recycling:cardboard=yes"; fixAdd: "recycling:cans=yes"; fixAdd: "recycling:glass=yes"; fixAdd: "recycling:aluminium=yes"; fixAdd: "recycling:books=yes"; fixAdd: "recycling:cartons=yes"; fixAdd: "recycling:fluorescent_tubes=no"; fixAdd: "recycling:low_energy_bulbs=no"; fixAdd: "recycling:magazines=yes"; fixAdd: "recycling:newspaper=yes"; fixAdd: "recycling:organic=no"; fixAdd: "recycling:PET=yes"; fixAdd: "recycling:beverage_cartons=yes"; } *[amenity != recycling][name =~ /(?i)(?u)\becoponto\b/][name !~ /(?i)(?u)\becoponto\s?(amarelo|verde|azul)\b/] { throwWarning: tr("PT2- ecoponto no nome mas sem etiqueta de ecoponto"); fixAdd: "amenity=recycling"; fixAdd: "recycling_type=container"; fixAdd: "recycling:aerosol_cans=yes"; fixAdd: "recycling:plastic_packaging=yes"; fixAdd: "recycling:plastic_bottles=yes"; fixAdd: "recycling:plastic_bags=yes"; fixAdd: "recycling:plastic=yes"; fixAdd: "recycling:paper=yes"; fixAdd: "recycling:glass_bottles=yes"; fixAdd: "recycling:cardboard=yes"; fixAdd: "recycling:cans=yes"; fixAdd: "recycling:glass=yes"; fixAdd: "recycling:aluminium=yes"; fixAdd: "recycling:books=yes"; fixAdd: "recycling:cartons=yes"; fixAdd: "recycling:fluorescent_tubes=no"; fixAdd: "recycling:low_energy_bulbs=no"; fixAdd: "recycling:magazines=yes"; fixAdd: "recycling:newspaper=yes"; fixAdd: "recycling:organic=no"; fixAdd: "recycling:PET=yes"; fixAdd: "recycling:beverage_cartons=yes"; } *[amenity != recycling][name =~ /(?i)(?u)\b(embalão|ecoponto amarelo)\b/] { throwWarning: tr("PT2- ecoponto no nome mas sem etiqueta de ecoponto amarelo, embalão"); fixAdd: "amenity=recycling"; fixAdd: "recycling_type=container"; fixAdd: "recycling:aerosol_cans=yes"; fixAdd: "recycling:plastic_packaging=yes"; fixAdd: "recycling:plastic_bottles=yes"; fixAdd: "recycling:plastic_bags=yes"; fixAdd: "recycling:plastic=yes"; fixAdd: "recycling:paper=yes"; fixAdd: "recycling:glass_bottles=yes"; fixAdd: "recycling:cardboard=yes"; fixAdd: "recycling:cans=yes"; fixAdd: "recycling:glass=yes"; fixAdd: "recycling:aluminium=yes"; fixAdd: "recycling:beverage_cartons=yes"; fixAdd: "recycling:PET=yes"; } *[amenity != recycling][name =~ /(?i)(?u)\b(papelão|ecoponto azul)\b/] { throwWarning: tr("PT2- ecoponto no nome mas sem etiqueta de ecoponto azul, papelão"); fixAdd: "amenity=recycling"; fixAdd: "recycling_type=container"; fixAdd: "recycling:paper=yes"; fixAdd: "recycling:cardboard=yes"; fixAdd: "recycling:books=yes"; fixAdd: "recycling:cartons=yes"; fixAdd: "recycling:magazines=yes"; fixAdd: "recycling:newspaper=yes"; fixAdd: "recycling:beverage_cartons=no"; } *[amenity != recycling][name =~ /(?i)(?u)\b(vidrão|ecoponto verde)\b/] { throwWarning: tr("PT2- ecoponto no nome mas sem etiqueta de ecoponto verde, vidrão"); fixAdd: "amenity=recycling"; fixAdd: "recycling_type=container"; fixAdd: "recycling:glass=yes"; fixAdd: "recycling:fluorescent_tubes=no"; fixAdd: "recycling:low_energy_bulbs=no"; } *[amenity != recycling][name =~ /(?i)(?u)\b(pilhão|ecoponto vermelho)\b/] { throwWarning: tr("PT2- pilhão no nome mas sem etiqueta de ecoponto"); fixAdd: "amenity=recycling"; fixAdd: "recycling_type=container"; fixAdd: "recycling:batteries=yes"; fixAdd: "recycling:car_batteries=no"; } *[recycling_type=centre][name =~ /(?i)(?u)\becoponto\b/] { throwWarning: tr("PT2-Ecoponto marcado erradamente como ecocentro"); fixAdd: "recycling_type=container"; } *[amenity != fire_station][name =~ /(?i)(?u)\b((Quartel dos )?Bombeiros|\bBatalhão|Sapadores)\b/][!highway][!aeroway][name !~ /(?i)(?u)\b(Parque|Estacionamento)\b/] { throwWarning: tr("PT2-Bombeiros deve ter amenity=fire_station"); fixAdd: "amenity=fire_station"; } *[phone][phone !~ /^\+351 [0-9]{3} [0-9]{3}[0-9]{3}((;\s?\+351 [0-9]{3} [0-9]{3}[0-9]{3})?)+$/], *["contact:phone"]["contact:phone" !~ /^\+351 [0-9]{3} [0-9]{3}[0-9]{3}((;\s?\+351 [0-9]{3} [0-9]{3}[0-9]{3})?)+$/], *[fax][fax !~ /^\+351 [0-9]{3} [0-9]{3}[0-9]{3}((;\s?\+351 [0-9]{3} [0-9]{3}[0-9]{3})?)+$/], *["contact:fax"]["contact:fax" !~ /^\+351 [0-9]{3} [0-9]{3}[0-9]{3}((;\s?\+351 [0-9]{3} [0-9]{3}[0-9]{3})?)+$/] { throwWarning: tr("PT2-Verificar:número de telefone/fax diferente de +351 NNN NNNNNN"); } way[highway != bus_stop]["addr:street" =~ /[0-9]{5,}$/], way[highway != bus_stop][name =~ /([0-9]{5,}|[0-9]{3,}\s[0-9]{3,}|[0-9]{4,}(-|\s?-\s?)[0-9]{3,})$/] { throwWarning: tr("PT2-Nome de rua c/números telf./cód.postal"); } way[highway][ref][ref =~ /^EN [0-9]?[4-9][0-9][0-9]/] { throwWarning: tr("PT2-Estradas Nacionais só existem de 1 a 398"); } way[highway][ref][ref =~ /^ER [0-9]?[4-9][0-9][0-9]/] { throwWarning: tr("PT2-Estradas Regionais só existem de 1 a 396"); } way[highway][ref][ref =~ /^IP [0-9][0-9]/] { throwWarning: tr("PT2-Intenerários Principais só existem de 1 a 9"); } way[highway][ref][ref =~ /^IC [0-9]?[4-9][0-9]/] { throwWarning: tr("PT2-Intenerários Complementares só existem de 1 a 37"); } /* nomes com valores que provavelmente deveriam estar em alt_name, short_name, etc */ *[/^(name|name:pt)$/ =~ /\(.*\)/][!bus_stop] { throwWarning: tr("PT2-Nome com parênteses", "{0.key}"); suggestAlternative: "alt_name"; suggestAlternative: "short_name"; suggestAlternative: "description"; suggestAlternative: "note"; } *[/^(name|name:pt)$/ =~ / - /] { throwWarning: tr("PT2-Nome com traço", "caso seja adequado {0.key}"); suggestAlternative: "alt_name"; suggestAlternative: "short_name"; suggestAlternative: "description"; } *[/^name|alt_name/ =~ /, /][name !~ /, (Lda|S\.A)\./] { throwWarning: tr("PT2-name ou alt_name com vírgula", "{0.key}"); suggestAlternative: "alt_name"; suggestAlternative: "short_name"; suggestAlternative: "description"; suggestAlternative: "note"; } *[/^(name|name:pt)$/ =~ /,\s?([Cc]\.?[Rr]\.?[Ll]|E\.?P|I\.P|L[Dd][Aa]|S\.A|Unip(essoal)?|UNIP(PESSOAL)?|[Ss]\.?[Gg]\.?[Pp]\.?[Ss])\.?/] { throwWarning: tr("PT2-Nome com designação comercial, use antes official_name e crie name sem a designação comercial"); fixChangeKey: "name => official_name"; } *[/^(name|name:pt)$/ =~ /: /] { throwWarning: tr("PT2-Nome com dois pontos", "{0.key}"); suggestAlternative: "alt_name"; suggestAlternative: "short_name"; suggestAlternative: "description"; suggestAlternative: "note"; } /* nome e referências iguais */ *[name = *ref][highway] { throwWarning: tr("PT2- {0} e {1} são iguais; adicionar nome completo da estrada", "{0.key}", "{0.value}"); } /* possui nome de rua mas não tem etiqueta de highway */ way[!highway][!railway][route != road][type !~ /route|street/][name][name =~ /^(?i)(?u)(Auto-?estrada|Avenida|Beco|Cais|Calçad(inh)?a|Caminho|Ciclovia|Escad(a|inha|aria)s?|Estrada\s?(Nacional|Regional|Municipal)?|Itinerário\s? (Complementar|Principal)?|Passeio|Rampa|Rotunda|Rua|Ruela|Transversal|Travessa|Trilho|Túnel|Variante|Via(-|\s)Rápida|Viadutos?|Viela)\b/][name !~ /^(?i)(?u)estrada de ferro/][route != ferry][!amenity] { throwWarning: tr("PT2-Verificar: com nome de via mas sem etiqueta de {0}", "{0.key}"); } *[highway][name =~ /^(?i)(?u)(Auto-?Estrada|Alameda|Avenida|Beco|Calçad(inh)?a|Caminho|Ciclovia|Escad(a|inha|aria)s?|Estrada\s?(Nacional|Regional|Municipal)?|Itinerário\s? (Complementar|Principal)?|Ladeira|Largo|Pátio|Pra(ç|cet)a|Rampa|Rotunda|Rua|Ruela|Transversal|Travessa|Terreiro|Trilho|Túnel|Variante|Vereda|Via(-Rápida)?|Viadutos?|Viela)( (de acesso|sem nome|projetad(a|o)|em construção))?$/] { throwWarning: tr("PT2-Via com nome incompleto"); } *[highway=service][name =~ /^(?i)(?u)(Auto-?Estrada|Alameda|Avenida|Beco|Calçad(inh)?a|Caminho|Ciclovia|Escad(a|inha|aria)s?|Estrada\s?(Nacional|Regional|Municipal)?|Itinerário\s? (Complementar|Principal)?|Ladeira|Largo|Pátio|Pra(ç|cet)a|Rampa|Rotunda|Rua|Ruela|Transversal|Travessa|Terreiro|Trilho|Túnel|Variante|Vereda|Via(-Rápida)?|Viadutos?|Viela)( (de acesso|sem nome|projetad(a|o)|em construção))?$/] { throwWarning: tr("PT2-Via pública erradamente de serviço"); } /* endereços com nome de via errado */ *["addr:street"]["addr:street" !~ /^((Adro|Alameda|Aldeamento|Alto|Arco|Autoparque|Avenida|Azinhaga|Bairro|Beco|Boqueirão|Burgal|Cabeço|Cais|Calçad(inh)?a|Caminho|Campo|Campus|Caracol|Casal|Circular|Colónia|Condomínio|Corredor|Costa|Cruz(es)?|Cunhal|Encosta|Escad(a|inha|aria)s?|Escolas|Esplanada|Estacada|Estrada|Grupos de Moradias Populares|Itinerário\s?|Jardi(m|ns)|Ladeira|Largo|Loteamento|Mercado|Miradouro|Monte|Outeirinho|Paço|Parada|Parque|Passeio|Pátio|Poço|Porta|Postigo|Pra(ç|cet)a|Praia|Quinta|Rampa|Regueirão|Rocha|Rossio|Rotunda|Rua|Ruela|Sítio|Telheiro|Terreiro|Transversal|Travessa|Urbanização|Variante|Vereda|Via(-Rápida)?|Viela|Vila)\b|Triste Feia)/] { throwWarning: tr("PT2- addr:street sem nome de via, errado, abreviado ou com maiúsculas"); } /* nome de vias sem logradouro correto */ *[highway][highway !~ /bridleway|bus_stop|cycleway|crossing|elevator|footway|give_way|motorway_junction|path|raceway|speed_camera|steps|stop/][name][name !~ /^((Adro|Alameda|Aldeamento|Alto|Arco|Auto-?[Ee]strada|Autoparque|Avenida|Azinhaga|Bairro|Beco|Boqueirão|Burgal|Cabeço|Cais|Calçad(inh)?a|Caminho|Campo|Campus|Caracol|Casal|Circular|Colónia|Condomínio|Corredor|Costa|Cruz(es)?|Cunhal|Encosta|Escad(a|inha|aria)s?|Escolas|Esplanada|Estacada|Estrada|Grupos de Moradias Populares|Itinerário\s?|Jardi(m|ns)|Ladeira|Largo|Loteamento|Mercado|Miradouro|Monte|Outeirinho|Paço|Parada|Parque|Passeio|Pátio|Poço|Ponte|Porta|Postigo|Pra(ç|cet)a|Quinta|Rampa|Regueirão|Rocha|Rossio|Rotunda|Rua|Ruela|Sítio|Telheiro|Terreiro|Transversal|Travessa|Trilho|Túnel|Urbanização|Variante|Vereda|Via(-Rápida)?|Viaduto|Viela|Vila)\b|Triste Feia)/] { throwWarning: tr("PT2- {0} sem nome de via, errado, abreviado ou maiúsculas no nome", "{0.key}"); } *[highway=cycleway][name][name !~ /^(?i)(?u)(ciclovia|ecopista|passeio|Pista (de )?Cicloturismo)/] { throwWarning: tr("PT2- Ciclovia sem nome de via, errado, abreviado ou maiúsculas no nome"); } way[highway][type = route] { throwWarning: tr("PT2- {0} não deve possuir {1}", "{0.key}", "{1.tag}"); } relation[type = route][highway] { throwWarning: tr("PT2-Relação não deve possuir {0}", "{1.key}"); } *[place = city][!name], *[place = town][!name], *[place = village][!name] { throwWarning: tr("PT2- {0} sem nome", "{0.value}"); } *[amenity =~ /^(school|college|kindergarten|driving_school)$/][name =~ /^(?i)(?u)\b(Academia da Força Aérea|Academia Militar|Academia Nacional Superior|Conservatório Superior|Faculdade|Escola d[eo] Serviço de Saúde Militar|Escola Náutica Infante|Escola Naval|Escola Superior|Escola Universitária|Instituto de Ciências Biomédicas|Instituto de Engenharia|Instituto Militar|Instituto Politécnico|Instituto Português de Administração|Instituto Superior|Instituto Universitário|Universidade)\b/] { throwWarning: tr("PT2-Verificar:estabelecimento de ensino errado"); suggestAlternative: "amenity=university"; fixAdd: "amenity=university"; } *[amenity =~ /^(university|college|kindergarten|driving_school)$/][name =~ /^(?i)(?u)\b(Escola|Agrupamento de Escolas|Liceu|Centro de Formação Profissional)\b/][name !~ /^(?i)(?u)\b(Escola d[eo] Serviço de Saúde Militar|Escola Náutica Infante|Escola Naval|Escola Superior|Escola Universitária|Escola (de )?Condução)\b/] { throwWarning: tr("PT2-Verificar:estabelecimento de ensino errado"); suggestAlternative: "amenity=school"; fixAdd: "amenity=school"; } *[amenity =~ /^(university|school|kindergarten|driving_school)$/][name =~ /^(?i)(?u)\b(Colégio|Internato|Real Colégio)\b/] { throwWarning: tr("PT2-Verificar:estabelecimento de ensino errado"); suggestAlternative: "amenity=college"; fixAdd: "amenity=college"; } *[amenity =~ /^(university|school|college|driving_school)$/][name =~ /^(?i)(?u)\b(creche|jardim infantil|jardim de infância|infantário|externato|pré-primária)\b/] { throwWarning: tr("PT2-Verificar:estabelecimento de ensino errado"); suggestAlternative: "amenity=kindergarten"; fixAdd: "amenity=kindergarten"; } *[amenity =~ /^(university|school|college|kindergarten)$/][name =~ /^(?i)(?u)\bEscola de Condução\b/] { throwWarning: tr("PT2-Verificar:estabelecimento de ensino errado"); suggestAlternative: "amenity=driving_school"; fixAdd: "{0.key}=driving_school"; } *[amenity = college] ∈ *[amenity = college] { throwWarning: tr("PT2- {0} dentro de {1}", "amenity=college", "{0.tag}"); } *[landuse = cemetery] ∈ *[landuse = cemetery] { throwWarning: tr("PT2- landuse=cemetery dentro de landuse = cemetery"); } *[shop] ∈ *[shop][shop !~ /mall|department_store|supermarket/][amenity!=fuel] { throwWarning: tr("PT2- shop dentro de shop"); } *[shop=supermarket] ∈ *[shop=supermarket] { throwWarning: tr("PT2- shop=supermarket dentro de shop=supermarket"); } *[amenity=police] ∈ *[amenity=police] { throwWarning: tr("PT2- amenity=police dentro de amenity=police"); } *[/^(name|name:pt)$/ =~ /(?i)(?u)\bPadandaria\b/][shop !~ /bakery/], *[/^(name|name:pt)$/ =~ /(?i)(?u)\b(Cabeleireir[ao]|Barbe(iro|aria))\b/][shop !~ /hairdresser/], *[/^(name|name:pt)$/ =~ /(?i)(?u)\bCentro de Cópias\b/][shop !~ /copyshop/], *[/^(name|name:pt)$/ =~ /(?i)(?u)\bPeixaria\b/][shop !~ /seafood/], *[/^(name|name:pt)$/ =~ /(?i)(?u)\bLoja (de )?(Tecidos|Têxteis)\b/][shop !~ /fabric/], *[/^(name|name:pt)$/ =~ /(?i)(?u)\b(Informática|Chip7)\b/][shop !~ /computer/], *[/^(name|name:pt)$/ =~ /(?i)(?u)\b(Salão de Beleza|Nails|Manicure|Pedicure|Estética)\b/][shop !~ /beauty/], *[/^(name|name:pt)$/ =~ /(?i)(?u)\bMassage(m|ns)\b/][shop !~ /massage/], *[/^(name|name:pt)$/ =~ /(?i)(?u)\b(Body Shop|Boticário|Sephora)\b/][shop !~ /cosmetics/], *[/^(name|name:pt)$/ =~ /(?i)(?u)\b(Decoraç(ão|ões)|Zara Home)\b/][shop !~ /interior_decoration/], *[/^(name|name:pt)$/ =~ /(?i)(?u)\bFlorista\b/][shop !~ /florist/], *[/^(name|name:pt)$/ =~ /(?i)(?u)\b(Lavandaria|5 à Sec)\b/][shop !~ /laundry/], *[/^(name|name:pt)$/ =~ /^(?i)(?u)Loja de Animais/][shop !~ /pet/], *[/^(name|name:pt)$/ =~ /^(?i)(?u)(videoclube|clube de video)/][shop !~ /video/], *[/^(name|name:pt)$/ =~ /^(?i)(?u)intrumentos musicais/][shop !~ /musical_instrument/], *[/^(name|name:pt)$/ =~ /^(?i)(?u)Galeria de Arte/][shop !~ /art/], *[/^(name|name:pt)$/ =~ /^(?i)(?u)Artigos Desportivos/][shop !~ /sports/], *[/^(name|name:pt)$/ =~ /^(?i)(?u)(Loja de Caça|Artigos (de |para )? Caça|\bCaça\b)/][shop !~ /hunting/], *[/^(name|name:pt)$/ =~ /^(?i)(?u)(Loja de Pesca|Artigos (de |para )? Pesca|\bPesca\b)/][shop !~ /fishing/], *[/^(name|name:pt)$/ =~ /^(?i)(?u)Peças (de |para )? Auto/][shop !~ /car_parts/], *[/^(name|name:pt)$/ =~ /^(?i)(?u)\bGela(taria|dos)\b/][shop !~ /ice_cream/], *[/^(name|name:pt)$/ =~ /^(?i)(?u)\bRetrosaria\b/][shop !~ /sewing/], *[/^(name|name:pt)$/ =~ /^(?i)(?u)\b(Móveis|Moviflor)/][shop !~ /furniture/], *[/^(name|name:pt)$/ =~ /^(?i)(?u)Antiguidades/][shop !~ /antiques/], *[/^(name|name:pt)$/ =~ /^(?i)(?u)Materia(is|l) (de |para )? Contrução/][shop !~ /antiques/], *[/^(name|name:pt)$/ =~ /^(?i)(?u)Material Elétrico/][shop !~ /electrical/], *[/^(name|name:pt)$/ =~ /^(?i)(?u)Viveiros/][shop !~ /garden_centre/], *[/^(name|name:pt)$/ =~ /^(?i)(?u)Ferragens/][shop !~ /hardware/], *[/^(name|name:pt)$/ =~ /^(?i)(?u)Tatuage(m|ns)/][shop !~ /tattoo/], *[/^(name|name:pt)$/ =~ /^(?i)(?u)Perfum(aria|es)/][shop !~ /perfumery/], *[/^(name|name:pt)$/ =~ /^(?i)(?u)([ÓO]p?tica?|Instituto Óptico|Multiopticas|Optivisão|Oculista)/][shop !~ /optician/], *[/^(name|name:pt)$/ =~ /^(?i)(?u)\bEr[óo]tic[oa]?/][shop !~ /erotic/], *[/^(name|name:pt)$/ =~ /^(?i)(?u)(2ª Mão|Segunda Mão|Artigos Usados)/][shop !~ /second_hand/], *[/^(name|name:pt)$/ =~ /^(?i)(?u)Loja de Tecidos/][shop !~ /fabric/], *[/^(name|name:pt)$/ =~ /^(?i)(?u)\b(Roupas?|Pronto[- ]a[- ]Vestir)\b/][shop !~ /clothes/], *[/^(name|name:pt)$/ =~ /^(?i)(?u)\b(Bershka|C&A|Calvin Klein|Camel|Cortefiel|Foreva|Gant|Guess|H&M|Hugo Boss|Lanidor|Mango|Massimo Dutti|Pull and Bear|RockPort|Sacoor|Springfield|Tiffosi|Tommy Hilfiger|United Colors of Benetton|Zara)\b/][shop !~ /clothes/], *[/^(name|name:pt)$/ =~ /^(?i)(?u)\b(Ana Salazar|Fátima Lopes|Katty Xiomara|Luís Buchinho|Maria Gambina|Miguel Vieira|Nuno Gama)\b/][shop !~ /fashion/], *[/^(name|name:pt)$/ =~ /^(?i)(?u)\b(Malas?|Paco Martinez)\b/][shop !~ /bag/], *[/^(name|name:pt)$/ =~ /^(?i)(?u)\b(Brinquedos|Imaginarium)\b/][shop !~ /toys/], *[/^(name|name:pt)$/ =~ /^(?i)(?u)(Livraria|Bertrand)/][shop !~ /books/], *[/^(name|name:pt)$/ =~ /^(?i)(?u)\bB[ée]b[ée]\b/][shop !~ /baby_goods/], *[/^(name|name:pt)$/ =~ /^(?i)(?u)\bVinhos?\b/][shop !~ /wine/], *[/^(name|name:pt)$/ =~ /^(?i)(?u)\b(Tapeçaria|Carpete)s?\b/][shop !~ /carpet/], *[/^(name|name:pt)$/ =~ /^(?i)(?u)(\bFrutas?\b|Frutaria|Legumes)/][shop !~ /greengrocer/], *[/^(name|name:pt)$/ =~ /^(?i)(?u)Gourmet/][shop !~ /deli/], *[/^(name|name:pt)$/ =~ /^(?i)(?u)Conveniência/][shop !~ /convenience/], *[/^(name|name:pt)$/ =~ /^(?i)(?u)(Bebidas|Garrafeira)/][shop !~ /beverages/], *[/^(name|name:pt)$/ =~ /^(?i)(?u)Pneus/][shop !~ /tyres/], *[/^(name|name:pt)$/ =~ /(?i)(?u)\bDroguaria\b/][shop !~ /chemist/], *[/^(name|name:pt)$/ =~ /(?i)(?u)\b((Agência de )?Viagens|Top Atlântico)\b/][shop !~ /travel_agency/], *[/^(name|name:pt)$/ =~ /(?i)(?u)\b(Agência\s)?Funerária\b/][shop !~ /funeral_directors/], *[/^(name|name:pt)$/ =~ /^(?i)(?u)\b(Elec?trodomésticos|Rádio Popular|Worten|MediaMarkt)/][shop !~ /electronics/], *[/^(name|name:pt)$/ =~ /^(?i)(?u)\b(Izi Build|\bAki\b)/][shop !~ /doityourself/], *[/^(name|name:pt)$/ =~ /^(?i)(?u)(Papelaria|Staples)/][shop !~ /stationery/], *[/^(name|name:pt)$/ =~ /(Loja (Social|Solid[áa]ria)|EMA[ÚU]S|\bREMAR\b)/][shop !~ /charity/], *[/^(name|name:pt)$/ =~ /^(?i)(?u)\b(Corte Ingl[êe]s|FNAC|IKEA)\b/][shop !~ /department_store/], *[/^(name|name:pt)$/ =~ /^(?i)(?u)\b(Recheio|Makro|António Teixeira Lopes)\b/][shop !~ /wholesale/], *[/^(name|name:pt)$/ =~ /^(?i)(?u)\b(Decathlon|Sport Zone)\b/][shop !~ /sports/] { throwWarning: tr("PT2-Shop rovavelmente deveria ser {0}={1}", "{1.key}", "{1.value}"); fixAdd: "{1.key}={1.value}"; } *[/^(name|name:pt)$/ =~ /(?i)(?u)(Centro )?((de )?Inspec?ç(ão|ões)|Inspec?tor|Inspec?ção (Periódica )?de Veículos)/][amenity !~ /vehicle_inspection/], *[/^(name|name:pt)$/ =~ /(?i)(?u)\bHelipo[rn]to?\b/][aeroway !~ /helipad/], *[/^(name|name:pt)$/ =~ /^(?i)(?u)Sub-?estação/][power !~ /substation/], *[/^(name|name:pt)$/ =~ /^(?i)(?u)(Centro|Pavilhão) Comunitário/][amenity !~ /community_centre/], *[/^(name|name:pt)$/ =~ /(?i)(?u)\bMotel\b/][tourism !~ /motel/], *[/^(name|name:pt)$/ =~ /(?i)(?u)\bViveiros\b/][landuse !~ /plant_nursery/], *[/^(name|name:pt)$/ =~ /(?i)(?u)\bAterro\b/][landuse !~ /landfill/], *[/^(name|name:pt)$/ =~ /(?i)(?u)\bSalinas?\b/][landuse !~ /salt_pond/], *[/^(name|name:pt)$/ =~ /^(?i)(?u)\b(Tipografia|Gráfica|Serigrafia)\b/][amenity !~ /printer/], *[/^(name|name:pt)$/ =~ /^(?i)(?u)Metere?ol[óo][gj]ica/][man_made !~ /monitoring_station/], *[/^(name|name:pt)$/ =~ /^(?i)(?u)Chamin[ée]/][man_made !~ /chimney/], *[/^(name|name:pt)$/ =~ /^(?i)(?u)pipeline/][man_made !~ /pipeline/], *[/^(name|name:pt)$/ =~ /^(?i)(?u)\bSilos?\b/][man_made !~ /silo/], *[/^(name|name:pt)$/ =~ /^(?i)(?u)Moinhos? (de |a |movido a |d')?[ÁA]gua/][man_made !~ /watermill/], *[/^(name|name:pt)$/ =~ /^(?i)(?u)Moinhos? (de |a |movido a |d')?Vento/][man_made !~ /windmill/], *[/^(name|name:pt)$/ =~ /(?i)(?u)\b(E\.?T\.?A\.?R\.?|Estação de Tratamento de Águas Residuais)\b/][man_made !~ /wastewater_plant/], *[/^(name|name:pt)$/ =~ /^(?i)(?u)\bForte\b/][historic !~ /fort/], *[/^(name|name:pt)$/ =~ /^(?i)(?u)memorial/][historic !~ /memorial/], *[/^(name|name:pt)$/ =~ /^(?i)(?u)Mosteiro/][!amenity][historic !~ /monastery/], *[/^(name|name:pt)$/ =~ /^(?i)(?u)t[úu]mulo/][historic !~ /tomb/], *[/^(name|name:pt)$/ =~ /(?i)(?u)\b(Polícia|G\.?N\.?R\.?|P\.?S\.?P\.?|Esquadra)\b/][amenity !~ /police/], *[/^(name|name:pt)$/ =~ /(?i)(?u)\b(Cinema|Lusomundo)\b/][amenity !~ /cinema/], *[/^(name|name:pt)$/ =~ /^(?i)(?u)Parque (de )?Campismo\b/][tourism !~ /camp_site/], *[/^(name|name:pt)$/ =~ /^(?i)(?u)Catedral/][building !~ /cathedral/], *[/^(name|name:pt)$/ =~ /^(?i)(?u)Mesquita/][building !~ /mosque/], *[/^(name|name:pt)$/ =~ /^(?i)(?u)Sinagoga/][building !~ /synagogue/], *[/^(name|name:pt)$/ =~ /^(?i)(?u)Sapateiro/][craft !~ /shoemaker/], *[/^(name|name:pt)$/ =~ /^(?i)(?u)Carpint(eiro|aria)/][craft !~ /carpenter/], *[/^(name|name:pt)$/ =~ /^(?i)(?u)Ferreiro/][craft !~ /blacksmith/], *[/^(name|name:pt)$/ =~ /^(?i)(?u)Eletricista/][craft !~ /electrician/], *[/^(name|name:pt)$/ =~ /^(?i)(?u)Serralh(eiro|aria)/][craft !~ /metal_construction/], *[/^(name|name:pt)$/ =~ /^(?i)(?u)(Picheleiro|Canalisador)/][craft !~ /plumber/], *[/^(name|name:pt)$/ =~ /^(?i)(?u)(Alfaiate|Costureira)/][craft !~ /tailor/], *[/^(name|name:pt)$/ =~ /^(?i)(?u)Catt?ering/][craft !~ /caterer/], *[/^(name|name:pt)$/ =~ /^(?i)(?u)(Construçáo Naval|(Construtor(es)?|Estaleiros?) Nava(l|is))/][craft !~ /boatbuilder/], *[/^(name|name:pt)$/ =~ /^(?i)(?u)Espírita/][denomination !~ /spiritist/], *[/^(name|name:pt)$/ =~ /^(?i)(?u)Adventista/][denomination !~ /seventh_day_adventist/], *[/^(name|name:pt)$/ =~ /^(?i)(?u)Anglicana/][denomination !~ /anglican/], *[/^(name|name:pt)$/ =~ /^(?i)(?u)Igreja Bap?tista/][denomination !~ /baptist/], *[/^(name|name:pt)$/ =~ /^(?i)(?u)Evangélica/][denomination !~ /evangelical/], *[/^(name|name:pt)$/ =~ /^(?i)(?u)Metodista/][denomination !~ /methodist/], *[/^(name|name:pt)$/ =~ /^(?i)(?u)M[óo]rmon/][denomination !~ /mormon/], *[/^(name|name:pt)$/ =~ /^(?i)(?u)Testemunhas de Jeová/][denomination !~ /jehovahs_witness/], *[/^(name|name:pt)$/ =~ /^(?i)(?u)sucat(a|eiro)/][industrial !~ /auto_wrecker/], *[/^(name|name:pt)$/ =~ /^(?i)(?u)\b(W\.?C\.?|Casas?(de )? Banho)\b/][amenity !~ /toilets/], *[/^(name|name:pt)$/ =~ /^(?i)(?u)\bCoreto\b/][leisure !~ /bandstand/] { throwWarning: tr("PT2-Provavelmente deveria ser {0}={1}", "{1.key}", "{1.value}"); fixAdd: "{1.key}={1.value}"; } *[/^(name|name:pt|note|description)$/ =~ /(?i)(?u)Artesanato/][shop !~ /craft/][!highway][!railway][!boundary][!place] { throwWarning: tr("PT2-Loja de artesanato deve ter shop=craft"); fixAdd: "shop=craft"; } *[/^(name|name:pt|note|description)$/ =~ /(?i)(?u)Velas/][shop = yes][shop !~ /candles/] { throwWarning: tr("PT2-Loja de velas deve ter shop=candles"); fixAdd: "shop=candles"; } *[/^(name|name:pt)$/ =~ /^(?i)(?u)Discoteca/][amenity != nightclub] { throwWarning: tr("PT2-Provavelmente deveria ser {0}={1}", "{1.key}", "{1.value}"); fixAdd: "{1.key}={1.value}"; } *[/^(name|name:pt)$/ =~ /(?i)(?u)\b(casa das )?Tintas\b/][shop][shop != paint] { throwWarning: tr("PT2-Loja de tintas deve ter shop=paint"); fixAdd: "shop=paint"; } *[/^(name|name:pt)$/ =~ /(?i)(?u)\bArmazém\b/][building][building != warehouse][!highway][!boundary][!place][!shop] { throwWarning: tr("PT2-Edifício utilizado como armazém deve ter building=warehouse"); fixAdd: "building=warehouse"; } node[name =~ /(?i)(?u)(Candeeiro|Poste) (de )?(Iluminação|Elec?tricidade)/][highway != street_lamp][!boundary][!place] { throwWarning: tr("PT2-Poste de Iluminação deve ter highway=street_lamp"); fixAdd: "highway=street_lamp"; } *[man_made=street_lamp] { throwWarning: tr("PT2-Etiqueta errada de poste de iluminação, deve ser highway=street_lamp"); fixChangeKey: "man_made => highway"; } node[amenity=street_lamp][!boundary][!place] { throwWarning: tr("PT2-Poste de Iluminação deve ter highway=street_lamp e não amenity=street_lamp"); fixChangeKey: "amenity => highway"; } *[/^(name|name:pt)$/ =~ /(?i)(?u)\b(Iluminação|Candee?iros)\b/][name !~ /(?i)(?u)(Candeeiro|Poste) (de )?Iluminação/][shop != lamps][!highway][!boundary][!place] { throwWarning: tr("PT2-Loja de candeeiros deve ter shop=lamps"); fixAdd: "shop=lamps"; } *[/^(name|name:pt)$/ =~ /(?i)(?u)\b(Sapataria|Rockport)\b/][shop != shoes][!highway][!boundary][!place] { throwWarning: tr("PT2-Sapataria deve ter shop=shoes"); fixAdd: "shop=shoes"; } *[/^(name|name:pt)$/ =~ /(?i)(?u)\b(Nike|Adidas|ASICS|FILA|Puma|Reebok)\b/][shop != shoes][shoes != sport][!highway][!boundary][!place] { throwWarning: tr("PT2-Loja de sapatilhas deve ter shop=shoes e shoes=sport"); fixAdd: "shop=shoes"; fixAdd: "shoes=sport"; } *[/^(name|name:pt)$/ =~ /(?i)(?u)\b(Relógios|Boutique dos Relógios)\b/][shop != watches][!highway][!boundary][!place] { throwWarning: tr("PT2-Talho deve ter shop=watches"); fixAdd: "shop=watches"; } *[/^(name|name:pt)$/ =~ /^(?i)(?u)talho/][shop != butcher][!highway][!boundary][!place] { throwWarning: tr("PT2-Talho deve ter shop=butcher"); fixAdd: "shop=butcher"; } *[/^(name|name:pt)$/ =~ /^(?i)(?u)monumento/][historic != monument][!highway][!boundary][!place][!shop] { throwWarning: tr("PT2-Monumento deve ter historic=monument"); fixAdd: "historic=monument"; } *[/^(name|name:pt)$/ =~ /^(?i)(?u)Serração/][craft != sawmill][!highway][!boundary][!place] { throwWarning: tr("PT2-Serração deve ter craft=sawmill"); fixAdd: "craft=sawmill"; } *[/^(name|name:pt)$/ =~ /(?i)(?u)\b(Represa|Açude)\b/][waterway != weir][!highway][!boundary][!place][!shop] { throwWarning: tr("PT2-Represa ou Açude deve ter waterway=weir"); fixAdd: "waterway=weir"; } *[/^(name|name:pt)$/ =~ /^(?i)(?u)(Queda de Água|Cascata|Catarata)s?\b/][waterway != waterfall][!highway][!boundary][!place][!shop] { throwWarning: tr("PT2-Queda de Água, Cascata ou Catarata deve ter waterway=waterfall"); fixAdd: "waterway=waterfall"; } *[/^(name|name:pt)$/ =~ /^(?i)(?u)Barragem\b/][waterway != dam][!highway][!boundary][!place][!shop] { throwWarning: tr("PT2-Barragem deve ter waterway=dam"); fixAdd: "waterway=dam"; } *[/^(name|name:pt)$/ =~ /^(?i)(?u)Albufeira\b/][natural != water][!highway][!boundary][!place][!shop], *[/^(name|name:pt)$/ =~ /^(?i)(?u)Albufeira\b/][water != reservoir][!highway][!boundary][!place][!shop] { throwWarning: tr("PT2-Albufeira deve ter water=reservoir e natural=water"); fixAdd: "water=reservoir"; fixAdd: "natural=water"; } *[/^(name|name:pt)$/ =~ /^(?i)(?u)\b(Pingo Doce|Minipreço|Continente|\bModelo\b|\bJumbo\b|Carrefour|Pão de Açúcar|E\.Leclerc|Intermarché|Hipermercado|Supermercado|mini[- ]?mercado|Mercearia)\b/][shop != supermarket][amenity != fuel][!highway][!railway][!boundary][!place] { throwWarning: tr("PT2-Mini, Super e Hipermercados devem ter shop=supermarket"); fixAdd: "shop=supermarket"; } *[/^(name|name:pt)$/ =~ /^(?i)(?u)(pelourinho|picota)/][historic != pillory][!highway][!railway][!boundary][!place][!shop] { throwWarning: tr("PT2-Pelorinho devem ter historic=pillory"); fixAdd: "historic=pillory"; } *[/^(name|name:pt)$/ =~ /^(?i)(?u)(Centro|Pavilhão|Parque) de Exposições/][amenity != exhibition_centre][amenity != convention_centre][amenity != convention_centre][!highway][!railway][!boundary][!place] { throwWarning: tr("PT2-Parque de Exposições e similares devem ter amenity=exhibition_centre"); fixAdd: "amenity=exhibition_centre"; } *[/^(name|name:pt)$/ =~ /^(?i)(?u)(Centro|Pavilhão|Parque) de (Convenções|Congressos)/][amenity != convention_centre][amenity != exhibition_centre][!highway][!railway][!boundary][!place] { throwWarning: tr("PT2-Centro de Congressos e similares devem ter amenity=convention_centre"); fixAdd: "amenity=convention_centre"; } *[/^(name|name:pt)$/ =~ /(?i)(?u)\b(Joalh[ae]ria|Ourives|Ourivesaria|Pandora)\b/][shop != jewelry][!highway][!railway][!boundary][!place] { throwWarning: tr("PT2-Ouriversaria deve ter shop=jewelry"); fixAdd: "shop=jewelry"; } *[/^(name|name:pt)$/ =~ /^(?i)(?u)Casa do Povo/][amenity != community_centre][!highway][!railway][!boundary][!place][!shop] { throwWarning: tr("PT2-Casa do Povo deve ter amenity=community_centre"); fixAdd: "amenity=community_centre"; } *[/^(name|name:pt)$/ =~ /^(?i)(?u)Seminário/][amenity != school][!highway][!boundary][!place][!shop] { throwWarning: tr("PT2-Seminário deve ter amenity=school"); fixAdd: "amenity=school"; } *[/^(name|name:pt)$/ =~ /^(?i)(?u)(Centro|Escola) de Formação/][amenity != school][!highway][!boundary][!place] { throwWarning: tr("PT2-Centro ou Escola de Formação deve ter amenity=school"); fixAdd: "amenity=school"; } *[/^(name|name:pt)$/ =~ /(?i)(?u)(Restaurante?|Petis(cos|queira|\bTasc[ao]\b))/][amenity != restaurant][!highway][!boundary][!place][name !~ /(?i)(?u)\b(Parque|Estacionamento)\b/] { throwWarning: tr("PT2-Restaurante ou similar deve ter amenity=restaurant"); fixAdd: "amenity=restaurant"; } *[/^(name|name:pt)$/ =~ /(?i)(?u)\b(Centro Comercial|Shopp?ing Cent(er|re))\b/][shop != mall][!highway][name !~ /(?i)(?u)\b(Parque|Estacionamento)\b/][!boundary][!place] { throwWarning: tr("PT2-Centro Comercial deve ter shop=mall"); fixAdd: "craft=mall"; } *[/^(name|name:pt)$/ =~ /(?i)(?u)\b(ZON|MEO|NOS|Cabovisão|Vodafone)\b/][name][office!=telecommunication][shop!=mobile_phone][man_made!=tower] { throwWarning: tr("PT2-Verificar: pode ser shop=mobile_phone ou office=telecommunication e function=retail"); } *[/^(name|name:pt)$/ =~ /^(?i)(?u)(Telemóve(l|is)|The Phone House|Ensitel|Worten Mobile)/][shop!=mobile_phone][man_made!=tower] { throwWarning: tr("PT2-Loja de telemóveis deve ter shop=mobile_phone"); fixAdd: "shop=mobile_phone"; } *[/^(name|name:pt)$/ =~ /(?i)(?u)Material Elec?trónico/][shop!=radiotechnics] { throwWarning: tr("PT2-Loja de material eletrónico deve ter shop=radiotechnics"); fixAdd: "shop=radiotechnics"; } *[/^(name|name:pt)$/ =~ /^(?i)(?u)Café\b/][amenity !~ /cafe|restaurant/][!highway][name !~ /(?i)(?u)\b(Parque|Estacionamento)\b/][!boundary][!place] { throwWarning: tr("PT2-Café deve ter amenity=cafe"); fixAdd: "amenity=cafe"; } *[/^(name|name:pt)$/ =~ /^(?i)(?u)Pint(or|uras)/][craft != painter][!highway][!boundary][!place] { throwWarning: tr("PT2-Pintor deve ter craft=painter"); fixAdd: "craft=painter"; } *[/^(name|name:pt)$/ =~ /(?i)(?u)\bTeatro\b/][amenity != theatre][name !~ /(?i)(?u)\bCine(-| )?Teatro\b/][!highway][!boundary][!place][!shop] { throwWarning: tr("PT2-Teatro deve ter amenity=theatre"); fixAdd: "amenity=theatre"; } *[/^(name|name:pt)$/ =~ /(?i)(?u)\b(Prisão|Prisional)\b/][amenity != prison][!highway][!boundary][!place][!shop] { throwWarning: tr("PT2-Prisão deve ter amenity=prison"); fixAdd: "amenity=prison"; } *[/^(name|name:pt)$/ =~ /(?i)(?u)\b(Embaixada|Consulado)\b/][amenity != embassy][!highway][!boundary][!place][!shop] { throwWarning: tr("PT2-Embaixada e Consulado deve ter amenity=embassy"); fixAdd: "amenity=embassy"; } *[/^(name|name:pt)$/ =~ /(?i)(?u)\bCemitério\b/][landuse != cemetery][!highway][name !~ /(?i)(?u)\b(Parque|Estacionamento)\b/][!boundary][!place] { throwWarning: tr("PT2-Cemitério deve ter landuse=cemetery"); fixAdd: "landuse=cemetery"; } *[/^(name|name:pt)$/ =~ /(?i)(?u)\bPraia\b/][name !~ /(?i)(?u)\b(Parque|Estacionamento|Futebol( de)? Praia)\b/][natural != beach][!highway][!shop][!craft][!amenity][!route][!boundary][!place][!shop] { throwWarning: tr("PT2-Praia deve ter natural=beach"); fixAdd: "natural=beach"; } *[/^(name|name:pt)$/ =~ /(?i)(?u)\bBiblioteca?\b/][amenity != library][!highway][!boundary][!place][!shop][!craft][name !~ /(?i)(?u)\b(Parque|Estacionamento)\b/] { throwWarning: tr("PT2-Biblioteca deve ter amenity=library"); fixAdd: "amenity=library"; } *[landuse][landuse != vineyard][name =~ /(?i)(?u)\bVinhas?\b/] { throwWarning: tr("PT2-Vinha deve ter landuse=vineyard"); fixAdd: "landuse=vineyard"; } *[/^(name|name:pt)$/ =~ /^(?i)(?u)(Aparthotel|Hotel|Residencial|Pensão)/][tourism != hotel][name !~ /(?i)(?u)\b(Parque|Estacionamento)\b/][!boundary][!place] { throwWarning: tr("PT2-Aparthotel, Hotel, Residencial e Pensão deve ter tourism=hotel"); fixAdd: "tourism=hotel"; } *[/^(name|name:pt)$/ =~ /^(?i)(?u)(Aparthotel|Hotel|Residencial|Pensão)/][building][building != hotel][name !~ /(?i)(?u)\b(Parque|Estacionamento)\b/][!boundary][!place] { throwWarning: tr("PT2-Edifício de Aparthotel, Hotel, Residencial e Pensão deve ter building=hotel"); fixAdd: "building=hotel"; } *[waterway][waterway !~ /river|riverbank|canal/][name =~ /(?i)(?u)Rio/] { throwWarning: tr("PT2-Rio deve ter waterway=river, riverbank ou canal"); fixAdd: "waterway=river"; } *[waterway][waterway != stream][name =~ /(?i)(?u)\bRibeir[oa]\b/] { throwWarning: tr("PT2-Ribeira deve ter waterway=stream"); fixAdd: "waterway=stream"; } *[waterway][waterway != canal][name =~ /(?i)(?u)\bCanal\b/] { throwWarning: tr("PT2-Canal deve ter waterway=canal"); fixAdd: "waterway=canal"; } *[/^(name|name:pt)$/ =~ /(Miradouro|Vista Panorâmica)/][tourism!=viewpoint][!highway][!shop][!craft][!amenity][!boundary][!place][!shop] { throwWarning: tr("PT2- Miradouro deve ter tourism=viewpoint"); fixAdd: "tourism=viewpoint"; } *[/^(name|name:pt)$/ =~ /\bHostel\b/][!highway][tourism!=hostel] { throwWarning: tr("PT2- Hostel deve ter tourism=hostel"); fixAdd: "tourism=hostel"; } *[/^(name|name:pt)$/ =~ /^(?i)(?u)\bMuseu\b/][tourism != museum][!highway][!shop][!craft][!amenity][name !~ /(?i)(?u)\b(Parque|Estacionamento)\b/][!boundary][!place] { throwWarning: tr("PT2- Museu deve ter tourism=museum"); fixAdd: "tourism=museum"; } *[/^(name|name:pt)$/ =~ /(?i)(?u)\bPedreira\b/][landuse != quarry][!highway][!shop][!craft][!amenity][!boundary][!boundary][!place][!shop] { throwWarning: tr("PT2- Pedreira deve ter landuse=quarry"); fixAdd: "landuse=quarry"; } way[highway][!bridge][name =~ /^Ponte/] { throwWarning: tr("PT2-Nome Ponte mas sem etiqueta de ponte"); fixAdd: "bridge=yes"; fixAdd: "layer=1"; } *[/^(name|name:pt)$/ =~ /^(Quebra-mar|Pontão)/][!man_made=breakwater][!highway][!boundary][!place][!shop] { throwWarning: tr("PT2-Pontão deve ter etiqueta man_made=breakwater"); fixAdd: "man_made=breakwater"; } *[/^(name|name:pt)$/ =~ /^(?i)(?u)Igreja\b/][building != church][name !~ /(?i)(?u)\b(Parque|Estacionamento)\b/][!highway][!boundary][!place][!shop][!amenity], *[/^(name|name:pt)$/ =~ /^(?i)(?u)Igreja\b/][building != church][name !~ /(?i)(?u)\b(Parque|Estacionamento)\b/][!highway][!boundary][!place][!shop][amenity=place_of_worship] { throwWarning: tr("PT2- Igreja deve ter building=church"); fixAdd: "building=church"; } *[/^(name|name:pt)$/ =~ /^(?i)(?u)Igreja (Matriz|Paroquial)/][building != church][name !~ /(?i)(?u)\b(Parque|Estacionamento)\b/][!highway][!boundary][!place][!shop], *[/^(name|name:pt)$/ =~ /^(?i)(?u)Igreja (Matriz|Paroquial)/][religion != christian][name !~ /(?i)(?u)\b(Parque|Estacionamento)\b/][!highway][!boundary][!place][!shop], *[/^(name|name:pt)$/ =~ /^(?i)(?u)Igreja (Matriz|Paroquial)/][amenity != place_of_worship][name !~ /(?i)(?u)\b(Parque|Estacionamento)\b/][!highway][!boundary][!place][!shop], *[/^(name|name:pt)$/ =~ /^(?i)(?u)Igreja (Matriz|Paroquial)/][denomination != roman_catholic][name !~ /(?i)(?u)\b(Parque|Estacionamento)\b/][!highway][!boundary][!place][!shop] { throwWarning: tr("PT2-Igreja deve ter building=church religion=christian, denomination=roman_catholic e amenity=place_of_worship"); fixAdd: "building=church"; fixAdd: "religion=christian"; fixAdd: "denomination=roman_catholic"; fixAdd: "amenity=place_of_worship"; } *[/^(name|name:pt)$/ =~ /^Capela/][building != chapel][!highway][!boundary][!boundary][!place][!shop], *[/^(name|name:pt)$/ =~ /^Capela/][religion != christian][!highway][!boundary][!boundary][!place][!shop], *[/^(name|name:pt)$/ =~ /^Capela/][amenity != place_of_worship][!highway][!boundary][!boundary][!place][!shop], *[/^(name|name:pt)$/ =~ /^Capela/][denomination != roman_catholic][!highway][!boundary][!boundary][!place][!shop] { throwWarning: tr("PT2-Capela deve ter building=chapel religion=christian, denomination=roman_catholic e amenity=place_of_worship"); fixAdd: "building=chapel"; fixAdd: "religion=christian"; fixAdd: "denomination=roman_catholic"; fixAdd: "amenity=place_of_worship"; } *[shop = yes]{ throwWarning: tr("PT2-Etiqueta shop=yes deve ser mais específica"); } *[/^(name|name:pt)$/ =~ /(?i)(?u)\b(Clínica Veterinária|Veterinário)\b/][amenity != veterinary][!shop] { throwWarning: tr("PT2-Verificar: Clínica Veterinária deve ter amenity=veterinary"); fixAdd: "amenity=veterinary"; } *[/^(name|name:pt)$/ =~ /(?i)(?u)\b(Clínica Dentária|Dentista)\b/][amenity != dentist][!shop] { throwWarning: tr("PT2-Verificar: Clínica Dentária deve ter amenity=dentist"); fixAdd: "amenity=dentist"; } *[/^(name|name:pt)$/ =~ /^(?i)(?u)Clínica( Médica)?/][name][amenity != clinic][name !~ /^(?i)(?u)Clínica (Veterin|(Médico(-|\s))?Dent)ária/][!shop] { throwWarning: tr("PT2-Verificar: Clínica deve ter amenity=clinic"); fixAdd: "amenity=clinic"; } *[/^(name|name:pt)$/ =~ /(?i)(?u)(Tribunal|Palácio da Justiça)/][name !~ /(?i)(?u)(Rua|Avenida|Travessa) d[ao] Tribunal/][name][amenity != courthouse][!highway][!shop][!amenity][name !~ /(?i)(?u)\b(Parque|Estacionamento)\b/] { throwWarning: tr("PT2-Tribunal deve ter amenity=courthouse"); fixAdd: "amenity=courthouse"; } *[name !~ /^Cemitério\s/][name][landuse = cemetery][!highway] { throwWarning: tr("PT2-O nome do cemitério deve seguir o padrão Cemitério X, pode ser um erro ortográfico"); } *[name !~ /(Junta de Freguesia( da (Uni|Agregaç)ão)? d[eao]|Câmara Municipal d[eao]) /][name][amenity = townhall][!highway] { throwWarning: tr("PT2-O nome deve seguir o padrão Junta de Freguesia X ou Câmara Municipal de X, talvez tenha etiqueta errada amenity=townhall"); } *[name !~ /^Rio /][name][waterway = river] { throwWarning: tr("PT2-O nome deve seguir o padrão Rio X, ou não é um rio"); } *[name !~ /^(Ribeir[ao]|Corg[oa]|Córrego|Barroco)/][name][waterway = stream] { throwWarning: tr("PT2-O nome deve seguir o padrão Ribeiro X, Córrego X, Corgo X"); } *[waterway][waterway=stream][name =~ /(?i)(?u)\b(Corg[oa]|Córrego)/][!highway][!place][!boundary][!intermittent] { throwWarning: tr("PT2-Corgo ou Córrego deve ter em princípio intermittent=yes"); fixAdd: "intermittent=yes"; } *[name !~ /Parque Campismo/][name][amenity = camp_site][!highway][name !~ /(?i)(?u)\b(Parque|Estacionamento)\b/] { throwWarning: tr("PT2-O nome deve seguir o padrão Parque de Campismo X ou Parque de Campismo de X"); } *[/^(name|name:pt)$/ =~ /(?i)(?u)(Centro|Agência) (de )?Emprego/][name][office != employment_agency][!highway][name !~ /(?i)(?u)\b(Parque|Estacionamento)\b/] { throwWarning: tr("PT2-Centro de Emprego deve ter office=employment_agency"); fixAdd: "office=employment_agency"; } *[/^(name|name:pt)$/ =~ /(?i)(?u)Advogad[ao]s?/][name][office != lawyer][!highway][!boundary][!place][name !~ /(?i)(?u)\b(Parque|Estacionamento)\b/] { throwWarning: tr("PT2-Advogado deve ter office=lawyer"); fixAdd: "office=lawyer"; } *[/^(name|name:pt)$/ =~ /(?i)(?u)Imobiliária/][name][office != estate_agent][!highway][name !~ /(?i)(?u)\b(Parque|Estacionamento)\b/] { throwWarning: tr("PT2-Imobiliária deve ter office=estate_agent"); fixAdd: "office=estate_agent"; } *[/^(name|name:pt)$/ =~ /(?i)(?u)Contabili(sta|dade)/][name][office != accountant][!highway][name !~ /(?i)(?u)\b(Parque|Estacionamento)\b/] { throwWarning: tr("PT2-Contabilista e Escritório de Contabilidade deve ter office=accountant"); fixAdd: "office=accountant"; } *[/^(name|name:pt)$/ =~ /(?i)(?u)(Agência (de Publicidade|Publicitária)|Publicidade)/][name][office != advertising_agency][name !~ /(?i)(?u)\b(Parque|Estacionamento)\b/] { throwWarning: tr("PT2-Agência de Publicidade deve ter office=advertising_agency"); fixAdd: "office=advertising_agency"; } *[/^(name|name:pt)$/ =~ /(?i)(?u)(Arquiteto|Escritório de Arquitetura)/][name][office != architect][!highway][name !~ /(?i)(?u)\b(Parque|Estacionamento)\b/] { throwWarning: tr("PT2-Arquiteto e Escritório de Arquitetura deve ter office=architect"); fixAdd: "office=architect"; } *[/^(name|name:pt)$/ =~ /(?i)(?u)^Fundação/][name][office != foundation][!highway][!boundary][!place][name !~ /(?i)(?u)\b(Parque|Estacionamento)\b/] { throwWarning: tr("PT2-Fundação deve ter office=foundation"); fixAdd: "office=foundation"; } *[/^(name|name:pt)$/ =~ /(?i)(?u)\bJornal\b/][name][office != newspaper][!highway][name !~ /(?i)(?u)\b(Parque|Estacionamento)\b/] { throwWarning: tr("PT2-Sede e Filial de Jornal deve ter office=newspaper"); fixAdd: "office=newspaper"; } *[/^(name|name:pt)$/ =~ /(?i)(?u)(Notári(ad)?o|Notarial)/][name][lawyer != notary][!highway][!boundary][!place][name !~ /(?i)(?u)\b(Parque|Estacionamento)\b/] { throwWarning: tr("PT2-Notário e Notariado deve ter lawyer=notary e office=lawyer"); fixAdd: "office=lawyer"; fixAdd: "lawyer=notary"; } *[/^(name|name:pt)$/ =~ /(?i)(?u)Solocitador/][name][lawyer != solicitor][!highway][!boundary][!place][name !~ /(?i)(?u)\b(Parque|Estacionamento)\b/] { throwWarning: tr("PT2-Solocitador deve ter lawyer=solicitor e office=lawyer"); fixAdd: "office=lawyer"; fixAdd: "lawyer=solicitor"; } *[/^(name|name:pt)$/ =~ /(?i)(?u)\b(Partido|PSD|PPD|PEV|PCP|CDS|PCTP|MRPP|POUS|Bloco de Esquerda)\b/][name][office != political_party][!highway][!boundary][!place][name !~ /(?i)(?u)\b(Parque|Estacionamento)\b/] { throwWarning: tr("PT2-Sede e Filial de Partido Político deve ter office=political_party"); fixAdd: "office=political_party"; } *[/^(name|name:pt)$/ =~ /(?i)(?u)(Repartição de |Serviço de )?Finanças/][name][office != tax][name !~ /(?i)(?u)\b(Parque|Estacionamento)\b/] { throwWarning: tr("PT2-Finanças deve ter office=tax"); fixAdd: "office=tax"; } *[/^(name|name:pt)$/ =~ /(?i)(?u)Comissão (de )?de Protec?ção (de )?Crianças e Jovens/][name][office != government][name !~ /(?i)(?u)\b(Parque|Estacionamento)\b/] { throwWarning: tr("PT2-Comissão de Protecção de Crianças e Jovens deve ter office=government"); fixAdd: "office=government"; } *[/^(name|name:pt)$/ =~ /(?i)(?u)(Registo Civil|Conservatória)/][name][office != government][name !~ /(?i)(?u)\b(Parque|Estacionamento)\b/] { throwWarning: tr("PT2-Conservatória deve ter office=government"); fixAdd: "office=government"; } *[/^(name|name:pt)$/ =~ /(?i)(?u)(Segurança Social|Ministério d(e|as)|Direção(-|\s)?Geral)/][name][office != government][name !~ /(?i)(?u)\b(Parque|Estacionamento)\b/] { throwWarning: tr("PT2-Falta etiqueta office=government"); fixAdd: "office=government"; } *[/^(name|name:pt)$/ =~ /(?i)(?u)Assembleia Municipal/][name][office != administrative][name !~ /(?i)(?u)\b(Parque|Estacionamento)\b/] { throwWarning: tr("PT2-Assembleia Municipal deve ter office=administrative"); fixAdd: "office=administrative"; } *[/^(name|name:pt)$/ =~ /(?i)(?u)(Agência de )?Viagens/][name][office != travel_agent][!highway][!boundary][!place] { throwWarning: tr("PT2-Agência de Viagens deve ter office=travel_agent"); fixAdd: "office=travel_agent"; } *[/^(name|name:pt)$/ =~ /(?i)(?u)Câmbio/][name][amenity != bureau_de_change][!highway][!boundary][!place] { throwWarning: tr("PT2-Agência de Câmbio deve ter amenity=bureau_de_change"); fixAdd: "amenity=bureau_de_change"; } *[/^(name|name:pt)$/ =~ /^(?i)(?u)Castelo/][name][historic != castle][!highway][!boundary][!place][!shop][name !~ /(?i)(?u)\b(Parque|Estacionamento)\b/] { throwWarning: tr("PT2-Castelo deve ter historic=castle"); fixAdd: "historic=castle"; } *[/^(name|name:pt)$/ =~ /^(?i)(?u)alminhas/][name][historic != wayside_shrine][!highway][!public_transport][!boundary][!place][!shop] { throwWarning: tr("PT2-Alminhas deve ter historic=wayside_shrine"); fixAdd: "historic=wayside_shrine"; fixAdd: "religion=christian"; fixAdd: "denomination=roman_catholic"; } *[/^(name|name:pt)$/ =~ /(?i)(?u)\bBanco\b/][name][amenity != bank][amenity != atm][!highway][!boundary][!place][name !~ /(?i)(?u)\b(Parque|Estacionamento)\b/] { throwWarning: tr("PT2-Banco financeiro deve ter amenity=bank"); fixAdd: "amenity=bank"; } *[/^(name|name:pt)$/ =~ /(?i)(?u)\b((Caixa\s)?ATM|Caixa Multi-?Banco|MB)\b/][name][amenity != atm] { throwWarning: tr("PT2-Caixa MultiBanco deve ter amenity=atm"); fixAdd: "amenity=atm"; } *[/^(name|name:pt)$/ =~ /(?i)(?u)\bCanil\b/][name][amenity != animal_shelter][!highway][!boundary][!place][name !~ /(?i)(?u)\b(Parque|Estacionamento)\b/] { throwWarning: tr("PT2-Canil deve ter amenity=animal_shelter"); fixAdd: "amenity=animal_shelter"; } *[/^(name|name:pt)$/ =~ /(?i)(?u)Crematório/][name][amenity != crematorium][!highway][!boundary][!place][name !~ /(?i)(?u)\b(Parque|Estacionamento)\b/] { throwWarning: tr("PT2-Crematório deve ter amenity=crematorium"); fixAdd: "amenity=crematorium"; } *[/^(name|name:pt)$/ =~ /(?i)(?u)\bCripta\b/][name][amenity != crypt][!highway][!boundary][!place] { throwWarning: tr("PT2-Cripta deve ter amenity=crypt"); fixAdd: "amenity=crypt"; } *[/^(name|name:pt)$/ =~ /(?i)(?u)Ginásio/][name][amenity != gym][!highway][!boundary][!place][name !~ /(?i)(?u)\b(Parque|Estacionamento)\b/] { throwWarning: tr("PT2-Ginásio deve ter amenity=gym, retirar outras etiquetas como leisure=sports_centre, sport=gymnastics, etc."); fixAdd: "amenity=gym"; } *[/^(name|name:pt)$/ =~ /(?i)(?u)Marco (de |dos )?C(orreio|TT)/][name][amenity != post_box] { throwWarning: tr("PT2-Marco de Correio deve ter amenity=post_box"); fixAdd: "amenity=post_box"; } *[/^(name|name:pt)$/ =~ /(?i)(?u)\bC(orreio|TT)\b/][name][amenity !~ /post_box|post_office/][!highway][!boundary][!place][name !~ /(?i)(?u)\b(Parque|Estacionamento)\b/] { throwWarning: tr("PT2-Nome com Correio ou CTT mas sem etiqueta amenity=post_box ou post_office "); } *[/^(name|name:pt)$/ =~ /(?i)(?u)(Telefone Público|Cabine Telefónica)/][name][amenity != telephone] { throwWarning: tr("PT2-Telefone Público deve ter amenity=telephone"); fixAdd: "amenity=telephone"; } *[/^(name|name:pt)$/ =~ /^(?i)(?u)Caixote (d[oe] |para( o)? )?Lixos?$/][name][amenity != waste_basket] { throwWarning: tr("PT2-Caixote do Lixo deve ter amenity=waste_basket"); fixAdd: "amenity=waste_basket"; } *[/^(name|name:pt)$/ =~ /^(?i)(?u)Contentor (d[oe] |para( o)? )?Lixos?$/][name][amenity != waste_disposal] { throwWarning: tr("PT2-Contentor do Lixo deve ter amenity=waste_disposal"); fixAdd: "amenity=waste_disposal"; } *[/^(name|name:pt)$/ =~ /(?i)(?u)Residências? Universitárias?/][name][building != dormitory][!highway][name !~ /(?i)(?u)\b(Parque|Estacionamento)\b/] { throwWarning: tr("PT2-Residência Universitária deve ter building=dormitory"); fixAdd: "building=dormitory"; } *[/^(name|name:pt)$/ =~ /(?i)(?u)(Zona Industrial|Parque Empresarial)/][name][landuse != industrial][!highway] { throwWarning: tr("PT2-Zona Industrial deve ter landuse=industrial"); fixAdd: "landuse=industrial"; } *[/^(name|name:pt)$/ =~ /(?i)(?u)Sanatório/][name][amenity != sanatorium][!highway] { throwWarning: tr("PT2-Sanatório deve ter amenity=sanatorium"); fixAdd: "amenity=sanatorium"; } *[/^(name|name:pt)$/ =~ /(?i)(?u)ru[íi]nas?/][name][building != ruins][!highway] { throwWarning: tr("PT2-Edifício em ruínas deve ter building=ruins e se for histórico adicionar historic=ruins"); fixAdd: "building=ruins"; } *[/^(name|name:pt|note)$/ =~ /(?i)(?u)(Take(\s|-)?A(\s|-)?way)/][name][takeaway != yes] { throwWarning: tr("PT2-Restaurante Take a Way deve ter takeaway=yes Se for apenas para take a way adicionar takeaway=only"); fixAdd: "takeaway=yes"; } *[/^(name|name:pt)$/ =~ /(?i)(?u)Pizz?a(ria|s)/][name][cuisine != pizza][!highway] { throwWarning: tr("PT2-Pizzaria deve ter cuisine=pizza"); fixAdd: "cuisine=pizza"; fixAdd: "amenity=restaurant"; } *[/^(name|name:pt)$/ =~ /(?i)(?u)Churras(caria|queira|co)/][name][cuisine != barbecue][!highway][name !~ /(?i)(?u)\b(Parque|Estacionamento)\b/] { throwWarning: tr("PT2-Churrasqueira deve ter cuisine=barbecue"); fixAdd: "cuisine=barbecue"; fixAdd: "amenity=restaurant"; } *[/^(name|name:pt)$/ =~ /(?i)(?u)kebab/][name][cuisine != kebab][!highway][name !~ /(?i)(?u)\b(Parque|Estacionamento)\b/] { throwWarning: tr("PT2-Restaurante kebab deve ter cuisine=kebab"); fixAdd: "cuisine=kebab"; fixAdd: "amenity=restaurant"; } *[/^(name|name:pt)$/ =~ /(?i)(?u)\bSopas?\b/][name][cuisine != soup][!highway][name !~ /(?i)(?u)\b(Parque|Estacionamento)\b/] { throwWarning: tr("PT2-Restaurante de sopas deve ter cuisine=soup"); fixAdd: "cuisine=soup"; fixAdd: "amenity=restaurant"; } *[/^(name|name:pt)$/ =~ /(?i)(?u)Marisqueira/][name][cuisine != fish][!highway][name !~ /(?i)(?u)\b(Parque|Estacionamento)\b/] { throwWarning: tr("PT2-Marisqueira deve ter cuisine=fish"); fixAdd: "cuisine=fish"; fixAdd: "amenity=restaurant"; } *[/^(name|name:pt)$/ =~ /(?i)(?u)\bSandes?\b/][name][cuisine != sandwich][!highway][name !~ /(?i)(?u)\b(Parque|Estacionamento)\b/] { throwWarning: tr("PT2-Restaurante de sandes deve ter cuisine=sandwich"); fixAdd: "cuisine=sandwich"; fixAdd: "amenity=restaurant"; } node[place] < way { throwWarning: tr("PT2-Nós de place não devem estar ligados a linhas, usar Mais Ferramentas -> Extrair Nó do módulo utilsplugin2"); } node[shop][amenity!=fuel] < way { throwWarning: tr("PT2-Nós de shop não devem estar ligados a linhas"); } node[amenity][amenity !~ /^(parking_entrance|fuel|car_wash|parking|atm|ferry_terminal|toilets)$/] < way { throwWarning: tr("PT2-Alguns nós de amenity não devem estar ligados a linhas"); } node[amenity = bus_station] < way[!highway], node[highway = bus_stop] < way[!highway] { throwWarning: tr("PT2-Nós de paragens ou estações de autocarro não devem estar ligados a linhas a não ser que sejam estradas"); } node[amenity][amenity = parking] < way { throwWarning: tr("PT2-Nó de parque de estacionamento deve ser transformado numa área"); } node[tourism][tourism !~ /viewpoint|attraction|artwork/] < way { throwWarning: tr("PT2-Alguns nós de tourism não devem estar ligados a linhas"); } node[craft] < way { throwWarning: tr("PT2-Nós de craft não devem estar ligados a linhas"); } node[office] < way { throwWarning: tr("PT2-Nós de office não devem estar ligados a linhas"); } node[leisure][leisure != slipway] < way { throwWarning: tr("PT2-Nós de leisure não devem estar ligados a linhas"); } node[man_made][man_made !~ /surveillance/] < way { throwWarning: tr("PT2-Alguns nós de man_made não devem estar ligados a linhas"); } node[natural][natural !~ /cape|spring/] < way { throwWarning: tr("PT2-Alguns nós de natural não devem estar ligados a linhas"); } node[sport] < way { throwWarning: tr("PT2-Nós de sport não devem estar ligados a linhas"); } node[military] < way { throwWarning: tr("PT2-Nós de military não devem estar ligados a linhas"); } node[building][building !~ /entrance/] < way { throwWarning: tr("PT2-Alguns nós de building não devem estar ligados a linhas"); } node[historic] < way { throwWarning: tr("PT2-Nós de historic não devem estar ligados a linhas"); } node[landuse] < way { throwWarning: tr("PT2-Nós de landuse não devem estar ligados a linhas"); } *[/^(name|name:pt)$/ =~ /(?i)(?u)\b(Stande?|Automóveis|Concessionário)\b/][shop != car] { throwWarning: tr("PT2-Reparador de Automóveis deve ter shop=car_repair"); fixAdd: "shop=car_repair"; } *[/^(name|name:pt)$/ =~ /(?i)(?u)(Repara(ção|ções|dor|dores) (de )? Auto(móveis)?|Car Service|Oficina)/][name][shop != car_repair][!highway][!boundary][!place][!amenity] { throwWarning: tr("PT2-Reparador de Automóveis deve ter shop=car_repair"); fixAdd: "shop=car_repair"; } *[/^(name|name:pt)$/ =~ /(?i)(?u)Lavagem/][name][amenity != car_wash] { throwWarning: tr("PT2-Local de Lavagem de Automóveis deve ter amenity=car_wash"); fixAdd: "amenity=car_wash"; } *[/^(name|name:pt)$/ =~ /(?i)(?u)Park Meter/][name][amenity != vending_machine] { throwWarning: tr("PT2-Máquina de bilhetes de parque de estacionamento deve ter amenity=vending_machine e vending=parking_tickets"); fixAdd: "amenity=vending_machine"; fixAdd: "vending=parking_tickets"; } *[/^(name|name:pt)$/ =~ /^(?i)(?u)(Hospital|Centro Hospitalar|(Centro|Extensão) (de )?Saúde) /][name][building][building != hospital] { throwWarning: tr("PT2-Edifício de Hospital ou Centro de Saúde deve ter building=hospital"); fixAdd: "building=hospital"; } *[/^(name|name:pt)$/ =~ /^(?i)(?u)(Hospital|Centro Hospitalar|(Centro|Extensão) (de )?Saúde) /][name][amenity][amenity != hospital][name !~ /(?i)(?u)\b(Parque|Estacionamento)\b/] { throwWarning: tr("PT2-Hospital e Centro de Saúde deve ter amenity=hospital"); fixAdd: "amenity=hospital"; } *[/^(name|name:pt)$/ =~ /(?i)(?u)\b(Seguros|Ass?eguradora?|Seguradora|Açoreana|Aegon|Allianz|AXA|Bonança|Fidelidade|Generali|Groupama|Liberty|Mapfre|Médis|Multicare|Tranquilidade|Zurich)\b/][name][office != insurance][!highway] { throwWarning: tr("PT2-Seguradora e Mediador de Seguros deve ter office=insurance"); fixAdd: "office=insurance"; } *[/^(name|name:pt)$/ =~ /^(?i)(?u)(Cabine|Posto de Transformador) ((da )? EDP)/][name][building != transformer_tower], *[/^(name|name:pt)$/ =~ /^(?i)(?u)(Cabine|Posto de Transformador) ((da )? EDP)/][name][power != substation], *[/^(name|name:pt)$/ =~ /^(?i)(?u)(Cabine|Posto de Transformador) ((da )? EDP)/][name][substation != minor_distribution], *[building = transformer_tower][name][power != substation], *[building = transformer_tower][name][substation != minor_distribution] { throwWarning: tr("PT2-Cabine da EDP deve ter building=transformer_tower power=substation e substation=minor_distribution"); fixAdd: "building=transformer_tower"; fixAdd: "power=substation"; fixAdd: "substation=minor_distribution"; } *[/^(name|name:pt)$/ =~ /^(?i)(?u)Estação (de Comboios|Ferroviária|(da)? CP|(dos )?Caminhos de Ferro) /][name][building != train_station], *[/^(name|name:pt)$/ =~ /^(?i)(?u)Estação (de Comboios|Ferroviária|(da)? CP|(dos )?Caminhos de Ferro) /][name][public_transport != station] { throwWarning: tr("PT2-Estação de Comboios sem building=train_station ou public_transport=station"); fixAdd: "building=train_station"; fixAdd: "public_transport=station"; } *[/^(name|name:pt)$/ =~ /(?i)(?u)((Encerr|Fech)(ou|ado)|Desocupad[ao])/], *[description =~ /(?i)(?u)((Encerr|Fech)(ou|ado)|Desocupad[ao])/], *[note =~ /(?i)(?u)((Encerr|Fech)(ou|ado)|Desocupad[ao])/], *[designation =~ /(?i)(?u)((Encerr|Fech)(ou|ado)|Desocupad[ao])/] { throwWarning: tr("PT2-Estabelecimento encerrado deve ter disused:shop=yes, disused:amenity=bar..."); } *[/^(name|name:pt)$/ =~ /(?i)(?u)(Abandon(ad[ao]|o)|Degrada(d[ao]|ção))/], *[description =~ /(?i)(?u)(Abandon(ad[ao]|o)|Degrada(d[ao]|ção))/], *[note =~ /(?i)(?u)(Abandon(ad[ao]|o)|Degrada(d[ao]|ção))/], *[designation =~ /(?i)(?u)(Abandon(ad[ao]|o)|Degrada(d[ao]|ção))/] { throwWarning: tr("PT2-Edifício degradado deve ter abandoned:building=yes ou abandoned:shop=yes..."); } *[/name|description|note|designation/ =~ /(?i)(?u)((Equipamentos?|Materia(is|l)) Hospitalar|instrumentos médicos)/][shop != medical_supply] { throwWarning: tr("PT2-Empresa de venda de material hospitalar deve ter shop=medical_supply"); fixAdd: "shop=medical_supply"; } *[/^(name|name:pt)$/ =~ /(?i)(?u)Noiv[ao]s/][shop=clothes][!clothes] { throwWarning: tr("PT2-Loja de roupa para noivas deve ter clothes=wedding"); fixAdd: "clothes=wedding"; } *[/^(name|name:pt|note)$/ =~ /(?i)(?u)\b(Zara Kids|Lanidor J[úu]nior|Roupa (de |para )?Crianças?)\b/][shop=clothes][!clothes] { throwWarning: tr("PT2-Loja de roupa para criança deve ter clothes=children"); fixAdd: "clothes=children"; } *[/^(name|name:pt|note)$/ =~ /(?i)(?u)\b(Roupa (de |para )?B[ée]b[ée]s?)\b/][shop=clothes][!clothes] { throwWarning: tr("PT2-Loja de roupa para bebé deve ter clothes=babies"); fixAdd: "clothes=babies"; } *[/^(name|name:pt)$/ =~ /(?i)(?u)\b(Salsa|Levi's|Levi Strauss|Pepe Jeans|Lee|W52)\b/][shop=clothes][!clothes] { throwWarning: tr("PT2-Loja essencialmente de jeans deve ter clothes=denim"); fixAdd: "clothes=denim"; } *[/^(name|name:pt)$/ =~ /(?i)(?u)\b(lingerie|women'secret|Calzedonia|Intimissimi|Loja das Meias)\b/][shop=clothes][!clothes] { throwWarning: tr("PT2-Loja de roupa interior,meias,etc. deve ter clothes=underwear"); fixAdd: "clothes=underwear"; } *["addr:country"]["addr:country" !~ /^PT$/] { throwWarning: tr("PT2-O país na morada deve ter o código PT"); fixAdd: "addr:country=PT"; } *[leisure][/^(name|name:pt)$/ =~ /^(?i)(?u)(campo|est(á|a)dio) (de (futebol|desportos?)|desportivo)?$/], *[leisure][/^(name|name:pt)$/ =~ /^(?i)(?u)(estádio |Pavilhão )?Gimnodesportivo$/], *[leisure=playground][/^(name|name:pt)$/ =~ /^(?i)(?u)Parque Infantil$/], *[highway = bus_stop][/^(name|name:pt)$/ =~ /^(?i)(?u)(paragem( d(e|os) autocarros?)|bus stop)?$/], *[highway = track][/^(name|name:pt)$/ =~ /^(?i)(?u)Trilhos?$/], *[highway = path][/^(name|name:pt)$/ =~ /^(?i)(?u)Trilhos?$/], *[highway][/^(name|name:pt)$/ =~ /^(?i)(?u)Estrad[ãa]o( de Terra)?$/], *[natural = tree][/^(name|name:pt)$/ =~ /^(?i)(?u)[ÁA]rvores?$/], *[amenity = drinking_water][/^(name|name:pt)$/ =~ /^(?i)(?u)(Fonte|Bebedouro)s?$/], *[amenity = post_office][/^(name|name:pt)$/ =~ /^(?i)(?u)Correios$/], *[amenity = fuel][/^(name|name:pt)$/ =~ /^(?i)(?u)(Estação|Posto|Bombas)(de (Serviço|Combustível|Gasolina))?$/], *[amenity = parking][/^(name|name:pt)$/ =~ /^(?i)(?u)(Parque((de )?Estacionamento)?|Estacionamento(( de)? (Carros|Autom[óo]veis)?)?)$/], *[amenity = bank][/^(name|name:pt)$/ =~ /^(?i)(?u)Banco$/], *[amenity = bench][/^(name|name:pt)$/ =~ /^(?i)(?u)Bancos?$/], *[amenity = waste_basket][/^(name|name:pt)$/ =~ /^(?i)(?u)Caixote (d[oe] |para( o)? )?Lixos?$/], *[natural = tree][/^(name|name:pt)$/ =~ /^(?i)(?u)[ÁA]rvores?$/], *[highway = steps][/^(name|name:pt)$/ =~ /^(?i)(?u)Escadas?$/], *[highway = crossing][/^(name|name:pt)$/ =~ /^(?i)(?u)(Passadeira|Zebra)s?$/], *[amenity = bench][/^(name|name:pt)$/ =~ /^(?i)(?u)Bancos?$/] { throwWarning: tr("PT2-Nome supérfluo ou incompleto"); } node[highway=street_lamp][name] { throwWarning: tr("PT2-Poste de Iluminação com nome"); fixRemove: "name"; } *[building][/^(name|name:pt)$/ =~ /^(?i)(?u)(Habita[çc][ãa]o|Casa|Moradia|Vivenda)?$/] { throwWarning: tr("PT2-Nome supérfluo em edifício que deve ter building=house"); fixAdd: "building=house"; } /* nomes e ruas escritos totalmente em maiúsculo */ *[/^(name|name:pt)$/ =~ /^[A-Z0-9 ]*[A-Z]+[A-Z0-9 ]*$/][name !~ /^BP$/], *["addr:street" =~ /^[A-Z0-9 ]*[A-Z]+[A-Z0-9 ]*$/] { throwWarning: tr("PT2-Verificar:Nome com letras apenas em maiúsculo, usar short_name e o nome por extenso"); } /* Erro comum como Rua do CRuzeiro */ *[/^(name|name:pt|addr:street)$/ =~ /[A-Z]{2}[a-z]/] { throwWarning: tr("PT2-Verificar: nome ou endereço com 2 letras seguidas em maiúsculo"); } /* lugar possui nome que inicia com "Edifício" mas não possui etiqueta building */ *[/^(name|name:pt)$/ =~ /^(?i)(?u)edifício/][!building][name !~ /^(?i)(?u)\bEdifício Transparente\b/] { throwWarning: tr("PT2-Possível ausência de etiqueta {0}", "{1.key}"); fixAdd: "building=yes"; } *["addr:postcode"]["addr:postcode" !~ /^[0-9]{4}(-[0-9]{3})?$/], *[postal_code][postal_code !~ /^[0-9]{4}(-[0-9]{3})?$/] { throwWarning: tr("PT2-Código postal em formato diferente de NNNN-NNN ou NNNN"); } node[surface] { throwWarning: tr("PT2-Superfície ({0}) num nó", "{0.key}"); fixRemove: "{0.key}"; } /* highway/waterway com layer negativo e sem túnel */ *[highway][layer < 0][!tunnel], *[waterway][layer < 0][!tunnel] { throwWarning: tr("PT2-Verificar: {0} negativo de {1} com ausência de {2}", "{1.key}", "{0.key}", "{2.key}"); } /* highway/waterway com layer positivo e sem ponte */ *[highway][layer > 0][!bridge][highway != bus_stop], *[waterway][layer > 0][!bridge] { throwWarning: tr("PT2-Verificar: {0} positivo de {1} com ausência de {2}", "{1.key}", "{0.key}", "{2.key}"); } way[highway = motorway_junction] { throwError: tr("PT2- {0} deve ser utilizado apenas no nó de saída da estrada", "{0.tag}"); suggestAlternative: "highway=motorway_link"; } way[highway][lanes][lanes !~ /^[1-9]([0-9]*)$/], way[highway]["lanes:backward"]["lanes:backward" !~ /^[1-9]([0-9]*)$/], way[highway]["lanes:forward"]["lanes:forward" !~ /^[1-9]([0-9]*)$/] { throwError: tr("PT2- {0} deve ser um valor inteiro", "{1.key}"); } /* estradas de 2 vias mas apenas com 1 faixa estão provavelmente erradas */ *[highway][lanes = 1][!oneway?][!junction] { throwWarning: tr("PT2- {0} provavelmente deveria ter {1} ≥ 2 ou {2}=yes", "{0.key}", "{1.key}", "{2.key}"); } /* admin_level deve ficar na relação e não no nó do local */ node[place][admin_level] { throwWarning: tr("PT2- {0} deve fazer parte do limite administrativo e não do nó do local", "{1.key}"); } relation[admin_level][!boundary], relation[admin_level][boundary][boundary != administrative] { throwError: tr("PT2- {0} ausência de boundary=administrative", "{0.key}"); fixAdd: "boundary=administrative"; } relation[boundary=administrative][!admin_level] { throwError: tr("PT2- {0} deve possuir {1}", "{0.tag}", "{1.key}"); } relation[boundary=administrative] > way { set way_in_relation; } relation[admin_level] > way { set way_in_relation; } way[boundary=administrative][!admin_level]!.way_in_relation { throwError: tr("PT2- {0} deve possuir {1}", "{0.tag}", "{1.key}"); } way[admin_level][!boundary]!.way_in_relation, way[admin_level][boundary][boundary != administrative]!.way_in_relation { throwError: tr("PT2- {0} ausência de boundary=administrative", "{0.key}"); fixAdd: "boundary=administrative"; } relation[boundary=administrative][type=multipolygon] { throwError: tr("PT2-Relação deve ser do tipo ''type=boundary''"); fixAdd: "type=boundary"; } node[destination], relation[destination][type != waterway] { throwWarning: tr("PT2- {0} deve-se usar apenas em linhas", "{0.key}"); } /* landuse não deve ter layer */ *[landuse][layer] { throwWarning: tr("PT2-Verificar: {0} não deve ter {1}", "{0.key}", "{1.key}"); } /* path deve utilizar trail_visibility e não tracktype */ way[highway = path][tracktype] { throwWarning: tr("PT2-Uso incorreto de {0}", "{1.key}"); suggestAlternative: "trail_visibility"; } /* tracktype é uma propriedade de tracks apenas */ way[highway != track][tracktype] { throwWarning: tr("PT2-Usar {0} apenas em {1}={2}", "{1.key}", "{0.key}", "{0.value}"); } /* número de saída de rodovia */ *[highway=motorway_junction][ref][ref !~ /^[0-9]+( |-)*([A-Z])?$/] { throwWarning: tr("PT2-Saída de via ({0}) fora do padrão", "{1.key}"); } *[alt_ref] { throwWarning: tr("PT2-O conteúdo de {0} deve fazer parte de ref, separado por ;", "{0.key}"); suggestAlternative: "ref"; } *[/^(name|name:pt)$/ =~ /^(?i)(?u)pra(ç|cet)a/][!leisure][landuse = grass] { throwWarning: tr("PT2-Possível definição errada de praça: {0}", "{2.tag}"); suggestAlternative: "leisure=park"; } /* layer não faz sentido em outros objetos */ *[layer][!building][!highway][man_made!=pipeline][!tunnel][!railway][!waterway] { throwWarning: tr("PT2-Verificar: possível uso incorreto de layer no objeto, pode ser andar, etiqueta level"); } /* https://github.com/OSMBrasil/validador-josm/issues/54 */ /* requer JOSM ≥ 7761 */ *[tourism = motel][amenity != love_hotel], *[/^(name|name:pt)$/ =~ /(?i)(?u)\bmotel\b/][amenity != love_hotel] { throwWarning: tr("PT2-Ausência de etiqueta ''{0}''", "{1.value}"); fixAdd: "{1.key}={1.value}"; } *[amenity = love_hotel][tourism][tourism != motel] { throwWarning: tr("PT2-Verificar: provavelmente deve ser ''{0}={1}''", "{2.key}", "{2.value}"); } *["building:levels" < 1] { throwWarning: tr("PT2-Verificar: {0} com valor inválido", "{0.key}"); } /* deve-se utilizar short_name, name ou official_name ao invés de long_name */ *[long_name] { throwWarning: tr("PT2-Chave inválida: {0}", "{0.key}"); suggestAlternative: "highway=name"; suggestAlternative: "highway=short_name"; suggestAlternative: "highway=official_name"; } /* landuse deve conter algum valor que não seja yes */ *[landuse?] { throwWarning: tr("PT2-Especificar valor correto para {0} em vez de ''{1}''", "{0.key}", tag("landuse")); } /* vários valores para source devem estar na mesma chave, separados por ';' */ *[alt_source][source] { throwWarning: tr("PT2- {0} deve estar incluído em {1}, separado por '';'' caso necessário", "{0.key}", "{1.key}"); } *[access = permissive] { throwWarning: tr("PT2-Verificar: {0} usar só em vias privadas com permissão de acesso e não vias públicas", "{0.tag}"); } *[aeroway][designation =~ /^[A-Z]{4}$/][!icao], *[aeroway][ref =~ /^[A-Z]{4}$/][!icao] { throwWarning: tr("PT2- {0} provavelmente deve ser utilizado como {1}", "{1.key}", "{2.key}"); fixChangeKey: "{1.key} => {2.key}"; } *[crossing][!highway][!railway] { throwWarning: tr("PT2- crossing deve ser utilizado com highway=crossing, railway=crossing ou highway=traffic_signals"); } node[highway =~ /^(give_way|mini_roundabout|stop|turning_circle)$/][name] { throwWarning: tr("PT2-Objeto não deve possuir {0}", "{1.key}"); } way[highway = give_way], way[highway = mini_roundabout], way[highway = stop], way[highway = turning_circle], relation[highway = give_way], relation[highway = mini_roundabout], relation[highway = stop], relation[highway = turning_circle] { throwWarning: tr("PT2- {0} deve ser utilizado apenas em nós", "{0.tag}"); } /* torres de energia, lombas, câmaras, semáforos etc que não estão ligados a numa via */ node:unconnected[power = pole], node:unconnected[power = tower], node:unconnected[highway = speed_camera] { throwWarning: tr("PT2- {0} deve fazer parte de uma linha e não isolado", "{1.tag}"); } *[iata = "0"] { throwWarning: tr("{0} com valor = {1}", "{0.key}", "{0.value}"); } /* saídas de estradas devem ter nome e/ou referência */ node[highway = motorway_junction][!name][!ref] { throwWarning: tr("PT2- {0} sem pelo menos uma das etiquetas: {1} ou {2}", "{0.value}", "{1.key}", "{2.key}"); } /* provalvemente o tipo dessas vias não deve ser link */ *[highway $= _link][name =~ /(Alameda|Avenida|Rua|Travessa|Viela) /] { throwWarning: tr("PT2-Verificar: via possivelmente errada com {0}", tag("highway")); } node[noname?] { throwWarning: tr("PT2-Verificar: uso suspeito de {0} num nó", "{0.key}"); } /* source estranhamente igual o name */ *[source = *name] { throwWarning: tr("PT2-Verificar: {0} e {1} são iguais", "{0.key}", "{0.value}"); } *[/^(name|name:pt)$/ =~ /^(?i)(?u)(Junta (de )?Freguesia|Câmara Municipal)/][!highway][amenity!=townhall] { throwWarning: tr("PT2-Juntas de Freguesia e Câmaras Municipais deve ter amenity=townhall"); fixAdd: "amenity=townhall"; } *[vatin][!"ref:vatin"], *[nif][!"ref:vatin"], *[NIF][!"ref:vatin"], *[nipc][!"ref:vatin"], *[NIPC][!"ref:vatin"] { throwWarning: tr("PT2-Etiqueta errada para Número de Identificaçáo Fiscal, usar ref:vatin=XXX", "{0.key}", "{1.key}"); fixChangeKey: "{0.key} => {1.key}"; } *["ref:vatin"]["ref:vatin" !~ /^PT[0-9]{9}$/] { throwWarning: tr("PT2-Número de Identificaçáo Fiscal tem de ter o formato PTxxxxxxxxx"); } *["phone:pt"][!phone] { throwWarning: tr("PT2-Chave de etiqueta mal aplicada phone:pt sem haver etiqueta phone"); fixChangeKey: "{0.key} => phone"; } node[layer < 0][amenity=parking] { throwWarning: tr("PT2-provavelmente é uma entrada/saída parque estac.subterrâneo, usar amenity=parking_entrance e parking=underground"); fixAdd: "amenity=parking_entrance"; fixAdd: "parking=underground"; } node[layer > 0][amenity=parking] { throwWarning: tr("PT2-provavelmente é uma entrada/saída parque estac.no topo de 1 edifício, usar amenity=parking_entrance e parking=rooftop"); fixAdd: "amenity=parking_entrance"; fixAdd: "parking=rooftop"; } node:unconnected[amenity=parking_entrance] { throwWarning: tr("PT2-Nós de entradas ou saídas de parque estac. devem estar ligados a 1 estrada"); } *[tourism][tourism != attraction][layer], *[shop][layer], *[amenity][amenity != place_of_worship][parking !~ /underground|rooftop/][building!=roof][layer], *[craft][layer], *[office][layer], *[leisure][layer], *[man_made][man_made !~ /surveillance|pipeline/][layer], *[natural][layer], *[sport][layer], *[military][layer], *["building:part"][layer], *[historic][historic !~ /(monument|city_gate)/][layer], *[landuse][layer] { throwWarning: tr("PT2-provavelmente layer devia ser level - nº de andar ou não ter layer"); fixChangeKey: "layer => level"; } *[natural][shop] { throwWarning: tr("PT2-natural junto com shop"); } *[/name|brand|operator/ =~ /\b(5 (à s|[áa]\s[Ss])ec)\b/] { throwWarning: tr("PT2-O correto é 5 à Sec"); } *[amenity=fuel][!brand][name =~ /^(?i)(?u)(Agip|BP|Cepsa|Esso|Exxon|Galp|Mobil|Repsol|Shell|Total)?$/] { throwWarning: tr("PT2-Marca de combustível deve estar em brand e não name. O posto costuma ser de privados e com nome extenso "); fixChangeKey: "name => brand"; } *[/name|brand|operator/ =~ /\b(galp|GALP)\b/] { throwWarning: tr("PT2-O correto é Galp e não GALP ou galp"); } *[/name|brand|operator/ =~ /\b(CEPSA|cepsa)\b/] { throwWarning: tr("PT2-O correto é Cepsa e não CEPSA ou cepsa"); } *[/name|brand|operator/ =~ /\b(ESSO|esso)\b/] { throwWarning: tr("PT2-O correto é Esso e não ESSO ou esso"); } *[/name|brand|operator/ =~ /\b(EXX?ON|exx?on)\b/] { throwWarning: tr("PT2-O correto é Exxon e não EXXON ou exxon"); } *[/name|brand|operator/ =~ /\b(REPSOL|repsol)\b/] { throwWarning: tr("PT2-O correto é Repsol e não REPSOLou repsol"); } *[/name|brand|operator/ =~ /\b(SHELL?|shell?)\b/] { throwWarning: tr("PT2-O correto é Shell e não SHELL ou shell"); } *[amenity=fuel][/name|brand|operator/ =~ /\b(TOTAL|total)\b/] { throwWarning: tr("PT2-O correto é Total e não TOTAL ou total"); } *[amenity=fuel][/name|brand|operator/ =~ /\bMul?ti(\s?[óÓ]p?|\s?[ÓO]|\sOp?)ticas?\b/] { throwWarning: tr("PT2-O correto é MultiOpticas"); } *[amenity=fuel][/name|brand|operator/ =~ /\b(L[ÍI]DE?L|l[íi]de?l|Líde?l)[Ee]?\b/] { throwWarning: tr("PT2-O correto é Lidl"); } *[name][name =~ /\b(L[ÍI]DE?L|l[íi]de?l|Líde?l)[Ee]?\b/] { throwWarning: tr("PT2-O correto é Lidl"); } *[wikipedia][wikipedia !~ /^pt:/] { throwWarning: tr("PT2-Usar prefixo em português (pt:) em {0}", "{0.key}"); } area[/natural|landuse/] > node { set .area_ligada_via } way[highway][highway != pedestrian][!barrier] > node.area_ligada_via, way[railway] > node.area_ligada_via { throwWarning: tr("PT2-Não é recomendável ter áreas de landuse ou natural ligados a estradas, rios ou ferrovias"); } way[man_made=pipeline] > node { set .is_in_pipeline } way[highway] > node.is_in_pipeline, way[railway] > node.is_in_pipeline { throwWarning: tr("PT2-Pipeline não deve estar ligado a estradas ou ferrovias"); } /* utilizar ; como separador de valores em source */ *[source =~ /,/], *["source:ref" =~ /,/], *["source:name" =~ /,/] { throwOther: tr("utilizar ; como separador de valores em {0}", "{0.key}"); } *[/^(name|name:pt)$/ =~ /(?i)(?u)Posto (de )?Turismo/][name][information != office][!highway][name !~ /(?i)(?u)\b(Parque|Estacionamento)\b/] { throwWarning: tr("PT2-Posto de Turismo deve ter information=office e tourism=information"); fixAdd: "information=office"; fixAdd: "tourism=information"; } *[capacity=0] { throwWarning: tr("PT2-Valor provavelmente errado de capacity=0"); fixRemove: "capacity"; } *[ele][ele !~ /^[1-9][0-9]?[0-9]?[0-9]?(\.[0-9][0-9]?[0-9]?)?$/], *[ele > 2351], *[ele < 0] { throwWarning: tr("PT2-ele tem de ser um número em metros e sem unidade de medida entre 0 e 2351 em Portugal"); } area[name =~ /^(?i)(?u)Adro/][name][landuse != churchyard][!railway][!boundary][!place] { throwWarning: tr("PT2-Adro de igreja deve ter landuse=churchyard"); fixAdd: "landuse=churchyard"; } *[/^(name|name:pt)$/ =~ /^(?i)(?u)Cruzeiro/][name][historic != wayside_cross][!railway][!highway][!boundary][!place][!shop][!amenity] { throwWarning: tr("PT2-Cruzeiro ou cruz em zonas urbanas deve ter historic=wayside_cross"); fixAdd: "historic=wayside_cross"; } *["addr:housenumber" =~ /^(?i)(?u)n\.?º?/] { throwWarning: tr("PT2-addr:housenumber não deve ter NºX, apenas o número de porta"); } *[building][ele][ele =~ /^[1-3]?[0-9]$/] { throwWarning: tr("PT2-Verificar: edifício com etiqueta ele com valores que parecem nº de andares, pode ser building:levels"); fixChangeKey: "ele => building:levels"; } *[religion=christian][denomination=catholic][!route] { throwWarning: tr("PT2-Locais de oração cristãos devem ter denomination=roman_catholic e não a genérica denomination=catholic"); fixAdd: "denomination=roman_catholic"; } *[name][name =~ /^(?i)(?u)Depósito de Água/][man_made][man_made != water_tower][!railway][!highway][!boundary][!place][!shop][!amenity] { throwWarning: tr("PT2-Depósito de água deve ter man_made=water_tower"); fixAdd: "man_made=water_tower"; } *[name][name =~ /^(?i)(?u)Estádio/][leisure][leisure != stadium] { throwWarning: tr("PT2-Estádio deve ter leisure=stadium"); fixAdd: "leisure=stadium"; } *[name][name =~ /^".*"$/] { throwWarning: tr("PT2-Nome que começa e termina com aspas, não são necessárias aspas para marcas ou nomes"); } *[/^(name|name:pt|note|description)$/ =~ /(?i)(?u)Oliveira/][natural=tree][!genus], *[/^(name|name:pt|note|description)$/ =~ /(?i)(?u)Oliveira/][natural=tree][!leaf_cycle] { throwWarning: tr("PT2-Oliveira deve ter genus=Olea e leaf_cycle=evergreen, retirar nome"); fixAdd: "genus=Olea"; fixAdd: "leaf_cycle=evergreen"; } node[addr:housenumber] ∈ *[building][addr:housenumber] { throwWarning: tr("PT2-Nó com addr:housenumber dentro de edifício com addr:housenumber"); } *["addr:housenumber"]["addr:housenumber" =~ /^(\+351)?\s?[0-9]{3}\s?[0-9]{3}[0-9]{3}((;\s?\+351\s?[0-9]{3}\s?[0-9]{3}[0-9]{3})?)+$/] { throwWarning: tr("PT2-addr:housenumber com nº de telefone em vez de nº de porta"); fixChangeKey: "addr:housenumber => contact:phone"; } *["addr:housenumber"]["addr:housenumber" =~ /(\\|-|,|\.|\/)/] { throwWarning: tr("PT2-Os nº em addr:housenumber devem ser separados por ponto e vírgula apenas"); } /* AVISOS INFORMATIVOS */ /* é útil ter o destino das saídas de estradas */ *[highway = motorway_link][!destination] { throwOther: tr("PT2- {0} sem etiqueta {1}", "{0.value}", "{1.key}"); } *[place = city][!population], *[place = town][!population], *[place = village][!population] { throwOther: tr("PT2- {0} sem etiqueta de população", "{0.value}"); } *[place][place !~ /hamlet|island|isolated_dwelling|neighbourhood|suburb|village/][population < 10000] { throwOther: tr("PT2-Verificar: local com <10.000 hab. deve ser village, EXCEPTO sedes de freguesia!"); fixAdd: "place=village"; } *[place =~ /city|hamlet|isolated_dwelling|village/][population >= 10000][population < 100000] { throwOther: tr("PT2-Verificar: local com 10.000-100.000 hab. deve ser town, EXCEPTO sedes de concelho!"); fixAdd: "place=town"; } *[place =~ /hamlet|isolated_dwelling|town|village/][population >= 100000] { throwOther: tr("PT2-Verificar: local com +100.000 hab. deve ser city, EXCEPTO capitais de distrito!"); fixAdd: "place=city"; } /* é bom especificar o tipo de torre */ node[man_made = tower][!"tower:type"] { throwOther: tr("PT2-Ausência do tipo de torre ({0})", "{1.key}"); } *[highway][highway !~ /construction|give_way|motorway_junction|proposed|raceway|speed_camera|stop/][!wheelchair], *[building][!wheelchair] { throwOther: tr("PT2- {0} sem etiqueta de acessibilidade ({1})", "{0.key}", "{1.key}"); } *[route = ferry][!duration] { throwOther: tr("PT2-Ausência do tempo de duração ({0}) do ferry", "{1.key}"); } *[highway = service][!service] { throwOther: tr("PT2-Ausência do tipo de serviço ({0}) na {1}", "{1.key}", "{0.key}"); } *[highway = track][!tracktype] { throwOther: tr("PT2-Ausência do tipo de track ({0}) na {1}", "{1.key}", "{0.key}"); } /* número de faixas apenas para rodovias maiores e links */ way[highway =~ /motorway|trunk|primary|secondary|tertiary/][!lanes], way[highway $= _link][!lanes] { throwOther: tr("PT2- {0} sem número de faixas ({1}) definido", "{0.key}", "{1.key}"); } way[highway][!surface][highway != bus_stop] { throwOther: tr("PT2- {0} sem superfície ({1}) definida", "{0.key}", "{1.key}"); } node[amenity = place_of_worship] { throwOther: tr("PT2- local de oração num nó, é melhor num edifício"); } node[highway=speed_camera][!maxspeed], relation[enforcement=maxspeed][!maxspeed], relation[enforcement=maxheight][!maxheight], relation[enforcement=maxweight][!maxweight] { throwOther: tr("PT2-Adicionar {0} ao {1}", "{1.key}", "{0.tag}"); }
Rules_Portuguese-Errors-PT2.validator.mapcss, Rules_Portuguese-Errors-PT2.zip
Note:
See TracWiki
for help on using the wiki.