Predefinição:BibRules/Old e Módulo:AutRules: mudanças entre as páginas

De Wikincat
< Validar catalogação(Diferenças entre páginas)
Ir para navegação Ir para pesquisar
imported>Jaideraf
(Criou página com '{{#if: {{Exist|245}} | {{#switch: {{Field data string|000|5|1|property=Leader}} | <!-- Record status --> |n = * Segundo o Líder, este é um registro '''novo''' (não um al...')
 
imported>Jaideraf
(Criou página com 'local p = {} function p.Rules(frame) -- Define o alvo das regras local target = frame:getParent().args[1] or frame.args[1] if target == "" or target == nil then tar...')
 
Linha 1: Linha 1:
local p = {}
{{#if: {{Exist|245}} |

{{#switch: {{Field data string|000|5|1|property=Leader}} | <!-- Record status -->
function p.Rules(frame)
|n = * Segundo o Líder, este é um registro '''novo''' (não um alterado ou revisado, expandido, excluído, etc.).
-- Define o alvo das regras
|c = * Segundo o Líder, este é um registro '''alterado ou revisado''' (não um novo, expandido, excluído, etc.).
local target = frame:getParent().args[1] or frame.args[1]
|a|d|p = * Segundo o Líder, este é um registro '''expandido''' ou '''excluído''' (não novo).
if target == "" or target == nil then
}} {{#switch: {{Field data string|000|6|1|property=Leader}} | <!-- Type of record -->
target = mw.uri.decode(frame:callParserFunction("#urlget", "fullpagename"))
|a = * Segundo o Líder, este registro descreve um '''material textual'''.
end
}} {{#switch: {{Field data string|000|7|1|property=Leader}} | <!-- Bibliographic level -->
if target == "" or target == nil then
|m = * Segundo o Líder, este registro descreve um '''item monográfico''' (não parte de um item, não um item seriado, não uma coleção, etc.).
target = mw.title.getCurrentTitle().prefixedText
}} {{#switch: {{Field data string|000|17|1|property=Leader}} | <!-- Encoding level -->
end
|1 = * Segundo o Líder, este registro tem um nível '''completo''' de catalogação (mas o material não foi examinado).
-- Semantic Scribunto foi carregado?
|# = * Segundo o Líder, este registro tem um nível '''completo''' de catalogação (a descrição foi realizada com o material em mãos).
if not mw.smw then
}} {{#switch: {{Field data string|000|18|1|property=Leader}} | <!-- Descriptive cataloging form -->
return "mw.smw module not found"
|a = * Segundo o Líder, este registro possui uma catalogação '''compatível com as regras do AACR 2'''.
end
|#default = * Segundo o Líder, este registro possui uma catalogação '''não compatível com as regras da ISBD'''.
-- Define variáveis básicas
}} <!-- explica a sintaxe "(Biblioteca)NúmeroDeControle" -->
local info, a, b
* Internamente, este registro é identificado pelo código "{{Field data string|001|0||property=Control field data}}"; para sistemas externos, o código é "({{Field data string|003|0||property=Control field data}}){{Field data string|001|0||property=Control field data}}". <!-- campo 005 e 008 -->
local infos = {}
* O registro foi criado em: {{#show:{{{1|{{#urldecode:{{#urlget:fullpagename|{{FULLPAGENAME}}}}}}}}}|?Creation date#-F[l, d \d\e F \d\e Y]|headers=hide|mainlabel=-}}. Sua última transação foi em: {{#show:{{{1|{{#urldecode:{{#urlget:fullpagename|{{FULLPAGENAME}}}}}}}}}|?Modification date#-F[l, d \d\e F \d\e Y]|headers=hide|mainlabel=-}}. {{#if: {{#regex:{{Field data string|008|15|3|property=Control field data}}|/^[A-Z]/r|}} | * <strong class="error">O uso de maiúsculas não é permitido no campo 008, local de publicação.</strong> | * O item possui a seguinte origem: {{#switch:{{Field data string|008|15|3|property=Control field data}}
-- Funções básicas
|acb = Acre
local function ucfirst(str)
|alb = Alagoas
return (str:gsub("^%l", string.upper))
|amb = Amazonas
end
|apb = Amapá
-- Record status
|bab = Bahia
local recordStatus =
|ceb = Ceará
frame:expandTemplate {
|dfb = Distrito Federal
title = "Field data string",
|esb = Espírito Santo
args = {"000", "5", "1", property = "Leader", fullpagename = target}
|gob = Goiás
} or false
|mab = Maranhão
if recordStatus == "n" then
|mgb = Minas Gerais
a = "Segundo o Líder, este é um registro <b>novo</b> (não um alterado ou revisado, expandido, excluído, etc.)"
|msb = Mato Grosso do Sul
info = string.format("* %s.", a)
|mtb = Mato Grosso
table.insert(infos, info)
|pab = Pará
elseif recordStatus == "c" then
|pbb = Paraíba
a = "Segundo o Líder, este é um registro <b>alterado ou revisado</b> (não um novo, expandido, excluído, etc.)"
|peb = Pernambuco
info = string.format("* %s.", a)
|pib = Piauí
table.insert(infos, info)
|prb = Paraná
elseif recordStatus == "a" or recordStatus == "d" then
|rjb = Rio de Janeiro
a = "Segundo o Líder, este é um registro <b>expandido</b> ou <b>excluído</b> (não novo)"
|rnb = Rio Grande do Norte
info = string.format("* %s.", a)
|rob = Rondônia
table.insert(infos, info)
|rrb = Roraima
end
|rsb = Rio Grande do Sul
-- Encoding level
|scb = Santa Catarina
local encodingLevel =
|seb = Sergipe
frame:expandTemplate {
|spb = São Paulo
title = "Field data string",
|tob = Tocantins
args = {"000", "17", "1", property = "Leader", fullpagename = target}
|bl  = Brasil
} or false
|xxu = Estados Unidos
if encodingLevel == "n" then
|flu = Flórida, EUA
a = "Segundo o Líder, este registro de autoridade está <b>completo</b>"
|nyu = Nova York, EUA
info = string.format("* %s.", a)
|po  = Portugal
table.insert(infos, info)
|xxk = Reino Unido
elseif encodingLevel == "o" then
|fr  = França
a = "Segundo o Líder, este registro de autoridade está <b>incompleto</b>"
|sp  = Espanha
info = string.format("* %s.", a)
|gw  = Alemanha
table.insert(infos, info)
|xx  = <strong class="error">não foi identificado um local de publicação no campo 008</strong>
end
|vp  = há vários locais de publicação
-- Explica a sintaxe '(Biblioteca)NúmeroDeControle'
|esp|eua|fra = <strong class="error">código inválido para o local de publicação</strong>
local f001 =
|    = <strong class="error">é necessário informar um código de local de publicação, campo 008.</strong>
frame:expandTemplate {
|#default = {{Field data string|008|15|3|property=Control field data}}
title = "Field data string",
}}.
}} {{#if: {{#regex:{{Field data string|008|35|3|property=Control field data}}|/^[A-Z]/r|}} |
args = {"001", "0", "", property = "Control field data", fullpagename = target} or ""
}
* <strong class="error">O uso de maiúsculas não é permitido no campo 008, idioma.</strong> |
local f003 =
* Majoritariamente, o item se expressa no seguinte idioma: {{#switch:{{Field data string|008|35|3|property=Control field data}}
frame:expandTemplate {
|por = português
title = "Field data string",
|eng = inglês
args = {"003", "0", "", property = "Control field data", fullpagename = target} or ""
|spa = espanhol
}
|ger = alemão
a = "Internamente, este registro é identificado pelo código"
|fre = francês
b = "para sistemas externos, o código é"
|ita = italiano
info = string.format('* %s "%s"; %s "(%s)%s".', a, f001, b, f003, f001)
|chi = chinês
table.insert(infos, info)
|esp|ing|fra|pt|en|es = <strong class="error">código inválido para o idioma, campo 008</strong>
-- Campo 005
|    = <strong class="error">é necessário informar um código de idioma no campo 008.</strong>
local creationDate =
|#default = {{Field data string|008|35|3|property=Control field data}}
mw.smw.ask("[[" .. target .. "]]|?Creation date#-F[l, d \\d\\e F \\d\\e Y]|headers=hide|mainlabel=-") or ""
}}
if type(creationDate) == "table" then
}} <!-- se existe o campo 041, mostra "(traduzido do...)" na mesma linha do idioma presente no 008 --> {{#if: {{Exist|041}} | {{#ifeq: {{Field data string|041|0|1|}} | 1 | &#32;(traduzido do {{#switch:{{Select|041|h}}
for _, row in pairs(creationDate) do
|por = português
for _, data in pairs(row) do
|eng = inglês
creationDate = data
|spa = espanhol
end
|ger = alemão
end
|fre = francês
end
|ita = italiano
local modificationDate =
|chi = chinês
mw.smw.ask("[[" .. target .. "]]|?Modification date#-F[l, d \\d\\e F \\d\\e Y]|headers=hide|mainlabel=-") or ""
|esp|ing|fra|pt|en|es = <strong class="error">código inválido para o idioma do subcampo $h do campo 041</strong>
if type(modificationDate) == "table" then
|#default = {{Select|041|h}}
for _, row in pairs(modificationDate) do
}}).}}
for _, data in pairs(row) do
}} {{#if: {{Exist|020}} | <!-- testa se existe(m) ISBN(s) inválido(s) --> {{#iferror: {{Print ISBN}} | * <strong class="error">ISBN inválido, por favor, reveja os números informados.</strong>|}} <!-- testa se existe(m) hifen(s) ou x minúsculo no ISBN --> {{#switch: {{#regex:{{#show:{{{1|{{#urldecode:{{#urlget:fullpagename|{{FULLPAGENAME}}}}}}}}}#020|?Field data#|headers=hide|mainlabel=-}}|/-{{!}}x/}}
modificationDate = data
|- = * <strong class="error">O ISBN não pode conter hifens. Apenas números e "X" maiúsculo.</strong>
end
|x = * <strong class="error">O ISBN não pode conter um x minúsculo. Apenas números e "X" maiúsculo.</strong>
end
|#default =}} <!-- testa se há indicadores no campo 020 --> {{#ifeq: {{Field data string|020|0|1|}} | # || * <strong class="error">O primeiro indicador do campo 020 foi preenchido, porém, ele não deve ser preenchido.</strong>}} {{#ifeq: {{Field data string|020|1|1|}} | # || * <strong class="error">O segundo indicador do campo 020 foi preenchido, porém, ele não deve ser preenchido.</strong>}} }} <!-- testa o uso de maiúsculas no campo 041 --> {{#if: {{Exist|041}} | {{#ifeq: {{Field data string|041|0|1|}} | # | * <strong class="error">Talvez o primeiro indicador do campo 041 foi esquecido.</strong>}} {{#if: {{#regex:{{Select|041|a}}|/^[A-Z]/r|}} | * <strong class="error">O uso de maiúsculas não é permitido nos códigos de idioma (campo 041).</strong>}} }} <!-- a seguir, testa se há subcampo $b e se há espaço no subcampo $c do campo 090 --> {{#if: {{Exist|090}} | {{#if: {{Select|090|b}} || * <strong class="error">Está faltando o subcampo $b do campo 090 (notação de Cutter).</strong>}} <!-- a seguir, testa se não foi esquecida a letra do tíulo na notação de Cutter, caso haja um ponto de acesso 1XX --> {{#ifexpr: {{#ask:[[{{{1|{{#urldecode:{{#urlget:fullpagename|{{FULLPAGENAME}}}}}}}}}#100||{{{1|{{#urldecode:{{#urlget:fullpagename|{{FULLPAGENAME}}}}}}}}}#110||{{{1|{{#urldecode:{{#urlget:fullpagename|{{FULLPAGENAME}}}}}}}}}#111||{{{1|{{#urldecode:{{#urlget:fullpagename|{{FULLPAGENAME}}}}}}}}}#130]]|?Field data|format=count|mainlabel=-}} >= 1 | {{#if: {{#regex:{{Select|090|b}}|/[0-9]$/r|}}| * <strong class="error">Falta a letra do título na notação de Cutter.</strong>}} }} {{#if: {{#regex:{{Select|090|c}}|/\sed/r|}} | * <strong class="error">Nossa política de catalogação proíbe espaços na indicação de edição no número de chamada (090 $c).</strong>}} }} <!-- a seguir, testa (conta) se existe mais de um ponto de acesso principal --> {{#ifexpr: {{#ask:[[{{{1|{{#urldecode:{{#urlget:fullpagename|{{FULLPAGENAME}}}}}}}}}#100||{{{1|{{#urldecode:{{#urlget:fullpagename|{{FULLPAGENAME}}}}}}}}}#110||{{{1|{{#urldecode:{{#urlget:fullpagename|{{FULLPAGENAME}}}}}}}}}#111||{{{1|{{#urldecode:{{#urlget:fullpagename|{{FULLPAGENAME}}}}}}}}}#130]]|?Field data|format=count|mainlabel=-}} > 1 | * <strong class="error">Foi registrado '''mais de um ponto de acesso principal'''. Isso não é permitido.</strong>}} <!-- fim do teste de contagem de pontos de acesso principais --> {{#if: {{Exist|100}} | * O ponto de acesso principal foi dado a uma '''pessoa'''{{#switch:{{Field data string|100|0|1|}}
end
|0 = &#32;e a entrada começa pelo seu '''primeiro nome'''.
a = "O registro foi criado em:"
|1 = &#32;e a entrada começa pelo seu '''sobrenome'''.
b = "Sua última transação foi em:"
|3 = &#32;e a entrada começa pelo seu '''nome de família'''.
info = string.format("* %s %s. %s %s.", a, creationDate, b, modificationDate)
|# =, porém, <strong class="error">o primeiro indicador não foi preenchido.</strong>
table.insert(infos, info)
|2|4|5|6|7|8|9 =, porém, <strong class="error">o primeiro indicador foi preenchido incorretamente.</strong>

}}{{#ifeq: {{Field data string|100|1|1|}} | # ||
local accessPointPresence =
* <strong class="error">O segundo indicador do campo 100 foi preenchido, porém, ele não deve ser preenchido.</strong>
frame:callParserFunction {
}} <!-- testa se existe "," no subcampo $a (Nome, Sobrenome) --> {{#if: {{#regex:{{Select|100|a}}|/.*?,./r|}} || * <strong class="error">Em pontos de acesso, o nome pessoal deve ser invertido (Nome, Sobrenome). Verifique o campo 100.</strong>
name = "#ask:[[" ..
}} {{#if: {{#regex:{{Select|100|a}}|/[a-zÀ-ü],[A-ZÀ-ü]/r|}} |* <strong class="error">Falta espaço após a vírgula. Verifique o campo 100.</strong>}} {{#if: {{Select|100|q}} | {{#if: {{#regex:{{Select|100|q}}|/^\(/r|}} || * <strong class="error">O subcampo $q do campo 100 necessita parênteses.</strong>}} }} {{#if: {{Select|100|d}} | {{#if: {{#regex:{{Field data string|100|2|}}|/\$d \d\d\d\d$/r|}} |* <strong class="error">O subcampo $d do campo 100 necessita hífen.</strong>}} }}
target ..
}}{{#if: {{Exist|110}} |
"#100||" ..
* O ponto de acesso principal foi dado a uma '''entidade coletiva'''{{#switch:{{Field data string|110|0|1|}}
target .. "#110||" .. target .. "#111||" .. target .. "#130||" .. target .. "#150||" .. target .. "#151]]",
|0 = &#32;e a entrada começa por um '''nome invertido'''.
args = {"?Field data", format = "count", mainlabel = "-"}
|1 = &#32;e a entrada começa por um '''nome de jurisdição'''.
} or 0
|2 = &#32;e a entrada começa por um '''nome em ordem direta'''.
accessPointPresence = tonumber(accessPointPresence)
|# =, porém, <strong class="error">o primeiro indicador não foi preenchido.</strong>

|3|4|5|6|7|8|9 =, porém, <strong class="error">o primeiro indicador foi preenchido incorretamente.</strong>
-- Testa (conta) se existe mais de um ponto de acesso principal
}}
local f100existance = frame:expandTemplate {title = "Exist", args = {"100", target}} or ""
{{#ifeq: {{Field data string|110|1|1|}} | # ||* <strong class="error">O segundo indicador do campo 110 foi preenchido, porém, ele não deve ser preenchido.</strong>
if accessPointPresence > 1 or f100existance == "multiple" then
}}
}}{{#if: {{Exist|111}} |* O ponto de acesso principal foi dado a um '''evento'''{{#switch:{{Field data string|111|0|1|}}
a = "Foi registrado <b>mais de um ponto de acesso principal</b>. Isso não é permitido"
info = string.format('* <strong class="error">%s.</strong>', a)
|0 =, a entrada começa por um '''nome invertido'''.
table.insert(infos, info)
|1 =, a entrada começa por um '''nome de jurisdição'''.
end
|2 =, a entrada começa por um '''nome em ordem direta'''.
local f100 =
|# =, porém, <strong class="error">o primeiro indicador não foi preenchido.</strong>
mw.text.trim(
|3|4|5|6|7|8|9 =, porém, <strong class="error">o primeiro indicador foi preenchido incorretamente.</strong>
frame:expandTemplate {title = "Field data string", args = {"100", "0", "0", fullpagename = target}} or ""
}}
)
{{#ifeq: {{Field data string|111|1|1|}} | # ||* <strong class="error">O segundo indicador do campo 111 foi preenchido, porém, ele não deve ser preenchido.</strong>
if f100 ~= "" then
}}
info = "A autoridade é do tipo <b>pessoa</b>"
}}{{#if: {{Exist|130}} |* O ponto de acesso principal foi dado a um '''título uniforme'''.
if f100:sub(1, 1) == "0" then
{{#ifeq: {{Field data string|130|1|1|}} | # || * <strong class="error">O segundo indicador do campo 130 foi preenchido, ele não deve ser preenchido.</strong>}} <!-- a seguir, testa se existe um ponto de acesso principal. Se existir, testa se o primeiro indicador do campo 245 condiz com essa realidade -->
a = "e a entrada começa pelo seu <b>primeiro nome</b>"
}}{{#ifexpr: {{#ask:[[{{{1|{{#urldecode:{{#urlget:fullpagename|{{FULLPAGENAME}}}}}}}}}#100||{{{1|{{#urldecode:{{#urlget:fullpagename|{{FULLPAGENAME}}}}}}}}}#110||{{{1|{{#urldecode:{{#urlget:fullpagename|{{FULLPAGENAME}}}}}}}}}#111||{{{1|{{#urldecode:{{#urlget:fullpagename|{{FULLPAGENAME}}}}}}}}}#130]]|?Field data|format=count|mainlabel=-}} = 0 | {{#ifeq: {{Field data string|245|0|1|}} | 1 |* <strong class="error">Não houve um ponto de acesso principal nos campos 1XX, desse modo, o primeiro indicador do campo 245 deve ter o valor "0".</strong>}} | {{#ifeq: {{Field data string|245|0|1|}} | 0 |* <strong class="error">Houve um ponto de acesso principal nos campos 1XX, desse modo, o primeiro indicador do campo 245 deve ter o valor "1".</strong>}} <!-- a seguir, testa a relação entre a presença do campo 240 em relação a presença do campo 041 e a presença do subcampo $l -->
info = string.format("* %s %s.", info, a)
}} {{#if: {{Exist|240}} | {{#if: {{Exist|041}} || * <strong class="error">Normalmente, quando há um campo 240, deve haver um campo 041.</strong>}}{{#if: {{Select|240|l}} | {{#if: {{#regex:{{Select|240|l}}|/^[a-zA-Z]{3}$/|}} || * <strong class="error">É necessário informar o idioma por extenso ($l do campo 240) antecedido por um ponto no subcampo $a.</strong>}} {{#if: {{#regex:{{Field data string|240||}}|/\.\s?\$l/r|}} || * <strong class="error">O subcampo $l do campo 240 necessita ser antecedido por um ponto no subcampo anterior.</strong>}} | * <strong class="error">Normalmente, quando há um campo 240 $a, deve haver também um 240 $l. 240 $l não foi detectado.</strong>}} {{#switch: {{Field data string|240|0|1}}
table.insert(infos, info)
|0 = * O título uniforme não será exibido.
elseif f100:sub(1, 1) == "1" then
|1 = * O título uniforme será exibido.
a = "e a entrada começa pelo seu <b>sobrenome</b>"
|# = * <strong class="error">Está faltando o primeiro indicador do campo 240.</strong>
info = string.format("* %s %s.", info, a)
|2|3|4|5|6|7|8|9 = * <strong class="error">O primeiro indicador do campo 240 foi preenchido incorretamente.</strong>
table.insert(infos, info)
}}{{#ifeq: {{Field data string|240|1|1}} | # |
elseif f100:sub(1, 1) == "3" then
* <strong class="error">Está faltando o segundo indicador do campo 240.</strong> |
a = "e a entrada começa pelo seu <b>nome de família</b>"
* O título uniforme será alfabetado como "'''{{ucfirst:{{#regex:{{#sub:{{Select|240|a}}|{{Field data string|240|1|1}}}}|/[\/:=.]$/|}}}}'''".
info = string.format("* %s %s.", info, a)
}}}} <!-- a seguir, informa se o título receberá o ponto de acesso principal ou secundário --> {{#switch: {{Field data string|245|0|1|}}
table.insert(infos, info)
|0 = * O título recebeu o '''ponto de acesso principal'''.
elseif f100:sub(1, 1) == "#" then
|1 = * O título recebeu um '''ponto de acesso secundário'''.
|# = * <strong class="error">Está faltando o primeiro indicador do campo 245.</strong>
a = "o primeiro indicador não foi preenchido"
|2|3|4|5|6|7|8|9 = * <strong class="error">O primeiro indicador do campo 245 foi preenchido incorretamente.</strong>
info = string.format('* %s, porém, <strong class="error">%s.</strong>', info, a)
table.insert(infos, info)
}} <!-- a seguir, testa se foi preenchido o segundo indicador do 245, se foi, mostra como será a alfabetação, removendo a pontuação final do subcampo $a ("/",":","="" ou ".") --> {{#ifeq: {{Field data string|245|1|1|}} | # |
else
* <strong class="error">Está faltando o segundo indicador do campo 245.</strong> |
a = "o primeiro indicador foi preenchido incorretamente"
* O título será alfabetado como "'''{{ucfirst:{{#regex:{{#sub:{{Select|245|a}}|{{Field data string|245|1|1|}}}}|/\s?[\/:=.]$/|}}}}'''". <!-- a seguir, testa se existe espaço antes da pontuação "/", ":" e "=" no final do subcampo $a e $b -->
info = string.format('* %s, porém, <strong class="error">%s.</strong>', info, a)
}}{{#if: {{#regex:{{Select|245|a}}|/[a-zA-Z][\/:=]$/r|}} | * <strong class="error">Inclua um espaço antes da pontuação (ao final do subcampo $a do campo 245).</strong>
table.insert(infos, info)
}}{{#if: {{Select|245|b}} | {{#if: {{#regex:{{Select|245|b}}|/[a-zA-Z][\/:=]$/r|}} | * <strong class="error">Inclua um espaço antes da pontuação (ao final do subcampo $b do campo 245).</strong>
end
}} <!-- a seguir, testa se o subcampo $b começa com letras maiúsculas --> {{#if: {{#regex:{{Select|245|b}}|/^[A-Z]/r|}} | * <strong class="error">Normalmente, o início de um subtítulo (245 $b) começa com letras minúsculas.</strong>|}} <!-- testa se existe mais de um subcampo $b no 245 --> {{#if: {{#regex:{{Field data string|245|||}}|/\$b.*\$b/r|}} |* <strong class="error">Há mais de um subcampo $b no campo 245. O subcampo $b não é repetível.</strong>}} }} <!-- a seguir, testa se o subcampo $c está presente --> {{#if: {{Select|245|c}} | <!-- a seguir, testa se existe espaço antes do ponto e vírgula na indicação de responsabilidade, subcampo $c do 245 --> {{#if: {{#regex:{{Select|245|c}}|/[a-zA-Z.];/r|}} | * <strong class="error">Inclua um espaço antes do ponto e vírgula (subcampo $c do campo 245).</strong>}} <!-- a seguir, testa se existe "/" antes do subcampo $c do campo 245 --> {{#if: {{#regex:{{Field data string|245||}}|/[a-zA-Z]\s?\$c/r|}} | * <strong class="error">É necessária a pontuação que precede a indicação de responsabilidade (" / ") no campo 245.</strong>}} <!-- a seguir, testa se há ": $c" --> {{#if: {{#regex:{{Field data string|245||}}|/:\s?\$c/r|}} | * <strong class="error">Ou o subtítulo foi colocado no subcampo $c, ou a pontuação que precede a indicação de responsabilidade (" / ") não foi informada corretamente (campo 245).</strong>}} <!-- a seguir, testa se o subcampo $c termina em "-" --> {{#if: {{#regex:{{Field data string|245||}}|/-$/r|}} | * <strong class="error">Nunca inclua hifens de separação de áreas do AACR2 em registros MARC 21. Reveja a pontuação (campo 245).</strong>}} <!-- testa se existe mais de um subcampo $c no 245 --> {{#if: {{#regex:{{Field data string|245|||}}|/\$c.*\$c/r|}} |* <strong class="error">Há mais de um subcampo $c no campo 245. O subcampo $c não é repetível.</strong>}} <!-- a seguir, testa se existe mais de 3 vírgulas no campo 245 $c --> {{#if: {{#regex:{{Select|245|c}}|/([A-Za-zÀ-ü ]*,){3}/r|}} | * <strong class="error">Parece haver mais de 3 pessoas na indicação de responsabilidade (245 $c), use " ... [et al.]".</strong>}} <!-- a seguir, testa se existe a sintaxe "*...[et. " --> {{#if: {{#regex:{{Select|245|c}}|/[a-zA-ZÀ-ü]\.\.\.\[et.?\s/r|}} | * <strong class="error">No campo 245, o espaçamento correto é " ... [et al.]".</strong>}} | * <strong class="error">Está faltando o subcampo $c do campo 245.</strong>}} <!-- a seguir, testa se existe espaço antes de "ed." (subcampo $a do 250) --> {{#if: {{Exist|250}} | {{#if: {{#regex:{{Select|250|a}}|/\d\.?ed\./}} | * <strong class="error">Inclua um espaço antes da indicação "ed." (subcampo $a do campo 250).</strong>}} }} <!-- a seguir, testa se existe 260, se existir, verifica a pontuação final dos subcampos $a, $b e $c do campo 260 --> {{#if: {{Exist|260}} | {{#if: {{Select|260|a}} | {{#if: {{#regex:{{Select|260|a}}|/[a-zA-ZÀ-ü\],]\s?$/}} | * <strong class="error">Normalmente, o final do subcampo $a do campo 260 requer a seguinte pontuação " : ".</strong>}} | * <strong class="error">Está faltando o subcampo $a do campo 260.</strong>}} {{#if: {{Select|260|b}} | {{#if: {{#regex:{{Select|260|b}}|/[a-zA-Z.]$/r|}} | * <strong class="error">Normalmente, o final do subcampo $b do campo 260 requer uma das seguintes pontuações ", " ou " : ". Reveja a pontuação.</strong>}} | * <strong class="error">Está faltando o subcampo $b do campo 260.</strong>}} {{#if: {{Select|260|c}} | <!-- a seguir, testa se o subcampo $c é precedido ou não por "," --> {{#if: {{#regex:{{Field data string|260||}}|/[a-zA-ZÀ-ü\]][;:]\s?\$c/r}} | * <strong class="error">O ano de publicação deve sempre ser precedido de uma vírgula. Reveja a pontuação (campo 260).</strong>}} {{#if: {{#regex:{{Select|260|c}}|/[a-zA-ZÀ-ü0-9\]]$/r|}} | * <strong class="error">Nossa política de catalogação define que o subcampo $c do campo 260 deve terminar com um ponto.</strong>}} | * <strong class="error">Está faltando o subcampo $c do campo 260.</strong>}} }} <!-- a seguir, testa se existe espaço entre o número a a indicaçação de extensão do texto --> {{#if: {{Exist|300}} | {{#if: {{Select|300|a}} | {{#if: {{#regex:{{Select|300|a}}|/\d[a-z]\./}} | * <strong class="error">Inclua um espaço entre o número e a indicação "p.", "f." ou "v." (subcampo $a do campo 300).</strong>}} <!-- a seguir, testa se existe espaço entre "p." e ";" --> {{#if: {{#regex:{{Select|300|a}}|/\.[:;]/r}} | * <strong class="error">Inclua um espaço entre a indicação "p.", "f." ou "v." e a pontuação final (subcampo $a do campo 300).</strong>}} <!-- a seguir, testa se existe "il." no subcampo $a (deve estar no subcampo $b) --> {{#if: {{#regex:{{Select|300|a}}|/il\./}} | * <strong class="error">Ilustrações e outros detalhes físicos devem ir no subcampo $b do campo 300, antecedidos de " : ".</strong>}} }} <!-- a seguir, testa se existe ".;" no subcampo $b do campo 300 --> {{#if: {{Select|300|b}} | {{#if: {{#regex:{{Select|300|b}}|/\.;/r}} | * <strong class="error">Inclua um espaço entre o ponto e o ponto e vírgula (campo 300, subcampo $b).</strong>}} {{#if: {{#regex:{{Select|300|b}}|/il,/r}} | * <strong class="error">Falta um ponto na abreviatura para ilustrações (il.).</strong>}} }} <!-- a seguir, testa se existe o subcampo $c do campo 300 e se a sintaxe das dimensões está correta --> {{#if: {{Select|300|c}} | {{#if: {{#regex:{{Select|300|c}}|/\d[a-z]/r}} | * <strong class="error">Atenção, a sintaxe correta para a dimensão é: NN cm ou, menos frequentemente, NN x NN cm (subcampo $c do campo 300).</strong>}} | * <strong class="error">Não foi detectado um subcampo $c no campo 300.</strong>}} <!-- a seguir, testa se a pontuação antes da dimensão é ".", "," ou ":" --> {{#if: {{#regex:{{Field data string|300||}}|/[.,:]\s?\$c/r}} | * <strong class="error">A pontuação que precede a dimensão (300 $c) deve ser " ; ".</strong>}} <!-- a seguir, testa se o subcampo $c termina em "-" --> {{#if: {{#regex:{{Field data string|300||}}|/-$/r|}} | * <strong class="error">Nunca inclua hifens de separação de áreas do AACR2 em registros MARC 21. Reveja a pontuação (campo 300).</strong>}} }} <!-- a seguir, testa se existem indicadores, parênteses no subcampo $a do campo 490 e se existe ";" antes da numeração da série --> {{#if: {{Exist|490}} | {{#ifeq: {{Field data string|490|1|1|}} | # ||
if f100:sub(2, 2) ~= "#" then
* <strong class="error">O segundo indicador do campo 490 foi preenchido, porém, ele não deve ser preenchido.</strong>}} {{#if: {{#regex:{{Select|490|a}}|/^\(/r|}} | * <strong class="error">Segundo as orientações do MARC 21, não inclua os parênteses no campo 490 ou 830.</strong>}} {{#if: {{Select|490|v}} | {{#if: {{#regex:{{Field data string|490||}}|/;\s?\$v/r}} || * <strong class="error">É necessária a pontuação que precede a numeração da série (490, $v).</strong>}} }} <!-- a seguir, testa a consistência entre o indicador do 490 e a presença do campo 830 -->
a = "O segundo indicador do campo 100 foi preenchido, porém, ele não deve ser preenchido"
{{#ifeq: {{Field data string|490|0|1|}} | # | * <strong class="error">Está faltando o primeiro indicador do campo 490.</strong> |
info = string.format('* <strong class="error">%s.</strong>', a)
{{#ifeq: {{Field data string|490|0|1|}} | 1 |
table.insert(infos, info)
{{#if: {{Exist|830}} || * <strong class="error">Foi especificado um ponto de acesso secundário para a série (490, primeiro indicador com valor 1), porém, um campo 830 não foi informado.</strong>}}
end
}}{{#ifeq: {{Field data string|490|0|1|}} | 0 |
-- Testa se existe ', ' no subcampo $a (Nome, Sobrenome)
{{#if: {{Exist|830}} | * <strong class="error">O primeiro indicador do campo 490 indica que não foi gerado um ponto de acesso para a série, porém, um campo 830 foi informado.</strong>}}
local f100a = frame:expandTemplate {title = "Select", args = {"100", "a", target}} or ""
}}
if f100a ~= "" then
}}
if not string.match(f100a, ".-,.") then
}} <!-- a seguir, testa se a nota 500 acaba com "." --> {{#if: {{Exist|500}} | {{#if: {{#regex:{{Select|500|a}}|/[a-zA-ZÀ-ü0-9:;-]$/r|}} | * <strong class="error">Nossa política de catalogação define que as notas devem terminar com um ponto.</strong>}} }} <!-- a seguir, testa se a nota 504 acaba com "." e se existe uso de maiúsculas no meio da nota --> {{#if: {{Exist|504}} | {{#if: {{#regex:{{Select|504|a}}|/[a-zA-ZÀ-ü0-9]$/r|}} | * <strong class="error">Nossa política de catalogação define que as notas devem terminar com um ponto.</strong>}} {{#if: {{#regex:{{Select|504|a}}|/.*\s[A-Z]/r|}} | * <strong class="error">Verifique o uso de maiúsculas na nota do campo 504.</strong>}} }} <!-- a seguir, testa os indicadores dos campos 6XX --> {{#if: {{Exist|600}} | {{#ifeq: {{Field data string|600|0|1|}} | # | * <strong class="error">Está faltando o primeiro indicador do campo 600.</strong>}} {{#ifeq: {{Field data string|600|1|1|}} | 4 || * <strong class="error">Nossa política de catalogação define que o segundo indicador do campo 600 deve ser sempre "4".</strong>}} <!-- testa se existe "," no subcampo $a (Nome, Sobrenome) --> {{#if: {{#regex:{{Select|600|a}}|/.*,./r|}} || * <strong class="error">Em pontos de acesso, o nome pessoal deve ser invertido (Nome, Sobrenome). Verifique o campo 600.</strong>}} {{#if: {{#regex:{{Select|600|a}}|/[a-zÀ-ü],[A-ZÀ-ü]/r|}} |* <strong class="error">Falta espaço após a vírgula. Verifique o campo 600.</strong>}} {{#if: {{Select|600|q}} | {{#if: {{#regex:{{Select|600|q}}|/^\(/r|}} || * <strong class="error">O subcampo $q do campo 600 necessita parênteses.</strong>}} }} }} {{#if: {{Exist|610}} | {{#ifeq: {{Field data string|610|0|1|}} | # | * <strong class="error">Está faltando o primeiro indicador do campo 610.</strong>}} {{#ifeq: {{Field data string|610|1|1|}} | 4 || * <strong class="error">Nossa política de catalogação define que o segundo indicador do campo 610 deve ser sempre "4".</strong>}} }} {{#if: {{Exist|611}} | {{#ifeq: {{Field data string|611|1|1|}} | 4 || * <strong class="error">Nossa política de catalogação define que o segundo indicador do campo 611 deve ser sempre "4".</strong>}} }} {{#if: {{Exist|650}} | {{#ifeq: {{Field data string|650|0|1|}} | 0 || * <strong class="error">Nossa política de catalogação define que o primeiro indicador do campo 650 deve ser sempre "0".</strong>}} {{#ifeq: {{Field data string|650|1|1|}} | 4 || * <strong class="error">Nossa política de catalogação define que o segundo indicador do campo 650 deve ser sempre "4".</strong>}} <!-- a seguir, testa se os assuntos começam com letra minúscula --> {{#if: {{#regex:{{Field data string|650||}}|/\$[axzy][a-zà-ü]/r|}} | * <strong class="error">Os assuntos principais e suas subdivisões devem começar com letra maiúscula.</strong>}} <!-- a seguir, testa se um subcampo termina em "-" --> {{#if: {{#regex:{{Field data string|650||}}|/-\s?\$/r|}} | * <strong class="error">Nunca inclua hifens entre termos de assuntos.</strong>}} }} {{#if: {{Exist|651}} | {{#ifeq: {{Field data string|651|0|1|}} | # || * <strong class="error">Nossa política de catalogação define que o primeiro indicador do campo 651 deve ser sempre "#".</strong>}} {{#ifeq: {{Field data string|651|1|1|}} | 4 || * <strong class="error">Nossa política de catalogação define que o segundo indicador do campo 651 deve ser sempre "4".</strong>}} }} <!-- a seguir, testa os pontos de acesso secundários, tal como os principais --> {{#if: {{Exist|700}} |
a = "Em pontos de acesso, o nome pessoal deve ser invertido (Nome, Sobrenome). Verifique o campo 100"
* Um ponto de acesso secundário foi dado a uma '''pessoa'''{{#switch:{{Field data string|700|0|1|}}
info = string.format('* <strong class="error">%s.</strong>', a)
|0 = &#32;e a entrada começa pelo seu '''primeiro nome'''.
table.insert(infos, info)
|1 = &#32;e a entrada começa pelo seu '''sobrenome'''.
end
|3 = &#32;e a entrada começa pelo seu '''nome de família'''.
if string.match(f100a, "[a-zÀ-ü],[A-ZÀ-ü]") then
|# =, porém, <strong class="error">o primeiro indicador não foi preenchido.</strong>
a = "Falta espaço após a vírgula. Verifique o campo 100"
|2|4|5|6|7|8|9 =, porém, <strong class="error">o primeiro indicador foi preenchido incorretamente.</strong>
info = string.format('* <strong class="error">%s.</strong>', a)
|#default =.
table.insert(infos, info)
}}{{#ifeq: {{Field data string|700|1|1|}} | # ||
end
* <strong class="error">O segundo indicador do campo 700 foi preenchido, porém, ele não deve ser preenchido.</strong>
end
}} <!-- testa se existe mais de um subcampo $a no mesmo campo 700 --> {{#ifeq: {{Exist|700}} | yes | {{#if: {{#regex:{{Field data string|700|||}}|/\$a.*\$a.*?$/r|}} |* <strong class="error">Há mais de um subcampo $a no campo 700. O subcampo $a não é repetível.</strong>}} }} <!-- testa se existe "," no subcampo $a (Nome, Sobrenome) --> {{#if: {{#regex:{{Select|700|a}}|/.*,./r|}} || * <strong class="error">Em pontos de acesso, o nome pessoal deve ser invertido (Nome, Sobrenome). Verifique o campo 700.</strong>
local f100q = frame:expandTemplate {title = "Select", args = {"100", "q", target}} or ""
}} {{#if: {{#regex:{{Select|700|a}}|/[a-zÀ-ü],[A-ZÀ-ü]/r|}} |* <strong class="error">Falta espaço após a vírgula. Verifique o campo 700.</strong>}} {{#if: {{Select|700|q}} | {{#if: {{#regex:{{Select|700|q}}|/^\(/r|}} || * <strong class="error">O subcampo $q do campo 700 necessita parênteses.</strong>}} }}
if f100q ~= "" then
}}{{#if: {{Exist|710}} |
if not string.match(f100q, "^%(") then
* Um ponto de acesso secundário foi dado a uma '''entidade coletiva'''{{#switch:{{Field data string|710|0|1|}}
a = "O subcampo $q do campo 100 necessita parênteses"
|0 = &#32;e a entrada começa por um '''nome invertido'''.
info = string.format('* <strong class="error">%s.</strong>', a)
|1 = &#32;e a entrada começa por um '''nome de jurisdição'''.
table.insert(infos, info)
|2 = &#32;e a entrada começa por um '''nome em ordem direta'''.
end
|# =, porém, <strong class="error">o primeiro indicador não foi preenchido.</strong>
end
|3|4|5|6|7|8|9 =, porém, <strong class="error">o primeiro indicador foi preenchido incorretamente.</strong>
local f100d = frame:expandTemplate {title = "Select", args = {"100", "d", target}} or ""
|#default =.
if f100d ~= "" then
}}
if string.match(f100, "%$d %d%d%d%d$") then
{{#ifeq: {{Field data string|710|1|1|}} | # ||
a = "O subcampo $d do campo 100 necessita hífen"
* <strong class="error">O segundo indicador do campo 710 foi preenchido, porém, ele não deve ser preenchido.</strong>
info = string.format('* <strong class="error">%s.</strong>', a)
}}
table.insert(infos, info)
}}{{#if: {{Exist|711}} |
end
* Um ponto de acesso secundário foi dado a um '''evento'''{{#switch:{{Field data string|711|0|1|}}
if not string.match(f100, ",%s?%$d") then
|0 =, a entrada começa por um '''nome invertido'''.
a = "Inclua uma vírgula antes do subcampo $d do campo 100"
|1 =, a entrada começa por um '''nome de jurisdição'''.
info = string.format('* <strong class="error">%s.</strong>', a)
|2 =, a entrada começa por um '''nome em ordem direta'''.
table.insert(infos, info)
|# =, porém, <strong class="error">o primeiro indicador não foi preenchido.</strong>
end
|3|4|5|6|7|8|9 =, porém, <strong class="error">o primeiro indicador foi preenchido incorretamente.</strong>
end
|#default =.
end
}}{{#ifeq: {{Field data string|711|1|1|}} | # ||
-- Testa se existe um ponto de acesso principal 110
* <strong class="error">O segundo indicador do campo 711 foi preenchido, porém, ele não deve ser preenchido.</strong>
local f110 =
}} <!-- a seguir, testa os indicadores do campo 830 -->
mw.text.trim(
}}{{#if: {{Exist|830}} | {{#ifeq: {{Field data string|830|0|1|}} | # ||
frame:expandTemplate {title = "Field data string", args = {"110", "0", "0", fullpagename = target}} or ""
* <strong class="error">O primeiro indicador do campo 830 foi preenchido, porém, ele não deve ser preenchido.</strong>
)
}}{{#ifeq: {{Field data string|830|1|1|}} | # |
if f110 ~= "" then
* <strong class="error">O segundo indicador do campo 830 precisa ser preenchido.</strong>}} {{#if: {{Select|830|v}} | {{#if: {{#regex:{{Field data string|830||}}|/;\s?\$v/r}} || * <strong class="error">É necessária a pontuação que precede a numeração da série (830, $v).</strong>}} }}
info = "A autoridade é do tipo <b>entidade coletiva</b>"
}}{{#if: {{Exist|856}} | {{#ifeq: {{Field data string|856|0|1|}} | 4 || * <strong class="error">O primeiro indicador do campo 856 precisa ter o valor "4".</strong>}} {{#if: {{Select|856|a}} | * <strong class="error">Normalmente, o subcampo utilizado no 856 é o $u, não o $a.</strong>}}
if f110:sub(1, 1) == "0" then
}} <!-- a seguir, testa por inteiro o registro de modo a acusar: "," ou o "." precedido de espaço; designadores de subcampos errados --> {{#if: {{#regex:{{#ask:[[-Has subobject::{{{1|{{#urldecode:{{#urlget:fullpagename|{{FULLPAGENAME}}}}}}}}}]][[Field data::+]]|?Field data|format=plainlist|link=none|headers=hide|mainlabel=-|outro=|sep=|valuesep=|propsep=}}|/\s[.,][^.]/r|}} | * <strong class="error">Pontos finais ou vírgulas nunca devem ser precedidos por um espaço.</strong>}} {{#if: {{#regex:{{#ask:[[-Has subobject::{{{1|{{#urldecode:{{#urlget:fullpagename|{{FULLPAGENAME}}}}}}}}}]][[Field data::+]]|?Field data|format=plainlist|link=none|headers=hide|mainlabel=-|outro=|sep=|valuesep=|propsep=}}|/\$[A-Z]/r|}} | * <strong class="error">Não são permitidos designadores de subcampos com letras maiúsculas.</strong>}}
a = "e a entrada começa por um <b>nome invertido</b>"
}}{{DISPLAYTITLE:Validar catalogação}}
info = string.format("* %s %s.", info, a)
table.insert(infos, info)
elseif f110:sub(1, 1) == "1" then
a = "e a entrada começa por um <b>nome de jurisdição</b>"
info = string.format("* %s %s.", info, a)
table.insert(infos, info)
elseif f110:sub(1, 1) == "2" then
a = "e a entrada começa por um <b>nome em ordem direta</b>"
info = string.format("* %s %s.", info, a)
table.insert(infos, info)
elseif f110:sub(1, 1) == "#" then
a = "o primeiro indicador não foi preenchido"
info = string.format('* %s, porém, <strong class="error">%s.</strong>', info, a)
table.insert(infos, info)
else
a = "o primeiro indicador foi preenchido incorretamente"
info = string.format('* %s, porém, <strong class="error">%s.</strong>', info, a)
table.insert(infos, info)
end
if f110:sub(2, 2) ~= "#" then
a = "O segundo indicador do campo 110 foi preenchido, porém, ele não deve ser preenchido"
info = string.format('* <strong class="error">%s.</strong>', a)
table.insert(infos, info)
end
local f110b = frame:expandTemplate {title = "Select", args = {"110", "b", target}} or ""
if f110b ~= "" then
if not string.match(f110, ".%s?%$b") then
a = "Inclua um ponto antes do subcampo $b do campo 110"
info = string.format('* <strong class="error">%s.</strong>', a)
table.insert(infos, info)
end
end
end
-- Testa se existe um ponto de acesso principal 111
local f111 =
mw.text.trim(frame:expandTemplate {title = "Field data string", args = {"111", "0", "0", fullpagename = target}}) or
""
if f111 ~= "" then
info = "A autoridade é do tipo <b>evento</b>"
if f111:sub(1, 1) == "0" then
a = "e a entrada começa por um <b>nome invertido</b>"
info = string.format("* %s %s.", info, a)
table.insert(infos, info)
elseif f111:sub(1, 1) == "1" then
a = "e a entrada começa por um <b>nome de jurisdição</b>"
info = string.format("* %s %s.", info, a)
table.insert(infos, info)
elseif f111:sub(1, 1) == "2" then
a = "e a entrada começa por um <b>nome em ordem direta</b>"
info = string.format("* %s %s.", info, a)
table.insert(infos, info)
elseif f111:sub(1, 1) == "#" then
a = "o primeiro indicador não foi preenchido"
info = string.format('* %s, porém, <strong class="error">%s.</strong>', info, a)
table.insert(infos, info)
else
a = "o primeiro indicador foi preenchido incorretamente"
info = string.format('* %s, porém, <strong class="error">%s.</strong>', info, a)
table.insert(infos, info)
end
if f111:sub(2, 2) ~= "#" then
a = "O segundo indicador do campo 111 foi preenchido, porém, ele não deve ser preenchido"
info = string.format('* <strong class="error">%s.</strong>', a)
table.insert(infos, info)
end
end
-- Testa se existe um ponto de acesso principal 130
local f130 =
mw.text.trim(frame:expandTemplate {title = "Field data string", args = {"130", "0", "0", fullpagename = target}}) or
""
if f130 ~= "" then
info = "A autoridade é do tipo <b>título uniforme</b>"
if f130:sub(1, 1) ~= "#" then
a = "o primeiro indicador não deve ser preenchido"
info = string.format('* %s, porém, <strong class="error">%s.</strong>', info, a)
table.insert(infos, info)
end
if f130:sub(2, 2) == "#" then
a = "Está faltando o segundo indicador do campo 130"
info = string.format('* <strong class="error">%s.</strong>', a)
table.insert(infos, info)
else
local f130a = frame:expandTemplate {title = "Select", args = {"130", "a", target}} or ""
a = ucfirst(f130a:sub(f130:sub(2, 2)))
info = string.format('* %s, ele será alfabetado como "<b>%s</b>".', info, a)
table.insert(infos, info)
end
end
local f150 =
mw.text.trim(frame:expandTemplate {title = "Field data string", args = {"150", "0", "0", fullpagename = target}}) or
""
if f150 ~= "" then
if f150:sub(1, 1) ~= "#" then
a = "O primeiro indicador do campo 150 foi preenchido, porém, ele não deve ser preenchido"
info = string.format('* <strong class="error">%s.</strong>', a)
table.insert(infos, info)
end
if f150:sub(2, 2) ~= "#" then
a = "O segundo indicador do campo 150 foi preenchido, porém, ele não deve ser preenchido"
info = string.format('* <strong class="error">%s.</strong>', a)
table.insert(infos, info)
end
end
local f400 =
mw.text.trim(
frame:expandTemplate {title = "Field data string", args = {"400", "0", "0", fullpagename = target}} or ""
)
if f400 ~= "" then
info = "A remissiva Ver é do tipo <b>pessoa</b>"
if f400:sub(1, 1) == "0" then
a = "e a entrada começa pelo seu <b>primeiro nome</b>"
info = string.format("* %s %s.", info, a)
table.insert(infos, info)
elseif f400:sub(1, 1) == "1" then
a = "e a entrada começa pelo seu <b>sobrenome</b>"
info = string.format("* %s %s.", info, a)
table.insert(infos, info)
elseif f400:sub(1, 1) == "3" then
a = "e a entrada começa pelo seu <b>nome de família</b>"
info = string.format("* %s %s.", info, a)
table.insert(infos, info)
elseif f400:sub(1, 1) == "#" then
a = "o primeiro indicador não foi preenchido"
info = string.format('* %s, porém, <strong class="error">%s.</strong>', info, a)
table.insert(infos, info)
else
a = "o primeiro indicador foi preenchido incorretamente"
info = string.format('* %s, porém, <strong class="error">%s.</strong>', info, a)
table.insert(infos, info)
end
if f400:sub(2, 2) ~= "#" then
a = "O segundo indicador do campo 400 foi preenchido, porém, ele não deve ser preenchido"
info = string.format('* <strong class="error">%s.</strong>', a)
table.insert(infos, info)
end
-- Testa se existe ', ' no subcampo $a (Nome, Sobrenome)
local f400a = frame:expandTemplate {title = "Select", args = {"400", "a", target}} or ""
if f400a ~= "" then
if not string.match(f400a, ".-,.") then
a = "Em pontos de acesso, o nome pessoal deve ser invertido (Nome, Sobrenome). Verifique o campo 400"
info = string.format('* <strong class="error">%s.</strong>', a)
table.insert(infos, info)
end
if string.match(f400a, "[a-zÀ-ü],[A-ZÀ-ü]") then
a = "Falta espaço após a vírgula. Verifique o campo 100"
info = string.format('* <strong class="error">%s.</strong>', a)
table.insert(infos, info)
end
end
local f400q = frame:expandTemplate {title = "Select", args = {"400", "q", target}} or ""
if f400q ~= "" then
if not string.match(f400q, "^%(") then
a = "O subcampo $q do campo 100 necessita parênteses"
info = string.format('* <strong class="error">%s.</strong>', a)
table.insert(infos, info)
end
end
local f400d = frame:expandTemplate {title = "Select", args = {"400", "d", target}} or ""
if f400d ~= "" then
if string.match(f400, "%$d %d%d%d%d$") then
a = "O subcampo $d do campo 100 necessita hífen"
info = string.format('* <strong class="error">%s.</strong>', a)
table.insert(infos, info)
end
if not string.match(f400, ",%s?%$d") then
a = "Inclua uma vírgula antes do subcampo $d do campo 100"
info = string.format('* <strong class="error">%s.</strong>', a)
table.insert(infos, info)
end
end
end
-- Testa se existe um ponto de acesso principal 110
local f410 =
mw.text.trim(
frame:expandTemplate {title = "Field data string", args = {"410", "0", "0", fullpagename = target}} or ""
)
if f410 ~= "" then
info = "A remissiva Ver é do tipo <b>entidade coletiva</b>"
if f410:sub(1, 1) == "0" then
a = "e a entrada começa por um <b>nome invertido</b>"
info = string.format("* %s %s.", info, a)
table.insert(infos, info)
elseif f410:sub(1, 1) == "1" then
a = "e a entrada começa por um <b>nome de jurisdição</b>"
info = string.format("* %s %s.", info, a)
table.insert(infos, info)
elseif f410:sub(1, 1) == "2" then
a = "e a entrada começa por um <b>nome em ordem direta</b>"
info = string.format("* %s %s.", info, a)
table.insert(infos, info)
elseif f410:sub(1, 1) == "#" then
a = "o primeiro indicador não foi preenchido"
info = string.format('* %s, porém, <strong class="error">%s.</strong>', info, a)
table.insert(infos, info)
else
a = "o primeiro indicador foi preenchido incorretamente"
info = string.format('* %s, porém, <strong class="error">%s.</strong>', info, a)
table.insert(infos, info)
end
if f410:sub(2, 2) ~= "#" then
a = "O segundo indicador do campo 410 foi preenchido, porém, ele não deve ser preenchido"
info = string.format('* <strong class="error">%s.</strong>', a)
table.insert(infos, info)
end
local f410b = frame:expandTemplate {title = "Select", args = {"410", "b", target}} or ""
if f410b ~= "" then
if not string.match(f410, ".%s?%$b") then
a = "Inclua um ponto antes do subcampo $b do campo 110"
info = string.format('* <strong class="error">%s.</strong>', a)
table.insert(infos, info)
end
end
end
-- Testa se existe um ponto de acesso principal 111
local f411 =
mw.text.trim(frame:expandTemplate {title = "Field data string", args = {"411", "0", "0", fullpagename = target}}) or
""
if f411 ~= "" then
info = "A remissiva Ver é do tipo <b>evento</b>"
if f411:sub(1, 1) == "0" then
a = "e a entrada começa por um <b>nome invertido</b>"
info = string.format("* %s %s.", info, a)
table.insert(infos, info)
elseif f411:sub(1, 1) == "1" then
a = "e a entrada começa por um <b>nome de jurisdição</b>"
info = string.format("* %s %s.", info, a)
table.insert(infos, info)
elseif f411:sub(1, 1) == "2" then
a = "e a entrada começa por um <b>nome em ordem direta</b>"
info = string.format("* %s %s.", info, a)
table.insert(infos, info)
elseif f411:sub(1, 1) == "#" then
a = "o primeiro indicador não foi preenchido"
info = string.format('* %s, porém, <strong class="error">%s.</strong>', info, a)
table.insert(infos, info)
else
a = "o primeiro indicador foi preenchido incorretamente"
info = string.format('* %s, porém, <strong class="error">%s.</strong>', info, a)
table.insert(infos, info)
end
if f411:sub(2, 2) ~= "#" then
a = "O segundo indicador do campo 411 foi preenchido, porém, ele não deve ser preenchido"
info = string.format('* <strong class="error">%s.</strong>', a)
table.insert(infos, info)
end
end
-- Testa se existe um ponto de acesso principal 130
local f430 =
mw.text.trim(frame:expandTemplate {title = "Field data string", args = {"430", "0", "0", fullpagename = target}}) or
""
if f430 ~= "" then
info = "A remissiva Ver é do tipo <b>título uniforme</b>"
if f430:sub(1, 1) ~= "#" then
a = "o primeiro indicador não deve ser preenchido"
info = string.format('* %s, porém, <strong class="error">%s.</strong>', info, a)
table.insert(infos, info)
end
if f430:sub(2, 2) == "#" then
a = "Está faltando o segundo indicador do campo 430"
info = string.format('* <strong class="error">%s.</strong>', a)
table.insert(infos, info)
else
local f430a = frame:expandTemplate {title = "Select", args = {"430", "a", target}} or ""
a = ucfirst(f430a:sub(f430:sub(2, 2)))
info = string.format('* %s, ele será alfabetado como "<b>%s</b>".', info, a)
table.insert(infos, info)
end
end
local f450 =
mw.text.trim(frame:expandTemplate {title = "Field data string", args = {"450", "0", "0", fullpagename = target}}) or
""
if f450 ~= "" then
if f450:sub(1, 1) ~= "#" or f450:sub(2, 2) ~= "#" then
a = "Os indicadores do campo 450 não devem ser preenchidos"
info = string.format('* <strong class="error">%s.</strong>', a)
table.insert(infos, info)
end
end
local f643 =
mw.text.trim(frame:expandTemplate {title = "Field data string", args = {"643", "0", "0", fullpagename = target}}) or
""
if f643 ~= "" then
if f643:sub(1, 1) ~= "#" or f643:sub(2, 2) ~= "#" then
a = "Os indicadores do campo 643 não devem ser preenchidos"
info = string.format('* <strong class="error">%s.</strong>', a)
table.insert(infos, info)
end
end
local f670 =
mw.text.trim(frame:expandTemplate {title = "Field data string", args = {"670", "0", "0", fullpagename = target}}) or
""
if f670 ~= "" then
if f670:sub(1, 1) ~= "#" or f670:sub(2, 2) ~= "#" then
a = "Os indicadores do campo 670 não devem ser preenchidos"
info = string.format('* <strong class="error">%s.</strong>', a)
table.insert(infos, info)
end
end
local f675 =
mw.text.trim(frame:expandTemplate {title = "Field data string", args = {"675", "0", "0", fullpagename = target}}) or
""
if f675 ~= "" then
if f675:sub(1, 1) ~= "#" or f675:sub(2, 2) ~= "#" then
a = "Os indicadores do campo 675 não devem ser preenchidos"
info = string.format('* <strong class="error">%s.</strong>', a)
table.insert(infos, info)
end
end
local f856 =
mw.text.trim(frame:expandTemplate {title = "Field data string", args = {"856", "0", "0", fullpagename = target}}) or
""
if f856 ~= "" then
if f856:sub(1, 1) ~= "4" then
a = 'O primeiro indicador do campo 856 precisa ter o valor "4"'
info = string.format('* <strong class="error">%s.</strong>', a)
table.insert(infos, info)
end
if f856:sub(2, 2) ~= "#" then
a = "O segundo indicador do campo 856 foi preenchido, porém, ele não deve ser preenchido"
info = string.format('* <strong class="error">%s.</strong>', a)
table.insert(infos, info)
end
if string.match(f856, "%$a%s") then
a = "Normalmente, o subcampo utilizado no 856 é o $u, não o $a"
info = string.format('* <strong class="error">%s.</strong>', a)
table.insert(infos, info)
end
end
-- Testa por inteiro o registro de modo a acusar: "," ou o "." precedido de espaço; designadores de subcampos errados
local isoRecord =
frame:callParserFunction {
name = "#ask:[[-Has subobject::" .. target .. "]][[Field data::+]]",
args = {
"?Field data",
format = "plainlist",
link = "none",
headers = "hide",
mainlabel = "-",
outro = "",
sep = "",
valuesep = "",
propsep = ""
}
} or ""
if string.match(isoRecord, "%s[.,][^.]") then
a = "Pontos finais ou vírgulas nunca devem ser precedidos por um espaço"
info = string.format('* <strong class="error">%s.</strong>', a)
table.insert(infos, info)
end
if string.match(isoRecord, "%$[A-Z]") then
a = "Não são permitidos designadores de subcampos com letras maiúsculas"
info = string.format('* <strong class="error">%s.</strong>', a)
table.insert(infos, info)
end

return table.concat(infos, "\n")
end

return p

Edição das 09h59min de 28 de agosto de 2021

A documentação para este módulo pode ser criada em Módulo:AutRules/doc

local p = {}

function p.Rules(frame)
  -- Define o alvo das regras
  local target = frame:getParent().args[1] or frame.args[1]
  if target == "" or target == nil then
    target = mw.uri.decode(frame:callParserFunction("#urlget", "fullpagename"))
  end
  if target == "" or target == nil then
    target = mw.title.getCurrentTitle().prefixedText
  end
  -- Semantic Scribunto foi carregado?
  if not mw.smw then
    return "mw.smw module not found"
  end
  -- Define variáveis básicas
  local info, a, b
  local infos = {}
  -- Funções básicas
  local function ucfirst(str)
    return (str:gsub("^%l", string.upper))
  end
  -- Record status
  local recordStatus =
    frame:expandTemplate {
    title = "Field data string",
    args = {"000", "5", "1", property = "Leader", fullpagename = target}
  } or false
  if recordStatus == "n" then
    a = "Segundo o Líder, este é um registro <b>novo</b> (não um alterado ou revisado, expandido, excluído, etc.)"
    info = string.format("* %s.", a)
    table.insert(infos, info)
  elseif recordStatus == "c" then
    a = "Segundo o Líder, este é um registro <b>alterado ou revisado</b> (não um novo, expandido, excluído, etc.)"
    info = string.format("* %s.", a)
    table.insert(infos, info)
  elseif recordStatus == "a" or recordStatus == "d" then
    a = "Segundo o Líder, este é um registro <b>expandido</b> ou <b>excluído</b> (não novo)"
    info = string.format("* %s.", a)
    table.insert(infos, info)
  end
  -- Encoding level
  local encodingLevel =
    frame:expandTemplate {
    title = "Field data string",
    args = {"000", "17", "1", property = "Leader", fullpagename = target}
  } or false
  if encodingLevel == "n" then
    a = "Segundo o Líder, este registro de autoridade está <b>completo</b>"
    info = string.format("* %s.", a)
    table.insert(infos, info)
  elseif encodingLevel == "o" then
    a = "Segundo o Líder, este registro de autoridade está <b>incompleto</b>"
    info = string.format("* %s.", a)
    table.insert(infos, info)
  end
  -- Explica a sintaxe '(Biblioteca)NúmeroDeControle'
  local f001 =
    frame:expandTemplate {
    title = "Field data string",
    args = {"001", "0", "", property = "Control field data", fullpagename = target} or ""
  }
  local f003 =
    frame:expandTemplate {
    title = "Field data string",
    args = {"003", "0", "", property = "Control field data", fullpagename = target} or ""
  }
  a = "Internamente, este registro é identificado pelo código"
  b = "para sistemas externos, o código é"
  info = string.format('* %s "%s"; %s "(%s)%s".', a, f001, b, f003, f001)
  table.insert(infos, info)
  -- Campo 005
  local creationDate =
    mw.smw.ask("[[" .. target .. "]]|?Creation date#-F[l, d \\d\\e F \\d\\e Y]|headers=hide|mainlabel=-") or ""
  if type(creationDate) == "table" then
    for _, row in pairs(creationDate) do
      for _, data in pairs(row) do
        creationDate = data
      end
    end
  end
  local modificationDate =
    mw.smw.ask("[[" .. target .. "]]|?Modification date#-F[l, d \\d\\e F \\d\\e Y]|headers=hide|mainlabel=-") or ""
  if type(modificationDate) == "table" then
    for _, row in pairs(modificationDate) do
      for _, data in pairs(row) do
        modificationDate = data
      end
    end
  end
  a = "O registro foi criado em:"
  b = "Sua última transação foi em:"
  info = string.format("* %s %s. %s %s.", a, creationDate, b, modificationDate)
  table.insert(infos, info)

  local accessPointPresence =
    frame:callParserFunction {
    name = "#ask:[[" ..
      target ..
        "#100||" ..
          target .. "#110||" .. target .. "#111||" .. target .. "#130||" .. target .. "#150||" .. target .. "#151]]",
    args = {"?Field data", format = "count", mainlabel = "-"}
  } or 0
  accessPointPresence = tonumber(accessPointPresence)

  -- Testa (conta) se existe mais de um ponto de acesso principal
  local f100existance = frame:expandTemplate {title = "Exist", args = {"100", target}} or ""
  if accessPointPresence > 1 or f100existance == "multiple" then
    a = "Foi registrado <b>mais de um ponto de acesso principal</b>. Isso não é permitido"
    info = string.format('* <strong class="error">%s.</strong>', a)
    table.insert(infos, info)
  end
  local f100 =
    mw.text.trim(
    frame:expandTemplate {title = "Field data string", args = {"100", "0", "0", fullpagename = target}} or ""
  )
  if f100 ~= "" then
    info = "A autoridade é do tipo <b>pessoa</b>"
    if f100:sub(1, 1) == "0" then
      a = "e a entrada começa pelo seu <b>primeiro nome</b>"
      info = string.format("* %s %s.", info, a)
      table.insert(infos, info)
    elseif f100:sub(1, 1) == "1" then
      a = "e a entrada começa pelo seu <b>sobrenome</b>"
      info = string.format("* %s %s.", info, a)
      table.insert(infos, info)
    elseif f100:sub(1, 1) == "3" then
      a = "e a entrada começa pelo seu <b>nome de família</b>"
      info = string.format("* %s %s.", info, a)
      table.insert(infos, info)
    elseif f100:sub(1, 1) == "#" then
      a = "o primeiro indicador não foi preenchido"
      info = string.format('* %s, porém, <strong class="error">%s.</strong>', info, a)
      table.insert(infos, info)
    else
      a = "o primeiro indicador foi preenchido incorretamente"
      info = string.format('* %s, porém, <strong class="error">%s.</strong>', info, a)
      table.insert(infos, info)
    end
    if f100:sub(2, 2) ~= "#" then
      a = "O segundo indicador do campo 100 foi preenchido, porém, ele não deve ser preenchido"
      info = string.format('* <strong class="error">%s.</strong>', a)
      table.insert(infos, info)
    end
    -- Testa se existe ', ' no subcampo $a (Nome, Sobrenome)
    local f100a = frame:expandTemplate {title = "Select", args = {"100", "a", target}} or ""
    if f100a ~= "" then
      if not string.match(f100a, ".-,.") then
        a = "Em pontos de acesso, o nome pessoal deve ser invertido (Nome, Sobrenome). Verifique o campo 100"
        info = string.format('* <strong class="error">%s.</strong>', a)
        table.insert(infos, info)
      end
      if string.match(f100a, "[a-zÀ-ü],[A-ZÀ-ü]") then
        a = "Falta espaço após a vírgula. Verifique o campo 100"
        info = string.format('* <strong class="error">%s.</strong>', a)
        table.insert(infos, info)
      end
    end
    local f100q = frame:expandTemplate {title = "Select", args = {"100", "q", target}} or ""
    if f100q ~= "" then
      if not string.match(f100q, "^%(") then
        a = "O subcampo $q do campo 100 necessita parênteses"
        info = string.format('* <strong class="error">%s.</strong>', a)
        table.insert(infos, info)
      end
    end
    local f100d = frame:expandTemplate {title = "Select", args = {"100", "d", target}} or ""
    if f100d ~= "" then
      if string.match(f100, "%$d %d%d%d%d$") then
        a = "O subcampo $d do campo 100 necessita hífen"
        info = string.format('* <strong class="error">%s.</strong>', a)
        table.insert(infos, info)
      end
      if not string.match(f100, ",%s?%$d") then
        a = "Inclua uma vírgula antes do subcampo $d do campo 100"
        info = string.format('* <strong class="error">%s.</strong>', a)
        table.insert(infos, info)
      end
    end
  end
  -- Testa se existe um ponto de acesso principal 110
  local f110 =
    mw.text.trim(
    frame:expandTemplate {title = "Field data string", args = {"110", "0", "0", fullpagename = target}} or ""
  )
  if f110 ~= "" then
    info = "A autoridade é do tipo <b>entidade coletiva</b>"
    if f110:sub(1, 1) == "0" then
      a = "e a entrada começa por um <b>nome invertido</b>"
      info = string.format("* %s %s.", info, a)
      table.insert(infos, info)
    elseif f110:sub(1, 1) == "1" then
      a = "e a entrada começa por um <b>nome de jurisdição</b>"
      info = string.format("* %s %s.", info, a)
      table.insert(infos, info)
    elseif f110:sub(1, 1) == "2" then
      a = "e a entrada começa por um <b>nome em ordem direta</b>"
      info = string.format("* %s %s.", info, a)
      table.insert(infos, info)
    elseif f110:sub(1, 1) == "#" then
      a = "o primeiro indicador não foi preenchido"
      info = string.format('* %s, porém, <strong class="error">%s.</strong>', info, a)
      table.insert(infos, info)
    else
      a = "o primeiro indicador foi preenchido incorretamente"
      info = string.format('* %s, porém, <strong class="error">%s.</strong>', info, a)
      table.insert(infos, info)
    end
    if f110:sub(2, 2) ~= "#" then
      a = "O segundo indicador do campo 110 foi preenchido, porém, ele não deve ser preenchido"
      info = string.format('* <strong class="error">%s.</strong>', a)
      table.insert(infos, info)
    end
    local f110b = frame:expandTemplate {title = "Select", args = {"110", "b", target}} or ""
    if f110b ~= "" then
      if not string.match(f110, ".%s?%$b") then
        a = "Inclua um ponto antes do subcampo $b do campo 110"
        info = string.format('* <strong class="error">%s.</strong>', a)
        table.insert(infos, info)
      end
    end
  end
  -- Testa se existe um ponto de acesso principal 111
  local f111 =
    mw.text.trim(frame:expandTemplate {title = "Field data string", args = {"111", "0", "0", fullpagename = target}}) or
    ""
  if f111 ~= "" then
    info = "A autoridade é do tipo <b>evento</b>"
    if f111:sub(1, 1) == "0" then
      a = "e a entrada começa por um <b>nome invertido</b>"
      info = string.format("* %s %s.", info, a)
      table.insert(infos, info)
    elseif f111:sub(1, 1) == "1" then
      a = "e a entrada começa por um <b>nome de jurisdição</b>"
      info = string.format("* %s %s.", info, a)
      table.insert(infos, info)
    elseif f111:sub(1, 1) == "2" then
      a = "e a entrada começa por um <b>nome em ordem direta</b>"
      info = string.format("* %s %s.", info, a)
      table.insert(infos, info)
    elseif f111:sub(1, 1) == "#" then
      a = "o primeiro indicador não foi preenchido"
      info = string.format('* %s, porém, <strong class="error">%s.</strong>', info, a)
      table.insert(infos, info)
    else
      a = "o primeiro indicador foi preenchido incorretamente"
      info = string.format('* %s, porém, <strong class="error">%s.</strong>', info, a)
      table.insert(infos, info)
    end
    if f111:sub(2, 2) ~= "#" then
      a = "O segundo indicador do campo 111 foi preenchido, porém, ele não deve ser preenchido"
      info = string.format('* <strong class="error">%s.</strong>', a)
      table.insert(infos, info)
    end
  end
  -- Testa se existe um ponto de acesso principal 130
  local f130 =
    mw.text.trim(frame:expandTemplate {title = "Field data string", args = {"130", "0", "0", fullpagename = target}}) or
    ""
  if f130 ~= "" then
    info = "A autoridade é do tipo <b>título uniforme</b>"
    if f130:sub(1, 1) ~= "#" then
      a = "o primeiro indicador não deve ser preenchido"
      info = string.format('* %s, porém, <strong class="error">%s.</strong>', info, a)
      table.insert(infos, info)
    end
    if f130:sub(2, 2) == "#" then
      a = "Está faltando o segundo indicador do campo 130"
      info = string.format('* <strong class="error">%s.</strong>', a)
      table.insert(infos, info)
    else
      local f130a = frame:expandTemplate {title = "Select", args = {"130", "a", target}} or ""
      a = ucfirst(f130a:sub(f130:sub(2, 2)))
      info = string.format('* %s, ele será alfabetado como "<b>%s</b>".', info, a)
      table.insert(infos, info)
    end
  end
  local f150 =
    mw.text.trim(frame:expandTemplate {title = "Field data string", args = {"150", "0", "0", fullpagename = target}}) or
    ""
  if f150 ~= "" then
    if f150:sub(1, 1) ~= "#" then
      a = "O primeiro indicador do campo 150 foi preenchido, porém, ele não deve ser preenchido"
      info = string.format('* <strong class="error">%s.</strong>', a)
      table.insert(infos, info)
    end
    if f150:sub(2, 2) ~= "#" then
      a = "O segundo indicador do campo 150 foi preenchido, porém, ele não deve ser preenchido"
      info = string.format('* <strong class="error">%s.</strong>', a)
      table.insert(infos, info)
    end
  end
  local f400 =
    mw.text.trim(
    frame:expandTemplate {title = "Field data string", args = {"400", "0", "0", fullpagename = target}} or ""
  )
  if f400 ~= "" then
    info = "A remissiva Ver é do tipo <b>pessoa</b>"
    if f400:sub(1, 1) == "0" then
      a = "e a entrada começa pelo seu <b>primeiro nome</b>"
      info = string.format("* %s %s.", info, a)
      table.insert(infos, info)
    elseif f400:sub(1, 1) == "1" then
      a = "e a entrada começa pelo seu <b>sobrenome</b>"
      info = string.format("* %s %s.", info, a)
      table.insert(infos, info)
    elseif f400:sub(1, 1) == "3" then
      a = "e a entrada começa pelo seu <b>nome de família</b>"
      info = string.format("* %s %s.", info, a)
      table.insert(infos, info)
    elseif f400:sub(1, 1) == "#" then
      a = "o primeiro indicador não foi preenchido"
      info = string.format('* %s, porém, <strong class="error">%s.</strong>', info, a)
      table.insert(infos, info)
    else
      a = "o primeiro indicador foi preenchido incorretamente"
      info = string.format('* %s, porém, <strong class="error">%s.</strong>', info, a)
      table.insert(infos, info)
    end
    if f400:sub(2, 2) ~= "#" then
      a = "O segundo indicador do campo 400 foi preenchido, porém, ele não deve ser preenchido"
      info = string.format('* <strong class="error">%s.</strong>', a)
      table.insert(infos, info)
    end
    -- Testa se existe ', ' no subcampo $a (Nome, Sobrenome)
    local f400a = frame:expandTemplate {title = "Select", args = {"400", "a", target}} or ""
    if f400a ~= "" then
      if not string.match(f400a, ".-,.") then
        a = "Em pontos de acesso, o nome pessoal deve ser invertido (Nome, Sobrenome). Verifique o campo 400"
        info = string.format('* <strong class="error">%s.</strong>', a)
        table.insert(infos, info)
      end
      if string.match(f400a, "[a-zÀ-ü],[A-ZÀ-ü]") then
        a = "Falta espaço após a vírgula. Verifique o campo 100"
        info = string.format('* <strong class="error">%s.</strong>', a)
        table.insert(infos, info)
      end
    end
    local f400q = frame:expandTemplate {title = "Select", args = {"400", "q", target}} or ""
    if f400q ~= "" then
      if not string.match(f400q, "^%(") then
        a = "O subcampo $q do campo 100 necessita parênteses"
        info = string.format('* <strong class="error">%s.</strong>', a)
        table.insert(infos, info)
      end
    end
    local f400d = frame:expandTemplate {title = "Select", args = {"400", "d", target}} or ""
    if f400d ~= "" then
      if string.match(f400, "%$d %d%d%d%d$") then
        a = "O subcampo $d do campo 100 necessita hífen"
        info = string.format('* <strong class="error">%s.</strong>', a)
        table.insert(infos, info)
      end
      if not string.match(f400, ",%s?%$d") then
        a = "Inclua uma vírgula antes do subcampo $d do campo 100"
        info = string.format('* <strong class="error">%s.</strong>', a)
        table.insert(infos, info)
      end
    end
  end
  -- Testa se existe um ponto de acesso principal 110
  local f410 =
    mw.text.trim(
    frame:expandTemplate {title = "Field data string", args = {"410", "0", "0", fullpagename = target}} or ""
  )
  if f410 ~= "" then
    info = "A remissiva Ver é do tipo <b>entidade coletiva</b>"
    if f410:sub(1, 1) == "0" then
      a = "e a entrada começa por um <b>nome invertido</b>"
      info = string.format("* %s %s.", info, a)
      table.insert(infos, info)
    elseif f410:sub(1, 1) == "1" then
      a = "e a entrada começa por um <b>nome de jurisdição</b>"
      info = string.format("* %s %s.", info, a)
      table.insert(infos, info)
    elseif f410:sub(1, 1) == "2" then
      a = "e a entrada começa por um <b>nome em ordem direta</b>"
      info = string.format("* %s %s.", info, a)
      table.insert(infos, info)
    elseif f410:sub(1, 1) == "#" then
      a = "o primeiro indicador não foi preenchido"
      info = string.format('* %s, porém, <strong class="error">%s.</strong>', info, a)
      table.insert(infos, info)
    else
      a = "o primeiro indicador foi preenchido incorretamente"
      info = string.format('* %s, porém, <strong class="error">%s.</strong>', info, a)
      table.insert(infos, info)
    end
    if f410:sub(2, 2) ~= "#" then
      a = "O segundo indicador do campo 410 foi preenchido, porém, ele não deve ser preenchido"
      info = string.format('* <strong class="error">%s.</strong>', a)
      table.insert(infos, info)
    end
    local f410b = frame:expandTemplate {title = "Select", args = {"410", "b", target}} or ""
    if f410b ~= "" then
      if not string.match(f410, ".%s?%$b") then
        a = "Inclua um ponto antes do subcampo $b do campo 110"
        info = string.format('* <strong class="error">%s.</strong>', a)
        table.insert(infos, info)
      end
    end
  end
  -- Testa se existe um ponto de acesso principal 111
  local f411 =
    mw.text.trim(frame:expandTemplate {title = "Field data string", args = {"411", "0", "0", fullpagename = target}}) or
    ""
  if f411 ~= "" then
    info = "A remissiva Ver é do tipo <b>evento</b>"
    if f411:sub(1, 1) == "0" then
      a = "e a entrada começa por um <b>nome invertido</b>"
      info = string.format("* %s %s.", info, a)
      table.insert(infos, info)
    elseif f411:sub(1, 1) == "1" then
      a = "e a entrada começa por um <b>nome de jurisdição</b>"
      info = string.format("* %s %s.", info, a)
      table.insert(infos, info)
    elseif f411:sub(1, 1) == "2" then
      a = "e a entrada começa por um <b>nome em ordem direta</b>"
      info = string.format("* %s %s.", info, a)
      table.insert(infos, info)
    elseif f411:sub(1, 1) == "#" then
      a = "o primeiro indicador não foi preenchido"
      info = string.format('* %s, porém, <strong class="error">%s.</strong>', info, a)
      table.insert(infos, info)
    else
      a = "o primeiro indicador foi preenchido incorretamente"
      info = string.format('* %s, porém, <strong class="error">%s.</strong>', info, a)
      table.insert(infos, info)
    end
    if f411:sub(2, 2) ~= "#" then
      a = "O segundo indicador do campo 411 foi preenchido, porém, ele não deve ser preenchido"
      info = string.format('* <strong class="error">%s.</strong>', a)
      table.insert(infos, info)
    end
  end
  -- Testa se existe um ponto de acesso principal 130
  local f430 =
    mw.text.trim(frame:expandTemplate {title = "Field data string", args = {"430", "0", "0", fullpagename = target}}) or
    ""
  if f430 ~= "" then
    info = "A remissiva Ver é do tipo <b>título uniforme</b>"
    if f430:sub(1, 1) ~= "#" then
      a = "o primeiro indicador não deve ser preenchido"
      info = string.format('* %s, porém, <strong class="error">%s.</strong>', info, a)
      table.insert(infos, info)
    end
    if f430:sub(2, 2) == "#" then
      a = "Está faltando o segundo indicador do campo 430"
      info = string.format('* <strong class="error">%s.</strong>', a)
      table.insert(infos, info)
    else
      local f430a = frame:expandTemplate {title = "Select", args = {"430", "a", target}} or ""
      a = ucfirst(f430a:sub(f430:sub(2, 2)))
      info = string.format('* %s, ele será alfabetado como "<b>%s</b>".', info, a)
      table.insert(infos, info)
    end
  end
  local f450 =
    mw.text.trim(frame:expandTemplate {title = "Field data string", args = {"450", "0", "0", fullpagename = target}}) or
    ""
  if f450 ~= "" then
    if f450:sub(1, 1) ~= "#" or f450:sub(2, 2) ~= "#" then
      a = "Os indicadores do campo 450 não devem ser preenchidos"
      info = string.format('* <strong class="error">%s.</strong>', a)
      table.insert(infos, info)
    end
  end
  local f643 =
    mw.text.trim(frame:expandTemplate {title = "Field data string", args = {"643", "0", "0", fullpagename = target}}) or
    ""
  if f643 ~= "" then
    if f643:sub(1, 1) ~= "#" or f643:sub(2, 2) ~= "#" then
      a = "Os indicadores do campo 643 não devem ser preenchidos"
      info = string.format('* <strong class="error">%s.</strong>', a)
      table.insert(infos, info)
    end
  end
  local f670 =
    mw.text.trim(frame:expandTemplate {title = "Field data string", args = {"670", "0", "0", fullpagename = target}}) or
    ""
  if f670 ~= "" then
    if f670:sub(1, 1) ~= "#" or f670:sub(2, 2) ~= "#" then
      a = "Os indicadores do campo 670 não devem ser preenchidos"
      info = string.format('* <strong class="error">%s.</strong>', a)
      table.insert(infos, info)
    end
  end
  local f675 =
    mw.text.trim(frame:expandTemplate {title = "Field data string", args = {"675", "0", "0", fullpagename = target}}) or
    ""
  if f675 ~= "" then
    if f675:sub(1, 1) ~= "#" or f675:sub(2, 2) ~= "#" then
      a = "Os indicadores do campo 675 não devem ser preenchidos"
      info = string.format('* <strong class="error">%s.</strong>', a)
      table.insert(infos, info)
    end
  end
  local f856 =
    mw.text.trim(frame:expandTemplate {title = "Field data string", args = {"856", "0", "0", fullpagename = target}}) or
    ""
  if f856 ~= "" then
    if f856:sub(1, 1) ~= "4" then
      a = 'O primeiro indicador do campo 856 precisa ter o valor "4"'
      info = string.format('* <strong class="error">%s.</strong>', a)
      table.insert(infos, info)
    end
    if f856:sub(2, 2) ~= "#" then
      a = "O segundo indicador do campo 856 foi preenchido, porém, ele não deve ser preenchido"
      info = string.format('* <strong class="error">%s.</strong>', a)
      table.insert(infos, info)
    end
    if string.match(f856, "%$a%s") then
      a = "Normalmente, o subcampo utilizado no 856 é o $u, não o $a"
      info = string.format('* <strong class="error">%s.</strong>', a)
      table.insert(infos, info)
    end
  end
  -- Testa por inteiro o registro de modo a acusar: "," ou o "." precedido de espaço; designadores de subcampos errados
  local isoRecord =
    frame:callParserFunction {
    name = "#ask:[[-Has subobject::" .. target .. "]][[Field data::+]]",
    args = {
      "?Field data",
      format = "plainlist",
      link = "none",
      headers = "hide",
      mainlabel = "-",
      outro = "",
      sep = "",
      valuesep = "",
      propsep = ""
    }
  } or ""
  if string.match(isoRecord, "%s[.,][^.]") then
    a = "Pontos finais ou vírgulas nunca devem ser precedidos por um espaço"
    info = string.format('* <strong class="error">%s.</strong>', a)
    table.insert(infos, info)
  end
  if string.match(isoRecord, "%$[A-Z]") then
    a = "Não são permitidos designadores de subcampos com letras maiúsculas"
    info = string.format('* <strong class="error">%s.</strong>', a)
    table.insert(infos, info)
  end

  return table.concat(infos, "\n")
end

return p