wiki:Rules/Portuguese-Errors-PT2

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.35_2016-02-23";
description: "AVISO: APLICAR APENAS EM PORTUGAL. 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 "Portugal" para serem facilmente identificados. Verificar com CUIDADO os erros apresentados por esta lista, pois nem sempre são erros.";
icon: "data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAACQAAAAYCAYAAACSuF9OAAAABHNCSVQICAgIfAhkiAAAAAlwSFlzAAAA1QAAANUBVNmqYgAAABl0RVh0U29mdHdhcmUAd3d3Lmlua3NjYXBlLm9yZ5vuPBoAAAInSURBVEiJ7dZbaM1xAMDxzzlnLsOG5jb3kTG5LF5YmJIihZkHKTyQIrUnzYPiCQmvcnlCIdfcS2jm0shtlhXN2AMROa4d2875e6DsybFzRnvY9+X/8vv9+/T7/f79/iGrBVJoTyWra1OZ+efCbf/K9OoAJasDlKyM1gyePoo1M8jOpHgT7qMBO/H8P4O2L44Y2Sfb1ku8+UTFbHqsxQTsD9gb5ch/AlWuZ0SPfP13NVh0qjPfiUdifOkqiMYFFQOFt0QZ5Odq/UtQQS5FIwliRGq+Mn2uoKDQl8HP9SzPF6o6LvTyIw+wLn1Q0kM9u4BTD/j2HZcxa6HGsg1Kr5dQXs7QIqq7sRw3UJgeKGKyzX8asK2UEF6/62vooHdeZs1SFcuVl5vlSX3U8KZzMsbWCi/4zHhk/YKnWNIVCiXolMG3RFzGgZBwrLvmpoTGeEKssVnnV71EKnLogohWfrcpgE4+5Owjlh6oFwR5htVWmlM0xJlrL6yaP1rX+3fJGcJX1OBgeqBQstu+fzb3NlL5lJlV8/RLXBRuKPNh4hS9rx4Sn3RepHAO4y7QiAHpgZKu0JtP3Kln/GBuTr3ifayEo8f0XrGEu3UimfPpdIFMaZ2dvwbBot1cfExTImZu0wkzyqLe3h5D8IzDp39u10osSx+UdMtaVpzP2mJ6dmNaDt2rUYcdv55tUKtALdt3i1U1bYNoWcq3fSLelozftbvfjw5Qstod6AdjIqVa7Sr8fwAAAABJRU5ErkJggg==";
author: "OSM Portugal";
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.
 * 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, mesmo que sejam
 * países que têm como língua oficial o Português, pois cada país têm características específicas de estradas, nomes de organizações, etc.
 *
 * Se encontrarem algum erro podem editar esta página.
 * 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("PORTUGAL-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("PORTUGAL- {0} não se aplica em Portugal", "{0.value}");
        suggestAlternative: "residential";
        fixAdd: "highway=residential";
}
*[highway=bridleway] {
        throwError: tr("PORTUGAL- bridleway não se aplica em Portugal, usar highway=path");
                fixAdd: "highway=path";
}
*[amenity=biergarten] {
        throwError: tr("PORTUGAL- amenity=biergarten não se aplica em Portugal, usar amenity=pub");
}
*[railway=monorail] {
        throwError: tr("PORTUGAL-Não existem monocarris em Portugal, será ferrovia?");
}
*[shop=bike] {
        throwError: tr("PORTUGAL-Não é shop=bike mas sim shop=bicycle");
        fixAdd: "shop=bicycle";
}
*[amenity=association] {
        throwError: tr("PORTUGAL-Não é amenity=association mas sim office=association");
        fixChangeKey: "amenity => office";
}



 /* AVISOS */
