wiki:Rules/Portuguese-Errors-PT2

Version 21 (modified by zermes, 8 years ago) ( diff )

More rules (a lot) and some fixes; thanks Don-vip and Klumbumbus for the previous fixes

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|addr:street/ =~ /\s([dn]as?|[dn]os?|de)\s[a-z]/] {
                throwWarning: tr("PT2-name ou addr:street com minúscula após da,no,de,e...");
}
*[/name|addr:street/ =~ /\s([DN]as?|[DN]os?|De)\s[a-zA-Z]|.*\sE\s.*/] {
                throwWarning: tr("PT2-name ou addr:street com maiúscula em Da,No,De,E...");
}
*[/^name|addr:street/ =~ /^[a-z]/] {
                throwWarning: tr("PT2-name ou addr:street que começa em minúscula");
}
*[/name|addr:street/ =~ /^([!,:;_ºª+=]|\.|\?|\*|-)/] {
                throwWarning: tr("PT2-name ou addr:street que começa com pontuação");
}
*[name =~ /\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|addr:street/ =~ /(?i)(sem\s?nome|fix\s?me|\bfix\b|nome|no\s?name|desconhecido|n(ã|a)o conhecido)/][name !~ /(?i)soldado desconhecido/] {
                throwWarning: tr("PT2-Nome errado, sem nome...");
}
way[highway][/name|addr:street/ =~ /(-Os-|\sos\s)/] {
                throwWarning: tr("PT2-Corrigir nome ou endereço com o correto X-os-X");
}
way[highway][/name|addr:street/ =~ /(?i)(\bairport|bank|building|\bdrive\s?way|embassy|\bhelip(ort|ad)\b|\bPark(ing)?|piscine|Post\s?off?ice|\bRue\b|\bshop\b|\bstair|\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 =~ /\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-Nome 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-Endereço 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|addr:street)/ !~ /S\.A\./] {
                throwWarning: tr("PT2-Endereço abreviado_");
}
*[name =~ /\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?|Gab|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|addr:street)/ !~ /S\.A\./] {
                throwWarning: tr("PT2-Nome abreviado-NÃO alterar se for nome de estabelecimento");
}
*[name =~ /(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|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 =~ /\s['"»«ºª]\s/] {
                throwWarning: tr("PT2-Nome com acentuação isolada entre espaços");
}
*[name =~ /[`~^¨]/],
*[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 =~ /[´]/],
*[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}");
}
*[/^(name|addr:street|addr:city|alt_name|int_name|nat_name|reg_name|loc_name|old_name|official_name|name:pt)$/ =~ /(?i)(\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|Alvar(es|o)|Amalia|\bAmeli[ao]\b|Americ[ao]s?\b|Amisade|\bAndre\b|\bAngel[ao]\b|\bAnibal|Antonio|Apolonia|Araujo|Arma(ze|sé)(m|ns)|Area|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|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|\bBeltr[aâ]o\b|\bBetao\b|\bBissáu\b|Bonanico|Bonif(ac|as|ás)io|\bBrandao\b|\bBras\b|\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]|C(e[zs]|éz)ar|\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|Coperativa|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|\bE(c|ss?)ca\b|Edif(i[cçs]s?|íç|íss?)icio|Educa(ca|ça|cã)o|Elec?tric[ao]s?|Elec?trodomestic|\bElisi[ao]s?\b|\b([ÈÉ]m[íi]|Emi)di[ao]\b|\bEmili[ao]\b|Encarna(ca|ça|cã)o|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|Estetica|Estradao|Est[êée]vao|Estufador|\bEufemi|Evan(ge|jé|je)lica|\bEvora\b|Ex(erc|érs)ito|\bEx(ilio|ílad)|Fabricas?\b|\bFamilia\b|(para)?Farmacia|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|Judi(cia|ss?i[áa])ria|\bJuliao\b|\bJusti(c|ss?)a|\bJulia?o\b|\bJuridic|Laboratorio|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[zs]|uz)eu\b|\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|\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|\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)[Dd]ecat?[hl]?on/] {
                throwWarning: tr("PT2-Correto é Decathlon");
}
*[name =~ /(?i)Ma?c(\s[Dd]onald('|\s)?|[Dd]onald\s?)s/] {
                throwWarning: tr("PT2-Correto é McDonalds-com apóstrofo antes do s");
}
*[name =~ /(?i)\b[Ll]evi[ ´]?s\b/] {
                throwWarning: tr("PT2-Correto é Levis-com apóstrofo antes do s");
}
*[name =~ /[Pp]ingo(D|d| d)oce/] {
                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)Intermarche/] {
                throwWarning: tr("PT2-Correto é Intermarché");
}
*[name =~ /(?i)\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)(^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)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)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)(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|atm/][operator =~ /^(?i)(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)(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)(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)(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)(Banco )?B(\.\s?|\s)?C(\.\s?|\s)?P(\.\s?|\s)?$/],
*[amenity = bank][name =~ /^([Mm]ill?en?nium[Bb][Cc][Pp]|[Mm]ill?enn?ium 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)(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)\bBiblioteca\b/] {
        throwWarning: tr("PT2-Biblioteca com etiqueta de livraria");
        suggestAlternative: "amenity=library";
}
*[amenity=library][name =~ /^(?i)\bLivraria\b/] {
        throwWarning: tr("PT2-Livraria com etiqueta de biblioteca");
        suggestAlternative: "shop=books";
}
*[!office][name =~ /^(?i)Associação/] {
        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)(Estrada Nacional|EN)\s/],
way[highway !~ /^(primary|trunk)/][ref =~ /^(?i)(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)(Estrada Regional|ER)\s/],
way[highway !~ /^secondary/][ref =~ /^(?i)(E\.?)?R(\.|\s)?[0-9]{1,4}$/] {
        throwWarning: tr("PT2-Verificar: Estradas regionais devem ser secundárias");
        fixAdd: "highway=secondary";
}
way[highway !~ /^tertiary/][name =~ /^(?i)((Estrada|Caminho) Municipal|EM|CM)\s/],
way[highway !~ /^tertiary/][ref =~ /^(?i)([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)\becoponto\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)\b(embalão|ecoponto amarelo)\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:beverage_cartons=yes";
                fixAdd: "recycling:PET=yes";    
}
*[amenity != recycling][name =~ /(?i)\b(papelão|ecoponto azul)\b/] {
        throwWarning: tr("PT2- ecoponto no nome mas sem etiqueta de ecoponto");
                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)\b(vidrão|ecoponto verde)\b/] {
        throwWarning: tr("PT2- vidrão no nome mas sem etiqueta de ecoponto");
                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)\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)\becoponto\b/] {
        throwWarning: tr("PT2-Ecoponto marcado erradamente como ecocentro");
                fixAdd: "recycling_type=container";
}
*[amenity != fire_station][name =~ /(?i)\b((Quartel dos )?Bombeiros|\bBatalhão|Sapadores)\b/][!highway][!aeroway][name !~ /(?i)\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 =~ /\(.*\)/][!bus_stop] {
        throwWarning: tr("PT2-Nome com parênteses", "{0.key}");
        suggestAlternative: "alt_name";
        suggestAlternative: "short_name";
        suggestAlternative: "description";
        suggestAlternative: "note";
}
*[name =~ / - /] {
        throwWarning: tr("PT2-Nome com traço", "{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 =~ /,\s?(C\.?R\.?L|E\.?P|I\.P|Lda|S\.A|Unip)\.?/] {
        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 =~ /: /] {
        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)(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)estrada de ferro/][route != ferry][!amenity] {
        throwWarning: tr("PT2-Verificar: com nome de via mas sem etiqueta de {0}", "{0.key}");
}
*[highway][name =~ /^(?i)(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)(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|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)(ciclovia|ecopista|passeio)/] {
        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}");
}
/* nomes desnecessários */
*[designation = *"addr:housename"],
*[ref = *designation],
*[ref = *old_ref],
*[name = *"addr:housename"],
*[name = *designation],
*[name = *alt_name],
*[name = *int_name],
*[name = *loc_name],
*[name = *nat_name],
*[name = *official_name],
*[name = *old_name],
*[name = *reg_name],
*[name = *short_name],
*[name = *sorting_name] {
        throwWarning: tr("PT2- {0} e {1} são iguais; remover chave {1} desnecessária", "{0.key}", "{0.value}");
        fixRemove: "{0.value}";
}
*[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)\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)\b(Escola|Agrupamento de Escolas|Liceu|Centro de Formação Profissional)\b/][name !~ /^(?i)\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)\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)\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)\bEscola de Condução\b/] {
        throwWarning: tr("PT2-Verificar:estabelecimento de ensino errado");
        suggestAlternative: "amenity=driving_school";
        fixAdd: "{0.key}=driving_school";
}
*[amenity = university]  *[amenity = university],
*[amenity = university]  *[amenity = college],
*[amenity = university]  *[amenity = school] {
        throwWarning: tr("PT2- {0} dentro de {1}", "amenity=university", "{0.tag}");
}
*[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 =~ /(?i)\bHelipo[rn]to?\b/][aeroway != helipad],
*[name =~ /^(?i)Sub-?estação/][power != substation],
*[name =~ /^(?i)(Centro|Pavilhão|Parque) de Exposições/][amenity != exhibition_centre],
*[name =~ /^(?i)(Centro|Pavilhão|Parque) de (Convenções|Congressos)/][amenity != convention_centre],
*[name =~ /^(?i)(Centro|Pavilhão) Comunitário/][amenity != community_centre],
*[name =~ /(?i)\bMotel\b/][tourism != motel],
*[name =~ /(?i)\bPadandaria\b/][shop != bakery],
*[name =~ /(?i)\bTalho\b/][shop != butcher],
*[name =~ /(?i)\bSapataria\b/][shop != shoes],
*[name =~ /(?i)\b(Joalh[ae]ria|Ourives|Ourivesaria|Pandora)\b/][shop != jewelry],
*[name =~ /(?i)\b(Cabeleireir[ao]|Barbe(iro|aria))\b/][shop != hairdresser],
*[name =~ /(?i)\bCentro de Cópias\b/][shop != copyshop],
*[name =~ /(?i)\bPeixaria\b/][shop != seafood],
*[name =~ /(?i)\bLoja de Tecidos\b/][shop != fabric],
*[name =~ /(?i)\bInformática\b/][shop != computer],
*[name =~ /(?i)\b(Salão de Beleza|Nails|Manicure|Pedicure)\b/][shop != beauty],
*[name =~ /(?i)\b(Body Shop|Boticário)\b/][shop != cosmetics],
*[name =~ /(?i)\bRelógios\b/][shop != watches],
*[name =~ /(?i)\b(Decoraç(ão|ões)|Zara Home)\b/][shop != interior_decoration],
*[name =~ /(?i)\bArmazém\b/][building != warehouse],
*[name =~ /(?i)\bFlorista\b/][shop != florist],
*[name =~ /(?i)\bViveiros\b/][landuse != plant_nursery],
*[name =~ /(?i)\bAterro\b/][landuse != landfill],
*[name =~ /(?i)\bSalinas?\b/][landuse != salt_pond],
*[name =~ /(?i)\b(Lavandaria|5 a sec)\b/][shop != laundry],
*[name =~ /^(?i)Loja de Animais/][shop != pet],
*[name =~ /^(?i)(videoclube|clube de video)/][shop != video],
*[name =~ /^(?i)intrumentos musicais/][shop != musical_instrument],
*[name =~ /^(?i)Galeria de Arte/][shop != art],
*[name =~ /^(?i)Artigos Desportivos/][shop != sports],
*[name =~ /^(?i)(Loja de Caça|Artigos (de |para )? Caça|\bCaça\b)/][shop != hunting],
*[name =~ /^(?i)(Loja de Pesca|Artigos (de |para )? Pesca|\bPesca\b)/][shop != fishing],
*[name =~ /(?i)\b(Stande?|Automóveis)\b/][shop != car],
*[name =~ /^(?i)Peças (de |para )? Auto/][shop != car_parts],
*[name =~ /(?i)Iluminação/][shop != lamps],
*[name =~ /^(?i)\bGela(taria|dos)\b/][shop != ice_cream],
*[name =~ /^(?i)\b(Tipografia|Gráfica|Serigrafia)\b/][amenity != printer],
*[name =~ /^(?i)\bRetrosaria\b/][shop != sewing],
*[name =~ /^(?i)\b(Móveis|Moviflor)/][shop != furniture],
*[name =~ /^(?i)Antiguidades/][shop != antiques],
*[name =~ /^(?i)Materia(is|l) (de |para )? Contrução/][shop != antiques],
*[name =~ /^(?i)\bTintas\b/][shop != paint],
*[name =~ /^(?i)Material Elétrico/][shop != electrical],
*[name =~ /^(?i)Viveiros/][shop != garden_centre],
*[name =~ /^(?i)Ferragens/][shop != hardware],
*[name =~ /^(?i)Tatuage(m|ns)/][shop != tattoo],
*[name =~ /^(?i)Perfum(aria|es)/][shop != perfumery],
*[name =~ /^(?i)([ÓO]p?tica|Instituto Óptico|Multiopticas|Optivisão|Oculista)/][shop != optician],
*[name =~ /^(?i)\bEr[óo]tic[oa]?/][shop != erotic],
*[name =~ /^(?i)(2ª Mão|Segunda Mão|Artigos Usados)/][shop != second_hand],
*[name =~ /^(?i)Loja de Tecidos/][shop != fabric],
*[name =~ /^(?i)\b(Roupas?|Pronto[- ]a[- ]Vestir)\b/][shop != clothes],
*[name =~ /^(?i)\b(Bershka|Cortefiel|Foreva|Gant|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 =~ /^(?i)\b(Ana Salazar|Fátima Lopes|Katty Xiomara|Luís Buchinho|Maria Gambina|Miguel Vieira|Nuno Gama)\b/][shop != fashion],
*[name =~ /^(?i)\b(Malas?|Paco Martinez)\b/][shop != bag],
*[name =~ /^(?i)\b(Brinquedos|Imaginarium)\b/][shop != toys],
*[name =~ /^(?i)(Livraria|Bertrand)/][shop != books],
*[name =~ /^(?i)\bB[ée]b[ée]\b/][shop != baby_goods],
*[name =~ /^(?i)\bVinhos?\b/][shop != wine],
*[name =~ /^(?i)\b(Tapeçaria|Carpete)s?\b/][shop != carpet],
*[name =~ /^(?i)(\bFrutas?\b|Frutaria|Legumes)/][shop != greengrocer],
*[name =~ /^(?i)Gourmet/][shop != deli],
*[name =~ /^(?i)Conveniência/][shop != convenience],
*[name =~ /^(?i)(Bebidas|Garrafeira)/][shop != beverages],
*[name =~ /^(?i)Pneus/][shop != tyres],
*[name =~ /^(?i)Metere?ol[óo][gj]ica/][man_made != monitoring_station],
*[name =~ /^(?i)Chamin[ée]/][man_made != chimney],
*[name =~ /^(?i)pipeline/][man_made != pipeline],
*[name =~ /^(?i)\bSilos?\b/][man_made != silo],
*[name =~ /^(?i)Moinhos? (de |a |movido a |d')?[ÁA]gua/][man_made != watermill],
*[name =~ /^(?i)Moinhos? (de |a |movido a |d')?Vento/][man_made != windmill],
*[name =~ /(?i)\b(E\.?T\.?A\.?R\.?|Estação de Tratamento de Águas Residuais)\b/][man_made != wastewater_plant],
*[name =~ /^(?i)\bForte\b/][historic != fort],
*[name =~ /^(?i)memorial/][historic != memorial],
*[name =~ /^(?i)Mosteiro/][historic != monastery],
*[name =~ /^(?i)monumento/][historic != monument],
*[name =~ /^(?i)t[úu]mulo/][historic != tomb],
*[name =~ /^(?i)pelourinho/][historic != pillory],
*[name =~ /^(?i)parque (de )campismo/][tourism != camp_site],
*[name =~ /(?i)\bDroguaria\b/][shop != chemist],
*[name =~ /(?i)\b(Represa|Açude)\b/][waterway != weir],
*[name =~ /(?i)\b(Queda de Água|Cascata|Catarata)s?\b/][waterway != waterfall],
*[name =~ /^(?i)Barragem\b/][waterway != dam],
*[name =~ /^(?i)Albufeira\b/][waterway != reservoir],
*[name =~ /(?i)\b((Agência de )?Viagens|Top Atlântico)\b/][shop != travel_agency],
*[name =~ /(?i)\bPapelaria\b/][shop != stationery],
*[name =~ /(?i)\b(Agência\s)?Funerária\b/][shop != funeral_directors],
*[name =~ /(?i)\b(Clínica Veterinária|Veterinário)\b/][amenity != veterinary],
*[name =~ /(?i)\b(Clínica Dentária|Dentista)\b/][amenity != dentist],
*[name =~ /(?i)\b(CTT|Correios)\b/][amenity != post_office],
*[name =~ /(?i)\b(Polícia|G\.?N\.?R\.?|P\.?S\.?P\.?|Esquadra)\b/][amenity != police],
*[name =~ /(?i)\b(Cinema|Lusomundo)\b/][amenity != cinema],
*[name =~ /^(?i)Parque de Campismo\b/][amenity != camp_site],
*[name =~ /^(?i)Catedral/][building != cathedral],
*[name =~ /^(?i)Mesquita/][building != mosque],
*[name =~ /^(?i)Sinagoga/][building != synagogue],
*[name =~ /^(?i)Sapateiro/][craft != shoemaker],
*[name =~ /^(?i)Serração/][craft != sawmill],
*[name =~ /^(?i)Carpint(eiro|aria)/][craft != carpenter],
*[name =~ /^(?i)Ferreiro/][craft != blacksmith],
*[name =~ /^(?i)Eletricista/][craft != electrician],
*[name =~ /^(?i)Serralh(eiro|aria)/][craft != metal_construction],
*[name =~ /^(?i)(Picheleiro|Canalisador)/][craft != plumber],
*[name =~ /^(?i)(Alfaiate|Costureira)/][craft != tailor],
*[name =~ /^(?i)Catt?ering/][craft != caterer],
*[name =~ /^(?i)(Construçáo Naval|(Construtor(es)?|Estaleiros?) Nava(l|is))/][craft != boatbuilder],
*[name =~ /^(?i)Espírita/][denomination != spiritist],
*[name =~ /^(?i)Adventista/][denomination != seventh_day_adventist],
*[name =~ /^(?i)Anglicana/][denomination != anglican],
*[name =~ /^(?i)Igreja Bap?tista/][denomination != baptist],
*[name =~ /^(?i)Evangélica/][denomination != evangelical],
*[name =~ /^(?i)Metodista/][denomination != methodist],
*[name =~ /^(?i)M[óo]rmon/][denomination != mormon],
*[name =~ /^(?i)Testemunhas de Jeová/][denomination != jehovahs_witness],
*[name =~ /^(?i)sucat(a|eiro)/][industrial != auto_wrecker],
*[name =~ /^(?i)\b(W\.?C\.?|Casas?(de )? Banho)\b/][amenity != toilets],
*[name =~ /^(?i)\bCoreto\b/][leisure != bandstand] {
        throwWarning: tr("PT2-Provavelmente deveria ser {1}", "{1.key}", "{1.value}");
        fixAdd: "{1.key}={1.value}";
}
*[name =~ /^(?i)(Centro )?((de )?Inspec?ç(ão|ões)|Inspec?tor|Inspec?ção (Periódica )?de Veículos)/][amenity != vehicle_inspection],
*[name =~ /^(?i)\b(Elec?trodomésticos|Rádio Popular|Worten|MediaMarkt)/][shop != electronics],
*[name =~ /^(?i)\b(Izi Build|\bAki\b)/][shop != doityourself],
*[name =~ /^(?i)Staples/][shop != stationery],
*[name =~ /(Loja (Social|Solid[áa]ria)|EMA[ÚU]S|\bREMAR\b)/][shop != charity],
*[name =~ /^(?i)\b(Corte Ingl[êe]s|FNAC|IKEA)\b/][shop != department_store],
*[name =~ /^(?i)\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],
*[name =~ /^(?i)\b(Recheio|Makro|António Teixeira Lopes)\b/][shop != wholesale],
*[name =~ /^(?i)\b(Decathlon|Sport Zone)\b/][shop != sports]
*[name =~ /^(?i)Discoteca/][amenity != nightclub] {
        throwWarning: tr("PT2-Provavelmente deveria ser {1}", "{1.key}", "{1.value}");
        fixAdd: "{1.key}={1.value}";
}
*[name =~ /^(?i)Casa do Povo/][amenity != community_centre][!highway][!railway] {
        throwWarning: tr("PT2-Casa do Povo deve ter amenity=community_centre");
                fixAdd: "amenity=community_centre";
}
*[name =~ /^(?i)Seminário/][amenity != school][!highway] {
        throwWarning: tr("PT2-Seminário deve ter amenity=school");
                fixAdd: "amenity=restaurant";
}
*[name =~ /^(?i)(Centro|Escola) de Formação/][amenity != school][!highway] {
        throwWarning: tr("PT2-Centro ou Escola de Formação deve ter amenity=school");
                fixAdd: "amenity=restaurant";
}
*[name =~ /(?i)(Restaurante?|Petis(cos|queira|\bTasc[ao]\b))/][amenity != restaurant][!highway][name !~ /(?i)\b(Parque|Estacionamento)\b/] {
        throwWarning: tr("PT2-Restaurante ou similar deve ter amenity=restaurant");
                fixAdd: "amenity=restaurant";
}
*[name =~ /(?i)\b(Centro Comercial|Shopp?ing Cent(er|re))\b/][shop != mall][!highway][name !~ /(?i)\b(Parque|Estacionamento)\b/] {
        throwWarning: tr("PT2-Centro Comercial deve ter shop=mall");
                fixAdd: "craft=mall";
}
*[name =~ /(?i)\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 =~ /^(?i)(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 =~ /(?i)Material Elec?trónico/][shop!=radiotechnics] {
        throwWarning: tr("PT2-Loja de material eletrónico deve ter shop=radiotechnics");
                fixAdd: "shop=radiotechnics";
}
*[name =~ /^(?i)Café\b/][amenity !~ /cafe|restaurant/][!highway][name !~ /(?i)\b(Parque|Estacionamento)\b/] {
        throwWarning: tr("PT2-Café deve ter amenity=cafe");
                fixAdd: "amenity=cafe";
}
*[name =~ /^(?i)Pint(or|uras)/][craft != painter][!highway] {
        throwWarning: tr("PT2-Pintor deve ter craft=painter");
                fixAdd: "craft=painter";
}
*[name =~ /(?i)\bTeatro\b/][amenity != theatre][name !~ /(?i)\bCine(-| )?Teatro\b/][!highway] {
        throwWarning: tr("PT2-Teatro deve ter amenity=theatre");
                fixAdd: "amenity=theatre";
}
*[name =~ /(?i)\b(Prisão|Prisional)\b/][amenity != prison][!highway] {
        throwWarning: tr("PT2-Prisão deve ter amenity=prison");
                fixAdd: "amenity=prison";
}
*[name =~ /(?i)\b(Embaixada|Consulado)\b/][amenity != embassy][!highway] {
        throwWarning: tr("PT2-Embaixada e Consulado deve ter amenity=embassy");
                fixAdd: "amenity=embassy";
}
*[name =~ /(?i)\bCemitério\b/][landuse != cemetery][!highway][name !~ /(?i)\b(Parque|Estacionamento)\b/] {
        throwWarning: tr("PT2-Cemitério deve ter landuse=cemetery");
                fixAdd: "landuse=cemetery";
}
*[name =~ /(?i)\bPraia\b/][natural != beach][!highway][!shop][!craft][!amenity][!route][name !~ /(?i)\b(Parque|Estacionamento)\b/] {
        throwWarning: tr("PT2-Praia deve ter natural=beach");
                fixAdd: "natural=beach";
}
*[name =~ /(?i)\bBiblioteca?\b/][amenity != library][!highway][!shop][!craft][name !~ /(?i)\b(Parque|Estacionamento)\b/] {
        throwWarning: tr("PT2-Biblioteca deve ter amenity=library");
                fixAdd: "amenity=library";
}
*[landuse][landuse != vineyard][name =~ /(?i)\bVinha\b/] {
        throwWarning: tr("PT2-Vinha deve ter landuse=vineyard");
                fixAdd: "landuse=vineyard";
}
*[name =~ /^(?i)(Aparthotel|Hotel|Residencial|Pensão)/][tourism != hotel][name !~ /(?i)\b(Parque|Estacionamento)\b/] {
        throwWarning: tr("PT2-Aparthotel, Hotel, Residencial e Pensão deve ter tourism=hotel");
                fixAdd: "tourism=hotel";
}
*[name =~ /^(?i)(Aparthotel|Hotel|Residencial|Pensão)/][building][building != hotel][name !~ /(?i)\b(Parque|Estacionamento)\b/] {
        throwWarning: tr("PT2-Edifício de Aparthotel, Hotel, Residencial e Pensão deve ter building=hotel");
                fixAdd: "building=hotel";
}
*[waterway][waterway !~ /river|riverbank/][name =~ /(?i)Rio/] {
        throwWarning: tr("PT2-Rio deve ter waterway=river ou waterway=riverbank");
                fixAdd: "waterway=river";
}
*[waterway][waterway != stream][name =~ /(?i)\bRibeir[oa]\b/] {
        throwWarning: tr("PT2-Ribeira deve ter waterway=stream");
                fixAdd: "waterway=stream";
}
*[waterway][waterway != canal][name =~ /(?i)\bCanal\b/] {
        throwWarning: tr("PT2-Canal deve ter waterway=canal");
                fixAdd: "waterway=canal";
}
*[name =~ /(Miradouro|Vista Panorâmica)/][tourism!=viewpoint][!highway][!shop][!craft][!amenity] {
        throwWarning: tr("PT2- Miradouro deve ter tourism=viewpoint");
                fixAdd: "tourism=viewpoint";
}
*[name =~ /\bHostel\b/][!highway][tourism!=hostel] {
        throwWarning: tr("PT2- Hostel deve ter tourism=hostel");
        fixAdd: "tourism=hostel";
}
*[name =~ /(?i)\bMuseu\b/][tourism != museum][!highway][!shop][!craft][!amenity][name !~ /(?i)\b(Parque|Estacionamento)\b/] {
        throwWarning: tr("PT2- Museu deve ter tourism=museum");
        fixAdd: "tourism=museum";
}
*[name =~ /(?i)\bPedreira\b/][landuse != quarry][!highway][!shop][!craft][!amenity] {
        throwWarning: tr("PT2- Pedreira deve ter landuse=quarry");
        fixAdd: "landuse=quarry";
}
*[name =~ /(?i)\bCapela\b/][building != chapel][!highway] {
        throwWarning: tr("PT2- Capela deve ter building=chapel");
        fixAdd: "building=chapel";
}
*[name =~ /(?i)\bIgreja\b/][building != church][!highway][name !~ /(?i)\b(Parque|Estacionamento)\b/] {
        throwWarning: tr("PT2- Igreja deve ter building=church");
        fixAdd: "building=church";
}
way[highway][!bridge][name =~ /^Ponte/] {
                throwWarning: tr("PT2-Nome Ponte mas sem etiqueta de ponte");
        fixAdd: "bridge=yes";
                fixAdd: "layer=1";
}
*[name =~ /^(Quebra-mar|Pontão)/][!man_made=breakwater][!highway] {
                throwWarning: tr("PT2-Pontão deve ter etiqueta man_made=breakwater");
        fixAdd: "man_made=breakwater";
}
*[name =~ /^Igreja Matriz/][building != church][!highway],
*[name =~ /^Igreja Matriz/][religion != christian][!highway],
*[name =~ /^Igreja Matriz/][denomination != roman_catholic][!highway] {
                throwWarning: tr("PT2-Igreja Matriz deve ter building=church religion=christian e denomination=roman_catholic");
        fixAdd: "building=church";
                fixAdd: "religion=christian";
        fixAdd: "denomination=roman_catholic";
}
*[name =~ /^Capela/][building != chapel][!highway],
*[name =~ /^Capela/][religion != christian][!highway],
*[name =~ /^Capela/][denomination != roman_catholic][!highway] {
                throwWarning: tr("PT2-Capela deve ter building=chapel religion=christian e denomination=roman_catholic");
        fixAdd: "building=chapel";
                fixAdd: "religion=christian";
        fixAdd: "denomination=roman_catholic";
}
*[shop = yes]{
        throwWarning: tr("PT2-Etiqueta shop=yes deve ser mais específica");
}
*[name =~ /^(?i)Clínica/][name][amenity != clinic][name !~ /^(?i)Clínica (Veterin|Dent)ária/] {
        throwWarning: tr("PT2-Verificar: Clínica deve ter amenity=clinic");
}
*[name =~ /(?i)Tribunal/][name !~ /(?i)(Rua|Avenida|Travessa) d[ao] Tribunal/][name][amenity != courthouse][!highway][name !~ /(?i)\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");
}
*[name !~ /(Junta de Freguesia( da União)? de|Câmara Municipal de) /][name][amenity = townhall][!highway] {
        throwWarning: tr("PT2-O nome deve seguir o padrão Junta de Freguesia de ou da União de 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");
}
*[name !~ /^Ribeir[ao] /][name][waterway = stream] {
        throwWarning: tr("PT2-O nome deve seguir o padrão Ribeira X ou Ribeiro X");
}
*[name !~ /Parque Campismo/][name][amenity = camp_site][!highway][name !~ /(?i)\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 =~ /(?i)(Centro|Agência) (de )?Emprego/][name][office != employment_agency][!highway][name !~ /(?i)\b(Parque|Estacionamento)\b/] {
        throwWarning: tr("PT2-Centro de Emprego deve ter office=employment_agency");
        fixAdd: "office=employment_agency";
}
*[name =~ /(?i)Advogado/][name][office != lawyer][!highway][name !~ /(?i)\b(Parque|Estacionamento)\b/] {
        throwWarning: tr("PT2-Advogado deve ter office=lawyer");
        fixAdd: "office=lawyer";
}
*[name =~ /(?i)Imobiliária/][name][office != estate_agent][!highway][name !~ /(?i)\b(Parque|Estacionamento)\b/] {
        throwWarning: tr("PT2-Imobiliária deve ter office=estate_agent");
        fixAdd: "office=estate_agent";
}
*[name =~ /(?i)Contabili(sta|dade)/][name][office != accountant][!highway][name !~ /(?i)\b(Parque|Estacionamento)\b/] {
        throwWarning: tr("PT2-Contabilista e Escritório de Contabilidade deve ter office=accountant");
        fixAdd: "office=accountant";
}
*[name =~ /(?i)(Agência (de Publicidade|Publicitária)|Publicidade)/][name][office != advertising_agency][name !~ /(?i)\b(Parque|Estacionamento)\b/] {
        throwWarning: tr("PT2-Agência de Publicidade deve ter office=advertising_agency");
        fixAdd: "office=advertising_agency";
}
*[name =~ /(?i)(Arquiteto|Escritório de Arquitetura)/][name][office != architect][!highway][name !~ /(?i)\b(Parque|Estacionamento)\b/] {
        throwWarning: tr("PT2-Arquiteto e Escritório de Arquitetura deve ter office=architect");
        fixAdd: "office=architect";
}
*[name =~ /(?i)^Fundação/][name][office != foundation][!highway][name !~ /(?i)\b(Parque|Estacionamento)\b/] {
        throwWarning: tr("PT2-Fundação deve ter office=foundation");
        fixAdd: "office=foundation";
}
*[name =~ /(?i)\bJornal\b/][name][office != newspaper][!highway][name !~ /(?i)\b(Parque|Estacionamento)\b/] {
        throwWarning: tr("PT2-Sede e Filial de Jornal deve ter office=newspaper");
        fixAdd: "office=newspaper";
}
*[name =~ /(?i)(Notári(ad)?o|Notarial)/][name][lawyer != notary][!highway][name !~ /(?i)\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 =~ /(?i)Solocitador/][name][lawyer != solicitor][!highway][name !~ /(?i)\b(Parque|Estacionamento)\b/] {
        throwWarning: tr("PT2-Solocitador deve ter lawyer=solicitor e office=lawyer");
                fixAdd: "office=lawyer";
        fixAdd: "lawyer=solicitor";
}
*[name =~ /(?i)\b(Partido|PSD|PPD|PEV|PCP|CDS|PCTP|MRPP|POUS|Bloco de Esquerda)\b/][name][office != political_party][!highway][name !~ /(?i)\b(Parque|Estacionamento)\b/] {
        throwWarning: tr("PT2-Sede e Filial de Partido Político deve ter office=political_party");
                fixAdd: "office=political_party";
}
*[name =~ /(?i)(Repartição de |Serviço de )?Finanças/][name][office != tax][name !~ /(?i)\b(Parque|Estacionamento)\b/] {
        throwWarning: tr("PT2-Finanças deve ter office=tax");
                fixAdd: "office=tax";
}
*[name =~ /(?i)Comissão (de )?de Protec?ção (de )?Crianças e Jovens/][name][office != government][name !~ /(?i)\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 =~ /(?i)(Segurança Social|Ministério d(e|as)|Direção(-|\s)?Geral)/][name][office != government][name !~ /(?i)\b(Parque|Estacionamento)\b/] {
        throwWarning: tr("PT2-Falta etiqueta office=government");
                fixAdd: "office=government";
}
*[name =~ /(?i)Assembleia Municipal/][name][office != administrative][name !~ /(?i)\b(Parque|Estacionamento)\b/] {
        throwWarning: tr("PT2-Assembleia Municipal deve ter office=administrative");
                fixAdd: "office=administrative";
}
*[name =~ /(?i)(Agência de )?Viagens/][name][office != travel_agent] {
        throwWarning: tr("PT2-Agência de Viagens deve ter office=travel_agent");
                fixAdd: "office=travel_agent";
}
*[name =~ /(?i)Câmbio/][name][amenity != bureau_de_change][!highway] {
        throwWarning: tr("PT2-Agência de Câmbio deve ter amenity=bureau_de_change");
                fixAdd: "amenity=bureau_de_change";
}
*[name =~ /^(?i)Castelo/][name][historic != castle][!place][!highway][name !~ /(?i)\b(Parque|Estacionamento)\b/] {
        throwWarning: tr("PT2-Castelo deve ter historic=castle");
                fixAdd: "historic=castle";
}
*[name =~ /^(?i)alminhas/][name][historic != wayside_shrine][!highway][!public_transport][!place] {
        throwWarning: tr("PT2-Alminhas deve ter historic=wayside_shrine");
                fixAdd: "historic=wayside_shrine";
                fixAdd: "religion=christian";
                fixAdd: "denomination=roman_catholic";
}
*[name =~ /(?i)\bBanco\b/][name][amenity != bank][amenity != atm][!highway][name !~ /(?i)\b(Parque|Estacionamento)\b/] {
        throwWarning: tr("PT2-Banco financeiro deve ter amenity=bank");
                fixAdd: "amenity=bank";
}
*[name =~ /(?i)\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 =~ /(?i)\bCanil\b/][name][amenity != animal_shelter][!highway][name !~ /(?i)\b(Parque|Estacionamento)\b/] {
        throwWarning: tr("PT2-Canil deve ter amenity=animal_shelter");
                fixAdd: "amenity=animal_shelter";
}
*[name =~ /(?i)Crematório/][name][amenity != crematorium][!highway][name !~ /(?i)\b(Parque|Estacionamento)\b/] {
        throwWarning: tr("PT2-Crematório deve ter amenity=crematorium");
                fixAdd: "amenity=crematorium";
}
*[name =~ /(?i)\bCripta\b/][name][amenity != crypt][!highway] {
        throwWarning: tr("PT2-Cripta deve ter amenity=crypt");
                fixAdd: "amenity=crypt";
}
*[name =~ /(?i)Ginásio/][name][amenity != gym][!highway][name !~ /(?i)\b(Parque|Estacionamento)\b/] {
        throwWarning: tr("PT2-Ginásio deve ter amenity=gym");
                fixAdd: "amenity=gym";
}
*[name =~ /(?i)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 =~ /(?i)\bC(orreio|TT)\b/][name][amenity =~ /post_box|post_office/][name !~ /(?i)\b(Parque|Estacionamento)\b/] {
        throwWarning: tr("PT2-Nome com Correio ou CTT mas sem etiqueta amenity=post_box ou post_office ");
}
*[name =~ /(?i)(Telefone Público|Cabine Telefónica)/][name][amenity != telephone] {
        throwWarning: tr("PT2-Telefone Público deve ter amenity=telephone");
                fixAdd: "amenity=telephone";
}
*[name =~ /(?i)Caixote d[oe] Lixo/][name][amenity != waste_basket] {
        throwWarning: tr("PT2-Caixote do Lixo deve ter amenity=waste_basket");
                fixAdd: "amenity=waste_basket";
}
*[name =~ /(?i)Contentor d[oe] Lixo/][name][amenity != waste_disposal] {
        throwWarning: tr("PT2-Contentor do Lixo deve ter amenity=waste_disposal");
                fixAdd: "amenity=waste_disposal";
}
*[name =~ /(?i)Residências? Universitárias?/][name][building != dormitory][!highway][name !~ /(?i)\b(Parque|Estacionamento)\b/] {
        throwWarning: tr("PT2-Residência Universitária deve ter building=dormitory");
                fixAdd: "building=dormitory";
}
*[name =~ /(?i)(Zona Industrial|Parque Empresarial)/][name][landuse != industrial][!highway] {
        throwWarning: tr("PT2-Zona Industrial deve ter landuse=industrial");
                fixAdd: "landuse=industrial";
}
*[name =~ /(?i)Sanatório/][name][amenity != sanatorium][!highway] {
        throwWarning: tr("PT2-Sanatório deve ter amenity=sanatorium");
                fixAdd: "amenity=sanatorium";
}
*[name =~ /(?i)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 =~ /(?i)(Take( -)?A( -)?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 =~ /(?i)Pizz?a(ria|s)/][name][cuisine != pizza][!highway] {
        throwWarning: tr("PT2-Pizzaria deve ter cuisine=pizza");
                fixAdd: "cuisine=pizza";
                fixAdd: "amenity=restaurant";
}
*[name =~ /(?i)Churras(caria|queira|co)/][name][cuisine != barbecue][!highway][name !~ /(?i)\b(Parque|Estacionamento)\b/] {
        throwWarning: tr("PT2-Churrasqueira deve ter cuisine=barbecue");
                fixAdd: "cuisine=barbecue";
                fixAdd: "amenity=restaurant";
}
*[name =~ /(?i)kebab/][name][cuisine != kebab][!highway][name !~ /(?i)\b(Parque|Estacionamento)\b/] {
        throwWarning: tr("PT2-Restaurante kebab deve ter cuisine=kebab");
                fixAdd: "cuisine=kebab";
                fixAdd: "amenity=restaurant";
}
*[name =~ /(?i)\bSopas?\b/][name][cuisine != soup][!highway][name !~ /(?i)\b(Parque|Estacionamento)\b/] {
        throwWarning: tr("PT2-Restaurante de sopas deve ter cuisine=soup");
                fixAdd: "cuisine=soup";
                fixAdd: "amenity=restaurant";
}
*[name =~ /(?i)Marisqueira/][name][cuisine != fish][!highway][name !~ /(?i)\b(Parque|Estacionamento)\b/] {
        throwWarning: tr("PT2-Marisqueira deve ter cuisine=fish");
                fixAdd: "cuisine=fish";
                fixAdd: "amenity=restaurant";
}
*[name =~ /(?i)\bSandes?\b/][name][cuisine != sandwich][!highway][name !~ /(?i)\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");
}
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)$/] < way {
        throwWarning: tr("PT2-Alguns nós de amenity não devem estar ligados a linhas");
}
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] < way {
        throwWarning: tr("PT2-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 =~ /(?i)(Repara(ção|ções|dor|dores) (de )? Auto(móveis)?|Car Service)/][name][shop != car_repair] {
        throwWarning: tr("PT2-Reparador de Automóveis deve ter shop=car_repair");
                fixAdd: "shop=car_repair";
}
*[name =~ /(?i)Lavagem/][name][amenity != car_wash] {
        throwWarning: tr("PT2-Local de Lavagem de Automóveis deve ter amenity=car_wash");
                fixAdd: "amenity=car_wash";
}
*[name =~ /(?i)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 =~ /^(?i)(Hospital|Centro Hospitalar|Centro (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 =~ /^(?i)(Hospital|Centro Hospitalar|Centro (de )?Saúde) /][name][amenity][amenity != hospital][name !~ /(?i)\b(Parque|Estacionamento)\b/] {
        throwWarning: tr("PT2-Hospital e Centro de Saúde deve ter amenity=hospital");
                fixAdd: "amenity=hospital";
}
*[name =~ /(?i)\b(Seguros|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 =~ /^(?i)(Cabine|Posto de Transformador) ((da )? EDP)/][name][building != transformer_tower],
*[name =~ /^(?i)(Cabine|Posto de Transformador) ((da )? EDP)/][name][power != substation],
*[name =~ /^(?i)(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 =~ /^(?i)Estação (de Comboios|Ferroviária|(da)? CP|(dos )?Caminhos de Ferro) /][name][building != train_station],
*[name =~ /^(?i)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 =~ /(?i)((Encerr|Fech)(ou|ado)|Desocupad[ao])/],
*[description =~ /(?i)((Encerr|Fech)(ou|ado)|Desocupad[ao])/],
*[note =~ /(?i)((Encerr|Fech)(ou|ado)|Desocupad[ao])/],
*[designation =~ /(?i)((Encerr|Fech)(ou|ado)|Desocupad[ao])/] {
        throwWarning: tr("PT2-Estabelecimento encerrado deve ter disused:shop=yes, disused:amenity=bar...");
}
*[name =~ /(?i)(Abandon(ad[ao]|o)|Degrada(d[ao]|ção))/],
*[description =~ /(?i)(Abandon(ad[ao]|o)|Degrada(d[ao]|ção))/],
*[note =~ /(?i)(Abandon(ad[ao]|o)|Degrada(d[ao]|ção))/],
*[designation =~ /(?i)(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)((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 =~ /(?i)Noiv[ao]s/][shop=clothes][!clothes] {
        throwWarning: tr("PT2-Loja de roupa para noivas deve ter clothes=wedding");
                fixAdd: "clothes=wedding";
}
*[name =~ /(?i)\b(Zara Kids|Lanidor J[úu]nior|Roupa (de )?Criança)\b/][shop=clothes][!clothes] {
        throwWarning: tr("PT2-Loja de roupa para criança deve ter clothes=children");
                fixAdd: "clothes=children";
}
*[name =~ /(?i)\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 =~ /(?i)\b(lingerie|women'secret|Calzedonia|Intimissimi)\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 =~ /^(?i)(campo|est(á|a)dio) (de (futebol|desportos?)|desportivo)?$/],
*[leisure][name =~ /^(?i)(estádio |Pavilhão )?Gimnodesportivo$/],
*[leisure=playground][name =~ /^(?i)Parque Infantil$/],
*[highway = bus_stop][name =~ /^(?i)(paragem( d(e|os) autocarros?)|bus stop)?$/],
*[highway = track][name =~ /^(?i)Trilhos?$/],
*[highway = path][name =~ /^(?i)Trilhos?$/],
*[highway][name =~ /^(?i)Estrad[ãa]o( de Terra)?$/],
*[natural = tree][name =~ /^(?i)[ÁA]rvores?$/],
*[amenity = drinking_water][name =~ /^(?i)(Fonte|Bebedouro)$/],
*[amenity = post_office][name =~ /^(?i)Correios$/],
*[amenity = fuel][name =~ /^(?i)(Estação|Posto|Bombas)(de (Serviço|Combustível|Gasolina))?$/],
*[amenity = parking][name =~ /^(?i)Parque((de )?Estacionamento)?$/],
*[amenity = bank][name =~ /^(?i)Banco$/],
*[amenity = bench][name =~ /^(?i)Bancos?$/] {
        throwWarning: tr("PT2-Nome supérfluo ou incompleto");
}
/* nomes e ruas escritos totalmente em maiúsculo */
*[name =~ /^[A-Z0-9]*[A-Z]+[A-Z0-9]*$/],
*["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 =~ /(.*)?[A-Z]{2}[a-z]/],
*["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 =~ /^(?i)edifício/][!building][name !~ /^(?i)\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 =~ /^(?i)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 =~ /(?i)\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"][!building][!"building:part"][!"amenity:parking"] {
        throwWarning: tr("PT2- {0} sem etiqueta {1}", "{0.key}", "{1.key}");
}
*["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 =~ /^(?i)(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][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");
}
*[amenity=fuel][!brand][name =~ /^(?i)(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 nome de posto costuma ser extenso.");
                fixChangeKey: "name => brand";
}
*[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[waterway] > node.area_ligada_via,
way[highway] > 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[waterway] > node.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,rios 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 =~ /(?i)Posto (de )?Turismo/][name][information != office][!highway][name !~ /(?i)\b(Parque|Estacionamento)\b/] {
        throwWarning: tr("PT2-Posto de Turismo deve ter information=office e tourism=information");
        fixAdd: "information=office";
                fixAdd: "tourism=information";
}


/* 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 um 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.