*[/name|name:pt|addr:street|addr:city/ =~ /\s([dn]as?|[dn]os?|de)\s[a-z]/] {
                throwWarning: tr("PORTUGAL-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|name:pt)$/ !~ /^European route/] {
                throwWarning: tr("PORTUGAL-name, addr:street ou addr:city com maiúscula em Da,No,De,E...");
}
/* nomes e ruas escritos totalmente em maiúsculo */
*[/^(name|name:pt)$/ =~ /^[A-Z0-9 ]*[A-Z]+[A-Z0-9 ]*$/][/^(name|name:pt)$/ !~ /^BP$/][/^(name|name:pt)$/ !~ /^(E(\.|\s)?[NRM]|C(\.|\s)?M)(\.|\s)?[1-9]/],
*["addr:street" =~ /^[A-Z0-9 ]*[A-Z]+[A-Z0-9 ]*$/],
*["addr:city" =~ /^[A-Z0-9 ]*[A-Z]+[A-Z0-9 ]*$/] {
        throwWarning: tr("PORTUGAL-name ou name:pt c/letras apenas em maiúsculo, usar short_name e o nome por extenso se for sigla");
}
*["addr:street" =~ /^[A-Z0-9 ]*[A-Z]+[A-Z0-9 ]*$/],
*["addr:city" =~ /^[A-Z0-9 ]*[A-Z]+[A-Z0-9 ]*$/] {
        throwWarning: tr("PORTUGAL-addr:street ou addr:city c/letras apenas em maiúsculo");
}
*[/^(name|name:pt|addr:street|addr:city)$/ =~ /^[a-z]/] {
                throwWarning: tr("PORTUGAL-name, addr:street ou addr:city que começa em minúscula");
}
*[/name|name:pt|addr:street|addr:city/ =~ /^([!,:;_ºª+=]|\.|\?|\*|-)/] {
                throwWarning: tr("PORTUGAL-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("PORTUGAL- {0} com 2 espaços em branco consecutivos", "{0.key}");
}
*[website =~ /\s/][name !~ /(\s;|;\s)/] {
                throwWarning: tr("PORTUGAL-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|name:pt)$/ !~ /(?i)(?u)soldado desconhecido/] {
                throwWarning: tr("PORTUGAL-Nome errado, sem nome...");
}
way[highway][/name|name:pt|addr:street/ =~ /(-Os-|\sos\s)/] {
                throwWarning: tr("PORTUGAL-Corrigir nome ou endereço com o correto X-os-X");
}
way[highway][/name|name:pt|addr:street/ =~ /-O-/] {
                throwWarning: tr("PORTUGAL-Corrigir nome ou endereço com o correto em minúscula X-o-X");
}
way[highway][/name|name:pt|addr:street/ =~ /-A-/] {
                throwWarning: tr("PORTUGAL-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("PORTUGAL-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("PORTUGAL-Nome abreviado");
}
*["addr:city" =~ /\b[A-Z](\.| )/] {
                throwWarning: tr("PORTUGAL-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("PORTUGAL-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("PORTUGAL-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("PORTUGAL-Nome abreviado-NÃO alterar se for nome de estabelecimento");
}
*[/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("PORTUGAL-Pontuação repetida 2 ou mais vezes");
}
*[/^(name|name:pt)$/ =~ /\s['"»«ºª]\s/] {
                throwWarning: tr("PORTUGAL-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("PORTUGAL- {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("PORTUGAL- {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?\b|\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|Combust(ívé|iv[ée])ive(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|Folclorico|\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|\bVicio\b|\bV(ir[gj]i|jí|erj[íi]|ergi)li|Veter(i?na|en[áa])ri|\bVilaret?\b|Vitoria|Voluntario)/] {
                throwWarning: tr("PORTUGAL-Verificar:name ou similares, addr:street, addr:city com erros ortográficos");
}
/* 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("PORTUGAL-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))?$/][highway!=bus_stop] {
        throwWarning: tr("PORTUGAL-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("PORTUGAL-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|Carreiro|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("PORTUGAL- 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|Carreiro|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)/][name !~ /^(E(\.|\s)?[NRM]|C(\.|\s)?M)(\.|\s)?[1-9]/] {
        throwWarning: tr("PORTUGAL- {0} sem nome de via, errado, abreviado ou maiúsculas no nome", "{0.key}");
}
/* casos de marcas complicadas em que o melhor é indicar o nome correto na mensagem */
*[name =~ /(?i)(?u)[Dd]ecat?[hl]?on/] {
                throwWarning: tr("PORTUGAL-Correto é Decathlon");
}
*[name =~ /(?i)(?u)Ma?c(\s[Dd]onald('|\s)?|[Dd]onald\s?)s/] {
                throwWarning: tr("PORTUGAL-Correto é McDonalds com apóstrofo antes do s");
}
*[name =~ /\b(Axxa|axx?a)\b/] {
                throwWarning: tr("PORTUGAL-Correto é Axa");
}
*[name =~ /(?i)(?u)\b[Ll]evi[ ´]?s\b/] {
                throwWarning: tr("PORTUGAL-Correto é Levis com apóstrofo antes do s");
}
*[name =~ /[Pp]ingo((D|d| d)ol?ce| Dolce)/] {
                throwWarning: tr("PORTUGAL-Correto é Pingo Doce");
}
*[name =~ /\b([Ee][Ll]ecler[kqc]|[Ee]\.[Ll]ecler[kq]|e\.Leclerc|E\.leclerc)/] {
                throwWarning: tr("PORTUGAL-Correto é E.Leclerc");
}
*[name =~ /(?i)(?u)(Inter?(\s|-)?ma(rche|x[ée]|r?che)|Inter(\s|-)marché)/] {
                throwWarning: tr("PORTUGAL-Correto é Intermarché");
}
*[name =~ /(?i)(?u)\bDeca(te?lo[mn]|th?lom|tom)\b/] {
                throwWarning: tr("PORTUGAL-Correto é Decathlon");
}
*[name =~ /(mini(\s|-)?preço|Mini(\s|-)preço|Mini(\s|-)?Preço|MINI(\s|-)?PREÇO)/] {
                throwWarning: tr("PORTUGAL-Correto é Minipreço");
}
*[name =~ /(?i)(?u)(^Phone House|[FP]one Hou[zs]e)/] {
                throwWarning: tr("PORTUGAL-Correto é The Phone House");
}
*[name =~ /Banco Português de Investimento/][!short_name] {
                throwWarning: tr("PORTUGAL-Falta a etiqueta short_name=BPI");
        fixAdd: "short_name=BPI";
}
*[name =~ /Caixa Geral de Depósitos/][!short_name] {
                throwWarning: tr("PORTUGAL-Falta a etiqueta short_name=CGD");
        fixAdd: "short_name=CGD";
}
*[name =~ /Banco Espírito Santo/][!short_name] {
                throwWarning: tr("PORTUGAL-Falta a etiqueta short_name=BES");
        fixAdd: "short_name=BES";
}
*[name =~ /Banco Bilbao Vizcaya Argentaria/][!short_name] {
                throwWarning: tr("PORTUGAL-Falta a etiqueta short_name=BBVA");
        fixAdd: "short_name=BBVA";
}
*[name =~ /Guarda Nacional Republicana/][!short_name] {
                throwWarning: tr("PORTUGAL-Falta a etiqueta short_name=GNR");
        fixAdd: "short_name=GNR";
}
*[name =~ /Polícia de Segurança Pública/][!short_name] {
                throwWarning: tr("PORTUGAL-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("PORTUGAL-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("PORTUGAL-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("PORTUGAL-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("PORTUGAL-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("PORTUGAL-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("PORTUGAL-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("PORTUGAL-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("PORTUGAL-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("PORTUGAL-Nome abreviado ou errado de Millennium bcp");
                fixAdd: "name=Millennium bcp";
                fixAdd: "alt_name=Banco Comercial Português";
}
*[name =~ /^Banco Comercial Português$/] {
                throwWarning: tr("PORTUGAL-O correto é Millennium bcp");
                fixAdd: "name=Millennium bcp";
                fixAdd: "old_name=Banco Comercial Português";
}
*[alt_name =~ /^Banco Comercial Português$/] {
                throwWarning: tr("PORTUGAL-Banco Comercial Português deve estar em old_name");
                fixChangeKey: "alt_name => old_name";
}
*[amenity = bank][name =~ /^(?i)(?u)(Banco )?(Santander|Tott?a|SantanderTott?a|Tott?a\s?Santander)$/] {
                throwWarning: tr("PORTUGAL-O correto é Santander Totta");
                fixAdd: "name=Santander Totta";
}
*[name =~ /(?i)(?u)Benett?o[mn]\b/][name !~ /\bUnited Colors\b/] {
                throwWarning: tr("PORTUGAL-O correto é United Colors of Benetton");
}
*[amenity = bank][name =~ /^(?i)(?u)(Banco )?BANIF$/] {
                throwWarning: tr("PORTUGAL-Nome abreviado de Banco Internacional do Funchal");
                fixAdd: "name=Banco Internacional do Funchal";
                fixAdd: "short_name=Banif";
}
*[/^(name|name:pt)$/ =~ /^(?i)(?u)((Loja (Social|Solid[áa]ria)|EMA[ÚU]S|\bREMAR\b)|EMA[ÚU]S|\bREMAR\b)$/][shop !~ /charity/][!highway][!railway][!boundary][!place] {
        throwWarning: tr("PORTUGAL-Provavelmente devia ter shop=charity, caso tenha outra, adicionar esta também");
}
*[/^(name|name:pt)$/ =~ /^Alfarrabista/][shop=books][!second_hand] {
        throwWarning: tr("PORTUGAL-Alfarrabista deve ter second_hand=yes ou second_hand=only se vender apenas livros em 2ª mão");
}
*[place = city][!name],
*[place = town][!name],
*[place = village][!name] {
        throwWarning: tr("PORTUGAL- {0} sem nome", "{0.value}");
}
node[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/][amenity][amenity !~ /^(university|restaurant|cafe|pub|bar)$/][!highway][!railway][!boundary][!place][!shop],
node[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/][!amenity][!highway][!railway][!boundary][!place][!shop],
way[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/][amenity][amenity !~ /^(university|restaurant|cafe|pub|bar)$/][!highway][!railway][!boundary][!place][!shop],
way[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/][!amenity][!highway][!railway][!boundary][!place][!shop] {
        throwWarning: tr("PORTUGAL-Provavelmente devia ter amenity=university");
}
*[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/][amenity][amenity =~ /^(university|college|kindergarten|driving_school)$/][!highway][!railway][!boundary][!place][!shop],
*[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/][!amenity][!highway][!railway][!boundary][!place][!shop] {
        throwWarning: tr("PORTUGAL-Provavelmente devia ter amenity=school");
}
*[name =~ /^(?i)(?u)\b(Colégio|Internato|Real Colégio)\b/][amenity][amenity =~ /^(university|school|kindergarten|driving_school)$/][!highway][!railway][!boundary][!place][!shop],
*[name =~ /^(?i)(?u)\b(Colégio|Internato|Real Colégio)\b/][!amenity][!highway][!railway][!boundary][!place][!shop] {
        throwWarning: tr("PORTUGAL-Provavelmente devia ter amenity=college");
}
*[name =~ /^(?i)(?u)\b(creche|jardim infantil|jardim de infância|infantário|externato|pré-primária)\b/][amenity][amenity =~ /^(university|school|college|driving_school)$/][!highway][!railway][!boundary][!place][!shop],
*[name =~ /^(?i)(?u)\b(creche|jardim infantil|jardim de infância|infantário|externato|pré-primária)\b/][!amenity][!highway][!railway][!boundary][!place][!shop] {
        throwWarning: tr("PORTUGAL-Provavelmente devia ter amenity=kindergarten");
}
*[name =~ /^(?i)(?u)\bEscola de Condução\b/][amenity][amenity =~ /^(university|school|college|kindergarten)$/][!highway][!railway][!boundary][!place][!shop],
*[name =~ /^(?i)(?u)\bEscola de Condução\b/][!amenity][!highway][!railway][!boundary][!place][!shop] {
        throwWarning: tr("PORTUGAL-Provavelmente devia ter amenity=driving_school");
}
*[amenity = college]  *[amenity = college] {
        throwWarning: tr("PORTUGAL- {0} dentro de {1}", "amenity=college", "{0.tag}");
}
*[landuse = cemetery]  *[landuse = cemetery] {
        throwWarning: tr("PORTUGAL- landuse=cemetery dentro de landuse = cemetery");
}
*[shop]  *[shop][shop !~ /mall|department_store|supermarket/][amenity!=fuel] {
        throwWarning: tr("PORTUGAL- shop dentro de shop");
}
*[shop=supermarket]  *[shop=supermarket] {
        throwWarning: tr("PORTUGAL- shop=supermarket dentro de shop=supermarket");
}
*[amenity=police]  *[amenity=police] {
        throwWarning: tr("PORTUGAL- amenity=police dentro de amenity=police");
}
*[/^(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("PORTUGAL-Seguradora e Mediador de Seguros deve ter office=insurance");
}
*[/^(name|name:pt)$/ =~ /(?i)(?u)\b(Stande?|Automóveis|Concessionário)\b/][shop != car] {
        throwWarning: tr("PORTUGAL-Stande de Automóveis deve ter shop=car");
}
*[/^(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("PORTUGAL-Reparador de Automóveis deve ter shop=car_repair");
}
*[/^(name|name:pt)$/ =~ /(?i)(?u)Lavagem/][name][amenity != car_wash] {
        throwWarning: tr("PORTUGAL-Local de Lavagem de Automóveis deve ter amenity=car_wash");
}
*[/^(name|name:pt)$/ =~ /(?i)(?u)Park Meter/][name][amenity != vending_machine] {
        throwWarning: tr("PORTUGAL-Máquina de bilhetes de parque de estacionamento deve ter amenity=vending_machine e vending=parking_tickets");
}
*[/^(name|name:pt)$/ =~ /^(?i)(?u)(Hospital|Centro Hospitalar|(Centro|Extensão) (de )?Saúde) /][name][building][building != hospital] {
        throwWarning: tr("PORTUGAL-Edifício de Hospital ou Centro de Saúde deve ter building=hospital");
}
*[/^(name|name:pt)$/ =~ /^(?i)(?u)(Hospital|Centro Hospitalar|(Centro|Extensão) (de )?Saúde) /][name][amenity][amenity != hospital][/^(name|name:pt)$/ !~ /(?i)(?u)\b(Parque|Estacionamento)\b/] {
        throwWarning: tr("PORTUGAL-Hospital e Centro de Saúde deve ter amenity=hospital");
}
*[/^(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("PORTUGAL-Cabine da EDP deve ter building=transformer_tower power=substation e substation=minor_distribution");
}
*[/^(name|name:pt)$/ =~ /^(?i)(?u)Estação (de Comboios|Ferroviária|(da)? CP|(dos )?Caminhos de Ferro) /][name][building != train_station][public_transport != station] {
        throwWarning: tr("PORTUGAL-Estação de Comboios sem building=train_station ou 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("PORTUGAL-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("PORTUGAL-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("PORTUGAL-Empresa de venda de material hospitalar deve ter shop=medical_supply");
}
*[/^(name|name:pt)$/ =~ /(?i)(?u)Noiv[ao]s/][shop=clothes][!clothes] {
        throwWarning: tr("PORTUGAL-Loja de roupa para noivas deve ter 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("PORTUGAL-Loja de roupa para criança deve ter clothes=children");
}
*[/^(name|name:pt|note)$/ =~ /(?i)(?u)\b(Roupa (de |para )?B[ée]b[ée]s?)\b/][shop=clothes][!clothes] {
        throwWarning: tr("PORTUGAL-Loja de roupa para bebé deve ter clothes=babies");
}
*[/^(name|name:pt)$/ =~ /(?i)(?u)\b(Salsa|Levi's|Levi Strauss|Pepe Jeans|Lee|W52)\b/][shop=clothes][!clothes] {
        throwWarning: tr("PORTUGAL-Loja essencialmente de jeans deve ter clothes=denim");
}
*[/^(name|name:pt)$/ =~ /(?i)(?u)\b(lingerie|women'secret|Calzedonia|Intimissimi|Loja das Meias)\b/][shop=clothes][!clothes] {
        throwWarning: tr("PORTUGAL-Loja de roupa interior,meias,etc. deve ter clothes=underwear");
}
*["addr:country"]["addr:country" !~ /^PT$/] {
        throwWarning: tr("PORTUGAL-O país na morada deve ter o código 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("PORTUGAL-Nome supérfluo ou incompleto");
}
node[highway=street_lamp][name] {
        throwWarning: tr("PORTUGAL-Poste de Iluminação com nome");
}
*[building][/^(name|name:pt)$/ =~ /^(?i)(?u)(Habita[çc][ãa]o|Casa|Moradia|Vivenda)?$/] {
        throwWarning: tr("PORTUGAL-Nome supérfluo em edifício que deve ter building=house");
}

/* Erro comum como Rua do CRuzeiro */
*[/^(name|name:pt|addr:street)$/ =~ /[A-Z]{2}[a-z]/] {
        throwWarning: tr("PORTUGAL-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|name:pt)$/ !~ /^(?i)(?u)\bEdifício Transparente\b/] {
        throwWarning: tr("PORTUGAL-Possível ausência de etiqueta {0}", "{1.key}");
}
*["addr:postcode"]["addr:postcode" !~ /^[0-9]{4}(-[0-9]{3})?$/],
*[postal_code][postal_code !~ /^[0-9]{4}(-[0-9]{3})?$/] {
        throwWarning: tr("PORTUGAL-Código postal em formato diferente de NNNN-NNN ou NNNN");
}
node[surface] {
        throwWarning: tr("PORTUGAL-Superfície ({0}) num nó", "{0.key}");
}
/* highway/waterway com layer negativo e sem túnel */
*[highway][layer < 0][!tunnel],
*[waterway][layer < 0][!tunnel] {
        throwWarning: tr("PORTUGAL-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("PORTUGAL-Verificar: {0} positivo de {1} com ausência de {2}", "{1.key}", "{0.key}", "{2.key}");
}
way[highway = motorway_junction] {
        throwError: tr("PORTUGAL- {0} deve ser utilizado apenas no nó de saída da estrada", "{0.tag}");
        suggestAlternative: "highway=motorway_link";
}
/* estradas de 2 vias mas apenas com 1 faixa estão provavelmente erradas */
*[highway][lanes = 1][!oneway?][!junction] {
        throwWarning: tr("PORTUGAL- {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("PORTUGAL- {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("PORTUGAL- {0} ausência de boundary=administrative", "{0.key}");
}
relation[boundary=administrative][!admin_level] {
        throwError: tr("PORTUGAL- {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("PORTUGAL- {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("PORTUGAL- {0} ausência de boundary=administrative", "{0.key}");
}
relation[boundary=administrative][type=multipolygon] {
        throwError: tr("PORTUGAL-Relação deve ser do tipo ''type=boundary''");
}
node[destination],
relation[destination][type != waterway] {
        throwWarning: tr("PORTUGAL- {0} deve-se usar apenas em linhas", "{0.key}");
}
/* landuse não deve ter layer */
*[landuse][layer] {
        throwWarning: tr("PORTUGAL-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("PORTUGAL-Uso incorreto de {0}", "{1.key}");
        suggestAlternative: "trail_visibility";
}
/* tracktype é uma propriedade de tracks apenas */
way[highway != track][tracktype] {
        throwWarning: tr("PORTUGAL-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("PORTUGAL-Saída de via ({0}) fora do padrão", "{1.key}");
}
*[alt_ref] {
        throwWarning: tr("PORTUGAL-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("PORTUGAL-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("PORTUGAL-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("PORTUGAL-Ausência de etiqueta ''{0}''", "{1.value}");
}
*[amenity = love_hotel][tourism][tourism != motel] {
        throwWarning: tr("PORTUGAL-Verificar: provavelmente deve ser ''{0}={1}''", "{2.key}", "{2.value}");
}
*["building:levels" < 1] {
        throwWarning: tr("PORTUGAL-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("PORTUGAL-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("PORTUGAL-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("PORTUGAL- {0} deve estar incluído em {1}, separado por '';'' caso necessário", "{0.key}", "{1.key}");
}
*[access = permissive] {
        throwWarning: tr("PORTUGAL-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("PORTUGAL- {0} provavelmente deve ser utilizado como {1}", "{1.key}", "{2.key}");
}
*[crossing][!highway][!railway] {
        throwWarning: tr("PORTUGAL- 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("PORTUGAL-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("PORTUGAL- {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("PORTUGAL- {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("PORTUGAL- {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("PORTUGAL-Verificar: via possivelmente errada com {0}", tag("highway"));
}
node[noname?] {
        throwWarning: tr("PORTUGAL-Verificar: uso suspeito de {0} num nó", "{0.key}");
}
/* source estranhamente igual o name */
*[source = *name] {
        throwWarning: tr("PORTUGAL-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("PORTUGAL-Juntas de Freguesia e Câmaras Municipais deve ter amenity=townhall");
}
*[vatin][!"ref:vatin"],
*[nif][!"ref:vatin"],
*[NIF][!"ref:vatin"],
*[nipc][!"ref:vatin"],
*[NIPC][!"ref:vatin"] {
        throwWarning: tr("PORTUGAL-Etiqueta errada para Número de Identificaçáo Fiscal, usar ref:vatin=XXX", "{0.key}", "{1.key}");
}
*["ref:vatin"]["ref:vatin" !~ /^PT[0-9]{9}$/] {
        throwWarning: tr("PORTUGAL-Número de Identificaçáo Fiscal tem de ter o formato PTxxxxxxxxx");
}
*["phone:pt"][!phone] {
        throwWarning: tr("PORTUGAL-Chave de etiqueta mal aplicada phone:pt sem haver etiqueta phone");
}
node[layer < 0][amenity=parking] {
        throwWarning: tr("PORTUGAL-provavelmente é uma entrada/saída parque estac.subterrâneo, usar amenity=parking_entrance e parking=underground");
}
node[layer > 0][amenity=parking] {
        throwWarning: tr("PORTUGAL-provavelmente é uma entrada/saída parque estac.no topo de 1 edifício, usar amenity=parking_entrance e parking=rooftop");
}
node:unconnected[amenity=parking_entrance] {
        throwWarning: tr("PORTUGAL-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("PORTUGAL-provavelmente layer devia ser level - nº de andar ou não ter layer");
}
*[natural][shop] {
        throwWarning: tr("PORTUGAL-natural junto com shop");
}
*[/name|brand|operator/ =~ /\b(5 (à s|[áa]\s[Ss])ec)\b/] {
        throwWarning: tr("PORTUGAL-O correto é 5 à Sec");
}
*[amenity=fuel][!brand][name =~ /^(?i)(?u)(Agip|BP|Cepsa|Esso|Exxon|Galp|Mobil|Repsol|Shell|Total)?$/] {
        throwWarning: tr("PORTUGAL-Marca de combustível deve estar em brand e não name. O posto costuma ser de privados e com nome extenso ");
}
*[/name|brand|operator/ =~ /\b(galp|GALP)\b/] {
        throwWarning: tr("PORTUGAL-O correto é Galp e não GALP ou galp");
}
*[/name|brand|operator/ =~ /\b(CEPSA|cepsa)\b/] {
        throwWarning: tr("PORTUGAL-O correto é Cepsa e não CEPSA ou cepsa");
}
*[/name|brand|operator/ =~ /\b(ESSO|esso)\b/] {
        throwWarning: tr("PORTUGAL-O correto é Esso e não ESSO ou esso");
}
*[/name|brand|operator/ =~ /\b(EXX?ON|exx?on)\b/] {
        throwWarning: tr("PORTUGAL-O correto é Exxon e não EXXON ou exxon");
}
*[/name|brand|operator/ =~ /\b(REPSOL|repsol)\b/] {
        throwWarning: tr("PORTUGAL-O correto é Repsol e não REPSOL ou repsol");
}
*[/name|brand|operator/ =~ /\b(SHELL?|shell?)\b/] {
        throwWarning: tr("PORTUGAL-O correto é Shell e não SHELL ou shell");
}
*[amenity=fuel][/name|brand|operator/ =~ /\b(TOTAL|total)\b/] {
        throwWarning: tr("PORTUGAL-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("PORTUGAL-O correto é MultiOpticas");
}
*[amenity=fuel][/name|brand|operator/ =~ /\b(L[ÍI]DE?L|l[íi]de?l|Líde?l)[Ee]?\b/] {
        throwWarning: tr("PORTUGAL-O correto é Lidl");
}
*[name][name =~ /\b(L[ÍI]DE?L|l[íi]de?l|Líde?l)[Ee]?\b/] {
        throwWarning: tr("PORTUGAL-O correto é Lidl");
}
*[wikipedia][wikipedia !~ /^pt:/] {
        throwWarning: tr("PORTUGAL-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("PORTUGAL-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("PORTUGAL-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|name:pt)$/ !~ /(?i)(?u)\b(Parque|Estacionamento)\b/] {
        throwWarning: tr("PORTUGAL-Posto de Turismo deve ter information=office e tourism=information");
}
*[capacity=0] {
        throwWarning: tr("PORTUGAL-Valor provavelmente errado de capacity=0");
}
*[ele][ele !~ /^[1-9][0-9]?[0-9]?[0-9]?(\.[0-9][0-9]?[0-9]?)?$/],
*[ele > 2351],
*[ele < 0] {
        throwWarning: tr("PORTUGAL-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("PORTUGAL-Adro de igreja deve ter landuse=churchyard");
}
*[/^(name|name:pt)$/ =~ /^(?i)(?u)Cruzeiro/][name][historic != wayside_cross][!railway][!highway][!boundary][!place][!shop][!amenity] {
        throwWarning: tr("PORTUGAL-Cruzeiro ou cruz em zonas urbanas deve ter historic=wayside_cross");
}
*["addr:housenumber" =~ /^(?i)(?u)n\.?º?/] {
        throwWarning: tr("PORTUGAL-addr:housenumber não deve ter NºX, apenas o número de porta");
}
*[building][ele][ele =~ /^[1-3]?[0-9]$/] {
        throwWarning: tr("PORTUGAL-Verificar: edifício com etiqueta ele com valores que parecem nº de andares, pode ser building:levels");
}
*[religion=christian][denomination=catholic][!route] {
        throwWarning: tr("PORTUGAL-Locais de oração cristãos devem ter denomination=roman_catholic e não a genérica denomination=catholic");
}
*[name][name =~ /^(?i)(?u)Depósito de Água/][man_made][man_made != water_tower][!railway][!highway][!boundary][!place][!shop][!amenity] {
        throwWarning: tr("PORTUGAL-Depósito de água deve ter man_made=water_tower");
}
*[name][name =~ /^(?i)(?u)Estádio/][leisure][leisure != stadium] {
        throwWarning: tr("PORTUGAL-Estádio deve ter leisure=stadium");
}
*[name][name =~ /^".*"$/] {
        throwWarning: tr("PORTUGAL-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)Oliveiras?/][natural=tree][!genus],
*[/^(name|name:pt|note|description)$/ =~ /(?i)(?u)Oliveiras?/][natural=tree][!leaf_cycle] {
        throwWarning: tr("PORTUGAL-Oliveira deve ter genus=Olea e leaf_cycle=evergreen, retirar nome");
}
*[/^(name|name:pt|note|description)$/ =~ /(?i)(?u)Plátanos?/][natural=tree][!genus],
*[/^(name|name:pt|note|description)$/ =~ /(?i)(?u)Plátanos?/][natural=tree][!leaf_cycle],
*[/^(name|name:pt|note|description)$/ =~ /(?i)(?u)Plátanos?/][natural=tree][!leaf_type] {
        throwWarning: tr("PORTUGAL-Plátano deve ter genus=Platanus, leaf_cycle=deciduous e leaf_type=broadleaved, retirar nome");
}
*[/^(name|name:pt|note|description)$/ =~ /(?i)(?u)Pinheiros?/][natural=tree][!genus],
*[/^(name|name:pt|note|description)$/ =~ /(?i)(?u)Pinheiros?/][natural=tree][!leaf_cycle],
*[/^(name|name:pt|note|description)$/ =~ /(?i)(?u)Pinheiros?/][natural=tree][!leaf_type] {
        throwWarning: tr("PORTUGAL-Pinheiro deve ter genus=Pinus, leaf_cycle=evergreen e leaf_type=needleleaved, retirar nome");
}
node[addr:housenumber]  *[building][addr:housenumber] {
        throwWarning: tr("PORTUGAL-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("PORTUGAL-addr:housenumber com nº de telefone em vez de nº de porta");
}
*["addr:housenumber"]["addr:housenumber" =~ /(\\|-|,|\.|\/)/] {
        throwWarning: tr("PORTUGAL-Os nº em addr:housenumber devem ser separados por ponto e vírgula apenas");
}
*[name][name =~ /^(?i)(?u)((isto é Um )?Teste|(Para |A )?Testar|Experiência)$/] {
        throwWarning: tr("PORTUGAL-Verificar: nome Teste");
}
*[!ref][name][name =~ /^(E(\.|\s)?[NRM]|C(\.|\s)?M)(\.|\s)?[1-9]/] {
                throwWarning: tr("PORTUGAL-name c/ referência da estrada mas sem ref, passar name para ref");
}
*[!ref]["name:pt"]["name:pt" =~ /^(E(\.|\s)?[NRM]|C(\.|\s)?M)(\.|\s)?[1-9]/] {
                throwWarning: tr("PORTUGAL-name:pt c/ referência da estrada mas sem ref, passar name:pt para ref");
}








/* AVISOS INFORMATIVOS */

/* é útil ter o destino das saídas de estradas */
*[highway = motorway_link][!destination] {
        throwOther: tr("PORTUGAL- {0} sem etiqueta {1}", "{0.value}", "{1.key}");
}
*[place = city][!population],
*[place = town][!population],
*[place = village][!population] {
        throwOther: tr("PORTUGAL- {0} sem etiqueta de população", "{0.value}");
}
*[place][place !~ /hamlet|island|isolated_dwelling|neighbourhood|suburb|village/][population < 10000] {
        throwOther: tr("PORTUGAL-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("PORTUGAL-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("PORTUGAL-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("PORTUGAL-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("PORTUGAL- {0} sem etiqueta de acessibilidade ({1})", "{0.key}", "{1.key}");
}
*[route = ferry][!duration] {
        throwOther: tr("PORTUGAL-Ausência do tempo de duração ({0}) do ferry", "{1.key}");
}
*[highway = service][!service] {
        throwOther: tr("PORTUGAL-Ausência do tipo de serviço ({0}) na {1}", "{1.key}", "{0.key}");
}
*[highway = track][!tracktype] {
        throwOther: tr("PORTUGAL-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("PORTUGAL- {0} sem número de faixas ({1}) definido", "{0.key}", "{1.key}");
}
way[highway][!surface][highway != bus_stop] {
        throwOther: tr("PORTUGAL- {0} sem superfície ({1}) definida", "{0.key}", "{1.key}");
}
node[amenity = place_of_worship] {
        throwOther: tr("PORTUGAL-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("PORTUGAL-Adicionar {0} ao {1}", "{1.key}", "{0.tag}");
}
node[junction=roundabout] {
        throwWarning: tr("PORTUGAL-Rotunda num nó, é melhor num círculo");
}

Rules_Portuguese-Errors-PT2.validator.mapcss, Rules_Portuguese-Errors-PT2.zip

Last modified 20 months ago Last modified on 2016-02-23T21:22:59+01:00