Módulo:BibRules: mudanças entre as edições

De Wikincat
Ir para navegação Ir para pesquisar
Sem resumo de edição
Sem resumo de edição
 
(16 revisões intermediárias pelo mesmo usuário não estão sendo mostradas)
Linha 23: Linha 23:
-- Somente realiza as análises se existir o campo 245
-- Somente realiza as análises se existir o campo 245
local f245 =
local f245 =
mw.text.trim(frame:expandTemplate {title = "Field data string", args = {"245", "0", "0", fullpagename = target}}) or
mw.text.trim(frame:expandTemplate { title = "Field data string", args = { "245", "0", "0", fullpagename = target } }) or
""
""
if f245 ~= "" then
if f245 ~= "" then
-- Categorias
local categories =
frame:callParserFunction {
name = "#ask:[[" .. target .. "]]",
args = {
"?Category",
format = "plainlist",
link = "none",
headers = "hide",
mainlabel = "-",
outro = "",
sep = "",
valuesep = "",
propsep = "",
prefix = "none"
}
} or ""
-- Record status
-- Record status
local recordStatus =
local recordStatus =
frame:expandTemplate {
frame:expandTemplate {
title = "Field data string",
title = "Field data string",
args = {"000", "5", "1", property = "Leader", fullpagename = target}
args = { "000", "5", "1", property = "Leader", fullpagename = target }
} or false
} or false
if recordStatus == "n" then
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.)"
a = "Segundo o Líder, este é um registro <b>novo</b> (não um alterado ou revisado, expandido, excluído, etc.)"
Linha 47: Linha 64:
-- Type of record
-- Type of record
local typeOfRecord =
local typeOfRecord =
frame:expandTemplate {
frame:expandTemplate {
title = "Field data string",
title = "Field data string",
args = {"000", "6", "1", property = "Leader", fullpagename = target}
args = { "000", "6", "1", property = "Leader", fullpagename = target }
} or false
} or false
if typeOfRecord == "a" then
if typeOfRecord == "a" then
a = "Segundo o Líder, este registro descreve um <b>material textual</b>"
a = "Segundo o Líder, este registro descreve um <b>material textual</b>"
Linha 58: Linha 75:
-- Bibliographic level
-- Bibliographic level
local bibliographicLevel =
local bibliographicLevel =
frame:expandTemplate {
frame:expandTemplate {
title = "Field data string",
title = "Field data string",
args = {"000", "7", "1", property = "Leader", fullpagename = target}
args = { "000", "7", "1", property = "Leader", fullpagename = target }
} or false
} or false
if bibliographicLevel == "m" then
if bibliographicLevel == "m" then
a =
a =
"Segundo o Líder, este registro descreve um <b>item monográfico</b> (não parte de um item, não um item seriado, não uma coleção, etc.)"
"Segundo o Líder, este registro descreve um <b>item monográfico</b> (não parte de um item, não um item seriado, não uma coleção, etc.)"
info = string.format("* %s.", a)
info = string.format("* %s.", a)
table.insert(infos, info)
table.insert(infos, info)
Linha 70: Linha 87:
-- Encoding level
-- Encoding level
local encodingLevel =
local encodingLevel =
frame:expandTemplate {
frame:expandTemplate {
title = "Field data string",
title = "Field data string",
args = {"000", "17", "1", property = "Leader", fullpagename = target}
args = { "000", "17", "1", property = "Leader", fullpagename = target }
} or false
} or false
if encodingLevel == "1" then
if encodingLevel == "1" then
a =
a =
"Segundo o Líder, este registro tem um nível <b>completo</b> de catalogação (mas o material não foi examinado)"
"Segundo o Líder, este registro tem um nível <b>completo</b> de catalogação (mas o material não foi examinado)"
info = string.format("* %s.", a)
info = string.format("* %s.", a)
table.insert(infos, info)
table.insert(infos, info)
elseif encodingLevel == "#" then
elseif encodingLevel == "#" then
a =
a =
"Segundo o Líder, este registro tem um nível <b>completo</b> de catalogação (a descrição foi realizada com o material em mãos)"
"Segundo o Líder, este registro tem um nível <b>completo</b> de catalogação (a descrição foi realizada com o material em mãos)"
info = string.format("* %s.", a)
info = string.format("* %s.", a)
table.insert(infos, info)
table.insert(infos, info)
Linha 87: Linha 104:
-- Descriptive cataloging form
-- Descriptive cataloging form
local descriptiveCatalogingForm =
local descriptiveCatalogingForm =
frame:expandTemplate {
frame:expandTemplate {
title = "Field data string",
title = "Field data string",
args = {"000", "18", "1", property = "Leader", fullpagename = target}
args = { "000", "18", "1", property = "Leader", fullpagename = target }
} or false
} or false
if descriptiveCatalogingForm == "a" then
if descriptiveCatalogingForm == "a" then
a = "Segundo o Líder, este registro possui uma catalogação <b>compatível com as regras do AACR 2</b>"
a = "Segundo o Líder, este registro possui uma catalogação <b>compatível com as regras do AACR 2</b>"
Linha 102: Linha 119:
-- Explica a sintaxe '(Biblioteca)NúmeroDeControle'
-- Explica a sintaxe '(Biblioteca)NúmeroDeControle'
local f001 =
local f001 =
frame:expandTemplate {
frame:expandTemplate {
title = "Field data string",
title = "Field data string",
args = {"001", "0", "", property = "Control field data", fullpagename = target}
args = { "001", "0", "", property = "Control field data", fullpagename = target }
} or ""
} or ""
local f003 =
local f003 =
frame:expandTemplate {
frame:expandTemplate {
title = "Field data string",
title = "Field data string",
args = {"003", "0", "", property = "Control field data", fullpagename = target}
args = { "003", "0", "", property = "Control field data", fullpagename = target }
} or ""
} or ""
a = "Internamente, este registro é identificado pelo código"
a = "Internamente, este registro é identificado pelo código"
b = "para sistemas externos, o código é"
b = "para sistemas externos, o código é"
Linha 117: Linha 134:
-- Campo 005
-- Campo 005
local creationDate =
local creationDate =
mw.smw.ask("[[" .. target .. "]]|?Creation date#-F[l, d \\d\\e F \\d\\e Y]|headers=hide|mainlabel=-") or ""
mw.smw.ask("[[" .. target .. "]]|?Creation date#-F[l, d \\d\\e F \\d\\e Y]|headers=hide|mainlabel=-") or ""
if type(creationDate) == "table" then
if type(creationDate) == "table" then
for _, row in pairs(creationDate) do
for _, row in pairs(creationDate) do
Linha 126: Linha 143:
end
end
local modificationDate =
local modificationDate =
mw.smw.ask("[[" .. target .. "]]|?Modification date#-F[l, d \\d\\e F \\d\\e Y]|headers=hide|mainlabel=-") or ""
mw.smw.ask("[[" .. target .. "]]|?Modification date#-F[l, d \\d\\e F \\d\\e Y]|headers=hide|mainlabel=-") or ""
if type(modificationDate) == "table" then
if type(modificationDate) == "table" then
for _, row in pairs(modificationDate) do
for _, row in pairs(modificationDate) do
Linha 139: Linha 156:
table.insert(infos, info)
table.insert(infos, info)
-- Campo 008
-- Campo 008
local invalidCode = '<strong class="error">código inválido para o local de publicação.</strong>'
local invalidCode = '<strong class="error">código inválido para o local de publicação</strong>'
local pubPlaceTbl = {
local pubPlaceTbl = {
["acb"] = "Acre",
["acb"] = "Acre",
Linha 182: Linha 199:
["eua"] = invalidCode,
["eua"] = invalidCode,
["fra"] = invalidCode,
["fra"] = invalidCode,
["pt "] = invalidCode,
["   "] = '<strong class="error">é necessário informar um código de local de publicação, campo 008.</strong>'
["   "] = '<strong class="error">é necessário informar um código de local de publicação, campo 008.</strong>'
}
}
local f008pubPlace =
local f008pubPlace =
frame:expandTemplate {
frame:expandTemplate {
title = "Field data string",
title = "Field data string",
args = {"008", "15", "3", property = "Control field data", fullpagename = target} or ""
args = { "008", "15", "3", property = "Control field data", fullpagename = target } or ""
}
}
if string.match(f008pubPlace, "^[A-Z]") then
if string.match(f008pubPlace, "^[A-Z]") then
a = "O uso de maiúsculas não é permitido no campo 008, local de publicação"
a = "O uso de maiúsculas não é permitido no campo 008, local de publicação"
Linha 220: Linha 238:
}
}
local f008lang =
local f008lang =
frame:expandTemplate {
frame:expandTemplate {
title = "Field data string",
title = "Field data string",
args = {"008", "35", "3", property = "Control field data", fullpagename = target}
args = { "008", "35", "3", property = "Control field data", fullpagename = target }
} or ""
} or ""
if string.match(f008lang, "^[A-Z]") then
if string.match(f008lang, "^[A-Z]") then
a = "O uso de maiúsculas não é permitido no campo 008, idioma"
a = "O uso de maiúsculas não é permitido no campo 008, idioma"
Linha 236: Linha 254:
-- Se existe o campo 041, mostra '(traduzido do... )' na mesma linha do idioma presente no 008
-- Se existe o campo 041, mostra '(traduzido do... )' na mesma linha do idioma presente no 008
local f041 =
local f041 =
mw.text.trim(frame:expandTemplate {title = "Field data string", args = {"041", "0", "0", fullpagename = target}}) or
mw.text.trim(frame:expandTemplate { title = "Field data string", args = { "041", "0", "0", fullpagename = target } }) or
""
""
if f041 ~= "" then
if f041 ~= "" then
if f041:sub(1, 1) == "1" then
if f041:sub(1, 1) == "1" then
local f041h = frame:expandTemplate {title = "Select", args = {"041", "h", target}} or ""
local f041h = frame:expandTemplate { title = "Select", args = { "041", "h", target } } or ""
f041h = langTbl[f041h] or f041h
f041h = langTbl[f041h] or f041h
info = string.format("%s (traduzido do %s).", info, f041h)
info = string.format("%s (traduzido do %s).", info, f041h)
Linha 248: Linha 266:
-- Testa se existe(m) ISBN(s) inválido(s)
-- Testa se existe(m) ISBN(s) inválido(s)
local f020 =
local f020 =
mw.text.trim(frame:expandTemplate {title = "Field data string", args = {"020", "0", "0", fullpagename = target}}) or
mw.text.trim(frame:expandTemplate { title = "Field data string", args = { "020", "0", "0", fullpagename = target } }) or
""
""
if f020 ~= "" then
if f020 ~= "" then
local printedIsbn = frame:expandTemplate {title = "Print ISBN"} or false
local printedIsbn = frame:expandTemplate { title = "Print ISBN" } or ""
if string.match(printedIsbn, "error") then
if string.match(printedIsbn, "error") then
a = "ISBN inválido, por favor, reveja os números informados"
a = "ISBN inválido, por favor, reveja os números informados"
Linha 263: Linha 281:
for _, data in pairs(row) do
for _, data in pairs(row) do
if type(data) == "table" then
if type(data) == "table" then
f020 = mw.text.trim(table.concat(data))
f020 = mw.text.trim(table.concat(data))
else
else
f020 = mw.text.trim(data)
f020 = mw.text.trim(data)
end
end
end
end
Linha 279: Linha 297:
table.insert(infos, info)
table.insert(infos, info)
elseif string.match(f020, "%(") then
elseif string.match(f020, "%(") then
a =
a = 'O campo de ISBN só pode conter números e "X" maiúsculo. Use o subcampo $q para outros dados (sem parênteses)'
'O campo de ISBN só pode conter números e "X" maiúsculo. Use o subcampo $q para outros dados (sem parênteses)'
info = string.format('* <strong class="error">%s.</strong>', a)
info = string.format('* <strong class="error">%s.</strong>', a)
table.insert(infos, info)
table.insert(infos, info)
Linha 302: Linha 321:
table.insert(infos, info)
table.insert(infos, info)
end
end
local f041a = frame:expandTemplate {title = "Select", args = {"041", "a", target}} or ""
local f041a = frame:expandTemplate { title = "Select", args = { "041", "a", target } } or ""
if string.match(f041a, "^[A-Z]") then
if string.match(f041a, "^[A-Z]") then
a = "O uso de maiúsculas não é permitido nos códigos de idioma (campo 041)"
a = "O uso de maiúsculas não é permitido nos códigos de idioma (campo 041)"
Linha 313: Linha 332:
-- queryResult = mw.smw.ask( '[[' .. target .. '#100||' .. target .. '#110||' .. target .. '#111||' .. target .. '#130]]' )
-- queryResult = mw.smw.ask( '[[' .. target .. '#100||' .. target .. '#110||' .. target .. '#111||' .. target .. '#130]]' )
local accessPointPresence =
local accessPointPresence =
frame:callParserFunction {
frame:callParserFunction {
name = "#ask:[[" .. target .. "#100||" .. target .. "#110||" .. target .. "#111||" .. target .. "#130]]",
name = "#ask:[[" .. target .. "#100||" .. target .. "#110||" .. target .. "#111||" .. target .. "#130]]",
args = {"?Field data", format = "count", mainlabel = "-"}
args = { "?Field data", format = "count", mainlabel = "-" }
} or 0
} or 0
accessPointPresence = tonumber(accessPointPresence)
accessPointPresence = tonumber(accessPointPresence) or 0
-- Testa se há subcampo $b e se há espaço no subcampo $c do campo 090
-- Testa se há subcampo $b e se há espaço no subcampo $c do campo 090
local f090 =
local f090 =
mw.text.trim(frame:expandTemplate {title = "Field data string", args = {"090", "0", "0", fullpagename = target}}) or
mw.text.trim(frame:expandTemplate { title = "Field data string", args = { "090", "0", "0", fullpagename = target } }) or
""
""
if f090 ~= "" then
if f090 ~= "" then
if string.match(f090, ",") then
local f090b = frame:expandTemplate {title = "Select", args = {"090", "b", target}} or ""
a = "Normalmente não há vírgula no campo 090, reveja"
info = string.format('* <strong class="error">%s.</strong>', a)
table.insert(infos, info)
end
local f090b = frame:expandTemplate { title = "Select", args = { "090", "b", target } } or ""
if f090b == "" then
if f090b == "" then
a = "Está faltando o subcampo $b do campo 090 (notação de Cutter)"
a = "Está faltando o subcampo $b do campo 090 (notação de Cutter)"
Linha 335: Linha 359:
table.insert(infos, info)
table.insert(infos, info)
end
end
local f090c = frame:expandTemplate {title = "Select", args = {"090", "c", target}} or ""
local f090c = frame:expandTemplate { title = "Select", args = { "090", "c", target } } or ""
if string.match(f090c, "%sed") then
if string.match(f090c, "%sed") then
a = "Nossa política de catalogação proíbe espaços na indicação de edição no número de chamada (090 $c)"
a = "Nossa política de catalogação proíbe espaços na indicação de edição no número de chamada (090 $c)"
Linha 343: Linha 367:
end
end
-- Testa (conta) se existe mais de um ponto de acesso principal
-- Testa (conta) se existe mais de um ponto de acesso principal
local f100existance = frame:expandTemplate {title = "Exist", args = {"100", target}} or ""
local f100existance = frame:expandTemplate { title = "Exist", args = { "100", target } } or ""
if accessPointPresence > 1 or f100existance == "multiple" then
if accessPointPresence > 1 or f100existance == "multiple" then
a = "Foi registrado <b>mais de um ponto de acesso principal</b>. Isso não é permitido"
a = "Foi registrado <b>mais de um ponto de acesso principal</b>. Isso não é permitido"
Linha 351: Linha 375:
if f100existance ~= "" then
if f100existance ~= "" then
local f100 =
local f100 =
mw.text.trim(
mw.text.trim(
frame:expandTemplate {title = "Field data string", args = {"100", "0", "0", fullpagename = target}}
frame:expandTemplate { title = "Field data string", args = { "100", "0", "0", fullpagename = target } }
) or ""
) or ""
info = "O ponto de acesso principal foi dado a uma <b>pessoa</b>"
info = "O ponto de acesso principal foi dado a uma <b>pessoa</b>"
if f100:sub(1, 1) == "0" then
if f100:sub(1, 1) == "0" then
Linha 382: Linha 406:
end
end
-- Testa se existe ', ' no subcampo $a (Nome, Sobrenome)
-- Testa se existe ', ' no subcampo $a (Nome, Sobrenome)
local f100a = frame:expandTemplate {title = "Select", args = {"100", "a", target}} or ""
local f100a = frame:expandTemplate { title = "Select", args = { "100", "a", target } } or ""
if f100a ~= "" then
if f100a ~= "" then
if not string.match(f100a, ".-,.") then
if not string.match(f100a, ".-,.") then
Linha 391: Linha 415:
if string.match(f100a, "[a-zÀ-ü],[A-ZÀ-ü]") then
if string.match(f100a, "[a-zÀ-ü],[A-ZÀ-ü]") then
a = "Falta espaço após a vírgula. Verifique o campo 100"
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
if string.match(f100a, "%d%d%d%d") then
a = "No campo 100, o ano deve ser informado no subcampo $d"
info = string.format('* <strong class="error">%s.</strong>', a)
info = string.format('* <strong class="error">%s.</strong>', a)
table.insert(infos, info)
table.insert(infos, info)
end
end
end
end
local f100q = frame:expandTemplate {title = "Select", args = {"100", "q", target}} or ""
local f100q = frame:expandTemplate { title = "Select", args = { "100", "q", target } } or ""
if f100q ~= "" then
if f100q ~= "" then
if not string.match(f100q, "^%(") then
if not string.match(f100q, "^%(") then
Linha 403: Linha 432:
end
end
end
end
local f100d = frame:expandTemplate {title = "Select", args = {"100", "d", target}} or ""
local f100d = frame:expandTemplate { title = "Select", args = { "100", "d", target } } or ""
if f100d ~= "" then
if f100d ~= "" then
if string.match(f100, "%$d %d%d%d%d$") then
if string.match(f100, "%$d %d%d%d%d$") then
Linha 414: Linha 443:
-- Testa se existe um ponto de acesso principal 110
-- Testa se existe um ponto de acesso principal 110
local f110 =
local f110 =
mw.text.trim(
mw.text.trim(
frame:expandTemplate {title = "Field data string", args = {"110", "0", "0", fullpagename = target}} or ""
frame:expandTemplate { title = "Field data string", args = { "110", "0", "0", fullpagename = target } } or ""
)
)
if f110 ~= "" then
if f110 ~= "" then
info = "O ponto de acesso principal foi dado a uma <b>entidade coletiva</b>"
info = "O ponto de acesso principal foi dado a uma <b>entidade coletiva</b>"
Linha 448: Linha 477:
-- Testa se existe um ponto de acesso principal 111
-- Testa se existe um ponto de acesso principal 111
local f111 =
local f111 =
mw.text.trim(frame:expandTemplate {title = "Field data string", args = {"111", "0", "0", fullpagename = target}}) or
mw.text.trim(frame:expandTemplate { title = "Field data string", args = { "111", "0", "0", fullpagename = target } }) or
""
""
if f111 ~= "" then
if f111 ~= "" then
info = "O ponto de acesso principal foi dado a um <b>evento</b>"
info = "O ponto de acesso principal foi dado a um <b>evento</b>"
Linha 481: Linha 510:
-- Testa se existe um ponto de acesso principal 130
-- Testa se existe um ponto de acesso principal 130
local f130 =
local f130 =
mw.text.trim(frame:expandTemplate {title = "Field data string", args = {"130", "0", "0", fullpagename = target}}) or
mw.text.trim(frame:expandTemplate { title = "Field data string", args = { "130", "0", "0", fullpagename = target } }) or
""
""
if f130 ~= "" then
if f130 ~= "" then
info = "O ponto de acesso principal foi dado a um <b>título uniforme</b>"
info = "O ponto de acesso principal foi dado a um <b>título uniforme</b>"
Linha 490: Linha 519:
table.insert(infos, info)
table.insert(infos, info)
else
else
local f130a = frame:expandTemplate {title = "Select", args = {"130", "a", target}} or ""
local f130a = frame:expandTemplate { title = "Select", args = { "130", "a", target } } or ""
a = ucfirst(f130a:sub(f130:sub(1, 1)))
a = ucfirst(f130a:sub(tonumber(f130:sub(1, 1)) or 0))
info = string.format('* %s, ele será alfabetado como "<b>%s</b>".', info, a)
info = string.format('* %s, ele será alfabetado como "<b>%s</b>".', info, a)
table.insert(infos, info)
table.insert(infos, info)
Linha 506: Linha 535:
if f245ind1 == "1" then
if f245ind1 == "1" then
a =
a =
'Não houve um ponto de acesso principal nos campos 1XX, desse modo, o primeiro indicador do campo 245 deve ter o valor "0"'
'Não houve um ponto de acesso principal nos campos 1XX, desse modo, o primeiro indicador do campo 245 deve ter o valor "0"'
info = string.format('* <strong class="error">%s.</strong>', a)
info = string.format('* <strong class="error">%s.</strong>', a)
table.insert(infos, info)
table.insert(infos, info)
Linha 513: Linha 542:
if f245ind1 == "0" then
if f245ind1 == "0" then
a =
a =
'Houve um ponto de acesso principal nos campos 1XX, desse modo, o primeiro indicador do campo 245 deve ter o valor "1"'
'Houve um ponto de acesso principal nos campos 1XX, desse modo, o primeiro indicador do campo 245 deve ter o valor "1"'
info = string.format('* <strong class="error">%s.</strong>', a)
info = string.format('* <strong class="error">%s.</strong>', a)
table.insert(infos, info)
table.insert(infos, info)
Linha 520: Linha 549:
-- 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
-- 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
local f240 =
local f240 =
mw.text.trim(frame:expandTemplate {title = "Field data string", args = {"240", "0", "0", fullpagename = target}}) or
mw.text.trim(frame:expandTemplate { title = "Field data string", args = { "240", "0", "0", fullpagename = target } }) or
""
""
if f240 ~= "" then
if f240 ~= "" then
if f041 == "" then
if f041 == "" then
Linha 528: Linha 557:
table.insert(infos, info)
table.insert(infos, info)
end
end
local f240l = frame:expandTemplate {title = "Select", args = {"240", "l", target}} or ""
local f240l = frame:expandTemplate { title = "Select", args = { "240", "l", target } } or ""
if f240l ~= "" then
if f240l ~= "" then
if string.match(f240l, "^[a-zA-Z][a-zA-Z][a-zA-Z]$") then
if string.match(f240l, "^[a-zA-Z][a-zA-Z][a-zA-Z]$") then
Linha 568: Linha 597:
else
else
local f240a =
local f240a =
string.gsub(mw.text.trim(frame:expandTemplate {title = "Select", args = {"240", "a", target}}), "[/:=.]$", "") or ""
string.gsub(mw.text.trim(frame:expandTemplate { title = "Select", args = { "240", "a", target } }), "[/:=.]$",
"") or ""
a = "O título uniforme será alfabetado como"
a = "O título uniforme será alfabetado como"
b = ucfirst(f240a:sub(f240:sub(2, 2) + 1))
b = ucfirst(f240a:sub(f240:sub(2, 2) + 1))
Linha 594: Linha 624:
end
end
-- 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 '.')
-- 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 '.')
local f245a = frame:expandTemplate {title = "Select", args = {"245", "a", target}} or ""
local f245a = frame:expandTemplate { title = "Select", args = { "245", "a", target } } or ""
if f245:sub(2, 2) == "#" then
if f245:sub(2, 2) == "#" then
a = "Está faltando o segundo indicador do campo 245"
a = "Está faltando o segundo indicador do campo 245"
Linha 613: Linha 643:
end
end
-- Testa se o subcampo $b começa com letras maiúsculas
-- Testa se o subcampo $b começa com letras maiúsculas
local f245b = frame:expandTemplate {title = "Select", args = {"245", "b", target}} or ""
local f245b = frame:expandTemplate { title = "Select", args = { "245", "b", target } } or ""
if f245b ~= "" then
if f245b ~= "" then
if string.match(f245b, "[a-zA-Z][/:=]$") then
if string.match(f245b, "[a-zA-Z][/:=]$") then
Linha 633: Linha 663:
end
end
-- Testa se o subcampo $c está presente
-- Testa se o subcampo $c está presente
local f245c = frame:expandTemplate {title = "Select", args = {"245", "c", target}} or ""
local f245c = frame:expandTemplate { title = "Select", args = { "245", "c", target } } or ""
if f245c ~= "" then
if f245c ~= "" then
-- Testa se existe espaço antes do ponto e vírgula na indicação de responsabilidade, subcampo $c do 245
-- Testa se existe espaço antes do ponto e vírgula na indicação de responsabilidade, subcampo $c do 245
Linha 650: Linha 680:
if string.match(f245, ":%s?%$c") then
if string.match(f245, ":%s?%$c") then
a =
a =
'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).'
'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).'
info = string.format('* <strong class="error">%s.</strong>', a)
info = string.format('* <strong class="error">%s.</strong>', a)
table.insert(infos, info)
table.insert(infos, info)
Linha 685: Linha 715:
-- Testa se existe espaço antes de "ed." (subcampo $a do 250)
-- Testa se existe espaço antes de "ed." (subcampo $a do 250)
local f250 =
local f250 =
mw.text.trim(frame:expandTemplate {title = "Field data string", args = {"250", "0", "0", fullpagename = target}}) or
mw.text.trim(frame:expandTemplate { title = "Field data string", args = { "250", "0", "0", fullpagename = target } }) or
""
""
if f250 ~= "" then
if f250 ~= "" then
local f250a = frame:expandTemplate {title = "Select", args = {"250", "a", target}} or ""
local f250a = frame:expandTemplate { title = "Select", args = { "250", "a", target } } or ""
if string.match(f250a, "%d%.?ed%.") then
if string.match(f250a, "%d%.?ed%.") then
a = 'Inclua um espaço antes da indicação "ed." (subcampo $a do campo 250)'
a = 'Inclua um espaço antes da indicação "ed." (subcampo $a do campo 250)'
Linha 702: Linha 732:
-- Testa se existe 260, se existir, verifica a pontuação final dos subcampos $a, $b e $c do campo 260
-- Testa se existe 260, se existir, verifica a pontuação final dos subcampos $a, $b e $c do campo 260
local f260 =
local f260 =
mw.text.trim(frame:expandTemplate {title = "Field data string", args = {"260", "0", "0", fullpagename = target}}) or
mw.text.trim(frame:expandTemplate { title = "Field data string", args = { "260", "0", "0", fullpagename = target } }) or
""
""
if f260 ~= "" then
if f260 ~= "" then
local f260a = frame:expandTemplate {title = "Select", args = {"260", "a", target}} or ""
local f260a = frame:expandTemplate { title = "Select", args = { "260", "a", target } } or ""
if f260a ~= "" then
if f260a ~= "" then
if string.match(f260a, "[a-zA-ZÀ-ü%],]%s?$") then
if string.match(f260a, "[a-zA-ZÀ-ü%],]%s?$") then
Linha 713: Linha 743:
end
end
else
else
if string.match(categories, "Livro") then
a = "Está faltando o subcampo $a do campo 260"
a = "Está faltando o subcampo $a do campo 260"
info = string.format('* <strong class="error">%s.</strong>', a)
table.insert(infos, info)
end
end
if string.match(f260a, "[a-zA-ZÀ-ü%]]:") then
a =
'Normalmente, o final do subcampo $a do campo 260 requer a seguinte pontuação " : " (perceba o espaço antes da pontuação)'
info = string.format('* <strong class="error">%s.</strong>', a)
info = string.format('* <strong class="error">%s.</strong>', a)
table.insert(infos, info)
table.insert(infos, info)
end
end
local f260b = frame:expandTemplate {title = "Select", args = {"260", "b", target}} or ""
local f260b = frame:expandTemplate { title = "Select", args = { "260", "b", target } } or ""
if f260b ~= "" then
if f260b ~= "" then
if string.match(f260b, "[a-zA-Z.]$") then
if string.match(f260b, "[a-zA-Z.]$") then
a =
a =
'Normalmente, o final do subcampo $b do campo 260 requer uma das seguintes pontuações ", " ou " : ". Reveja a pontuação'
'Normalmente, o final do subcampo $b do campo 260 requer uma das seguintes pontuações ", " ou " : ". Reveja a pontuação'
info = string.format('* <strong class="error">%s.</strong>', a)
info = string.format('* <strong class="error">%s.</strong>', a)
table.insert(infos, info)
table.insert(infos, info)
end
end
else
else
if string.match(categories, "Livro") then
a = "Está faltando o subcampo $b do campo 260"
a = "Está faltando o subcampo $b do campo 260"
info = string.format('* <strong class="error">%s.</strong>', a)
info = string.format('* <strong class="error">%s.</strong>', a)
table.insert(infos, info)
table.insert(infos, info)
end
end
end
local f260c = frame:expandTemplate {title = "Select", args = {"260", "c", target}} or ""
local f260c = frame:expandTemplate { title = "Select", args = { "260", "c", target } } or ""
if f260c ~= "" then
if f260c ~= "" then
-- Testa se o subcampo $c é precedido ou não por ","
-- Testa se o subcampo $c é precedido ou não por ","
Linha 751: Linha 791:
-- Testa se existe espaço entre o número e a indicaçação de extensão do texto
-- Testa se existe espaço entre o número e a indicaçação de extensão do texto
local f300 =
local f300 =
mw.text.trim(frame:expandTemplate {title = "Field data string", args = {"300", "0", "0", fullpagename = target}}) or
mw.text.trim(frame:expandTemplate { title = "Field data string", args = { "300", "0", "0", fullpagename = target } }) or
""
""
if f300 ~= "" then
if f300 ~= "" then
local f300a = frame:expandTemplate {title = "Select", args = {"300", "a", target}} or ""
local f300a = frame:expandTemplate { title = "Select", args = { "300", "a", target } } or ""
if f300a ~= "" then
if f300a ~= "" then
if string.match(f300a, "%d[a-z]%.") then
if string.match(f300a, "%d[a-z]%.") then
Linha 774: Linha 814:
end
end
end
end
local f300b = frame:expandTemplate {title = "Select", args = {"300", "b", target}} or ""
local f300b = frame:expandTemplate { title = "Select", args = { "300", "b", target } } or ""
if f300b ~= "" then
if f300b ~= "" then
-- Testa se existe ".;" no subcampo $b do campo 300
-- Testa se existe ".;" no subcampo $b do campo 300
Linha 789: Linha 829:
if string.match(f300b, "il%.?, col") then
if string.match(f300b, "il%.?, col") then
a = "'Ilustrações coloridas' (il. color.) é uma expressão só, remova a vírgula"
a = "'Ilustrações coloridas' (il. color.) é uma expressão só, remova a vírgula"
info = string.format('* <strong class="error">%s.</strong>', a)
table.insert(infos, info)
end
-- Testa se o subcampo $b contém "il. ; color" ou "il. ; p&b"
if string.match(f300b, "il%. ?; color") then
a = "'Ilustrações coloridas' (il. color.) é uma expressão só, remova o ponto e vírgula da expressão"
info = string.format('* <strong class="error">%s.</strong>', a)
table.insert(infos, info)
end
if string.match(f300b, "il%. ?; p&b") then
a = "'Ilustrações pretas e brancas' (il. p&b) é uma expressão só, remova o ponto e vírgula da expressão"
info = string.format('* <strong class="error">%s.</strong>', a)
table.insert(infos, info)
end
-- Testa se os itens do subcampo $b estão separados por ponto e vírgula
if string.match(f300b, "il%. ?; gráf") then
a = "No campo 300, $b, os itens devem ser separados por vírgulas (il., gráfs.)"
info = string.format('* <strong class="error">%s.</strong>', a)
info = string.format('* <strong class="error">%s.</strong>', a)
table.insert(infos, info)
table.insert(infos, info)
Linha 797: Linha 854:
info = string.format('* <strong class="error">%s.</strong>', a)
info = string.format('* <strong class="error">%s.</strong>', a)
table.insert(infos, info)
table.insert(infos, info)
end
end
end
local f300c = frame:expandTemplate { title = "Select", args = { "300", "c", target } } or ""
end
local f300c = frame:expandTemplate {title = "Select", args = {"300", "c", target}} or ""
if f300c ~= "" then
if f300c ~= "" then
-- Testa se a sintaxe das dimensões está correta
-- Testa se a sintaxe das dimensões está correta
if string.match(f300c, "%d[a-z]") then
if string.match(f300c, "%d[a-z]") then
a =
a =
'Atenção, a sintaxe correta para a dimensão é: "NN cm" ou, menos frequentemente, "NN x NN cm" (subcampo $c do campo 300)'
'Atenção, a sintaxe correta para a dimensão é: "NN cm" ou, menos frequentemente, "NN x NN cm" (subcampo $c do campo 300)'
info = string.format('* <strong class="error">%s.</strong>', a)
info = string.format('* <strong class="error">%s.</strong>', a)
table.insert(infos, info)
table.insert(infos, info)
end
end
else
else
if string.match(categories, "Livro") then
a = "Está faltando o subcampo $c do campo 300"
a = "Está faltando o subcampo $c do campo 300"
info = string.format('* <strong class="error">%s.</strong>', a)
info = string.format('* <strong class="error">%s.</strong>', a)
table.insert(infos, info)
table.insert(infos, info)
end
end
end
-- Testa se a pontuação antes da dimensão é ".", "," ou ":"
-- Testa se a pontuação antes da dimensão é ".", "," ou ":"
Linha 827: Linha 886:
end
end
local f440 =
local f440 =
mw.text.trim(frame:expandTemplate {title = "Field data string", args = {"440", "0", "0", fullpagename = target}}) or
mw.text.trim(frame:expandTemplate { title = "Field data string", args = { "440", "0", "0", fullpagename = target } }) or
""
""
if f440 ~= "" then
if f440 ~= "" then
a = "O campo 440 é obsoleto. Mova seu conteúdo para o campo 490"
a = "O campo 440 é obsoleto. Mova seu conteúdo para o campo 490"
Linha 836: Linha 895:
-- Testa se existem indicadores, parênteses no subcampo $a do campo 490 e se existe ";" antes da numeração da série
-- Testa se existem indicadores, parênteses no subcampo $a do campo 490 e se existe ";" antes da numeração da série
local f490 =
local f490 =
mw.text.trim(frame:expandTemplate {title = "Field data string", args = {"490", "0", "0", fullpagename = target}}) or
mw.text.trim(frame:expandTemplate { title = "Field data string", args = { "490", "0", "0", fullpagename = target } }) or
""
""
if f490 ~= "" then
if f490 ~= "" then
if f490:sub(2, 2) ~= "#" then
if f490:sub(2, 2) ~= "#" then
Linha 844: Linha 903:
table.insert(infos, info)
table.insert(infos, info)
end
end
local f490a = frame:expandTemplate {title = "Select", args = {"490", "a", target}} or ""
local f490a = frame:expandTemplate { title = "Select", args = { "490", "a", target } } or ""
if f490a ~= "" then
if f490a ~= "" then
if string.match(f490a, "^%(") then
if string.match(f490a, "^%(") then
a = "Segundo as orientações do MARC 21, não inclua os parênteses no campo 490 ou 830"
a = "Segundo as orientações do MARC 21, não inclua os parênteses no campo 490 ou 830"
info = string.format('* <strong class="error">%s.</strong>', a)
table.insert(infos, info)
end
-- Testa se o início da série/coleção começa com letra minúscula
if string.match(f490a, "^[a-zà-ÿ]") then
a = "Normalmente, o início de uma série/coleção (490 $a) começa com letra maiúscula"
info = string.format('* <strong class="error">%s.</strong>', a)
info = string.format('* <strong class="error">%s.</strong>', a)
table.insert(infos, info)
table.insert(infos, info)
end
end
end
end
local f490v = frame:expandTemplate {title = "Select", args = {"490", "v", target}} or ""
local f490v = frame:expandTemplate { title = "Select", args = { "490", "v", target } } or ""
if f490v ~= "" then
if f490v ~= "" then
if not string.match(f490, ";%s?%$v") then
if not string.match(f490, ";%s?%$v") then
Linha 862: Linha 927:
-- Testa a consistência entre o indicador do 490 e a presença do campo 830
-- Testa a consistência entre o indicador do 490 e a presença do campo 830
local f830 =
local f830 =
mw.text.trim(
mw.text.trim(
frame:expandTemplate {title = "Field data string", args = {"830", "0", "0", fullpagename = target}}
frame:expandTemplate { title = "Field data string", args = { "830", "0", "0", fullpagename = target } }
) or ""
) or ""
if f490:sub(1, 1) == "#" then
if f490:sub(1, 1) == "#" then
a = "Está faltando o primeiro indicador do campo 490"
a = "Está faltando o primeiro indicador do campo 490"
Linha 872: Linha 937:
if f830 == "" then
if f830 == "" then
a =
a =
"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"
"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"
info = string.format('* <strong class="error">%s.</strong>', a)
info = string.format('* <strong class="error">%s.</strong>', a)
table.insert(infos, info)
table.insert(infos, info)
Linha 879: Linha 944:
if f830 ~= "" then
if f830 ~= "" then
a =
a =
"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"
"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"
info = string.format('* <strong class="error">%s.</strong>', a)
info = string.format('* <strong class="error">%s.</strong>', a)
table.insert(infos, info)
table.insert(infos, info)
Linha 891: Linha 956:
-- Testa se a nota 500 acaba com "."
-- Testa se a nota 500 acaba com "."
local f500 =
local f500 =
mw.text.trim(frame:expandTemplate {title = "Field data string", args = {"500", "0", "0", fullpagename = target}}) or
mw.text.trim(frame:expandTemplate { title = "Field data string", args = { "500", "0", "0", fullpagename = target } }) or
""
""
if f500 ~= "" then
if f500 ~= "" then
if string.match(f500, "[a-zA-ZÀ-ü0-9:;-]$") then
if string.match(f500, "[a-zA-ZÀ-ü0-9:;-]$") then
Linha 907: Linha 972:
-- Testa se a nota 504 acaba com "." e se existe uso de maiúsculas no meio da nota
-- Testa se a nota 504 acaba com "." e se existe uso de maiúsculas no meio da nota
local f504 =
local f504 =
mw.text.trim(frame:expandTemplate {title = "Field data string", args = {"504", "0", "0", fullpagename = target}}) or
mw.text.trim(frame:expandTemplate { title = "Field data string", args = { "504", "0", "0", fullpagename = target } }) or
""
""
if f504 ~= "" then
if f504 ~= "" then
if string.match(f504, "[a-zA-ZÀ-ü0-9]$") then
if string.match(f504, "[a-zA-ZÀ-ü0-9]$") then
Linha 928: Linha 993:
end
end
local f600 =
local f600 =
mw.text.trim(frame:expandTemplate {title = "Field data string", args = {"600", "0", "0", fullpagename = target}}) or
mw.text.trim(frame:expandTemplate { title = "Field data string", args = { "600", "0", "0", fullpagename = target } }) or
""
""
-- Testa os indicadores dos campos 6XX
-- Testa os indicadores dos campos 6XX
if f600 ~= "" then
if f600 ~= "" then
Linha 943: Linha 1 008:
end
end
-- Testa se existe "," no subcampo $a (Nome, Sobrenome)
-- Testa se existe "," no subcampo $a (Nome, Sobrenome)
local f600a = frame:expandTemplate {title = "Select", args = {"600", "a", target}} or ""
local f600a = frame:expandTemplate { title = "Select", args = { "600", "a", target } } or ""
if f600a ~= "" then
if f600a ~= "" then
if not string.match(f600a, ".*,.") then
if not string.match(f600a, ".*,.") then
Linha 952: Linha 1 017:
if string.match(f600a, "[a-zÀ-ü],[A-ZÀ-ü]") then
if string.match(f600a, "[a-zÀ-ü],[A-ZÀ-ü]") then
a = "Falta espaço após a vírgula. Verifique o campo 600"
a = "Falta espaço após a vírgula. Verifique o campo 600"
info = string.format('* <strong class="error">%s.</strong>', a)
table.insert(infos, info)
end
if string.match(f600a, "%d%d%d%d") then
a = "No campo 600, o ano deve ser informado no subcampo $d"
info = string.format('* <strong class="error">%s.</strong>', a)
info = string.format('* <strong class="error">%s.</strong>', a)
table.insert(infos, info)
table.insert(infos, info)
end
end
end
end
local f600q = frame:expandTemplate {title = "Select", args = {"600", "q", target}} or ""
local f600q = frame:expandTemplate { title = "Select", args = { "600", "q", target } } or ""
if f600q ~= "" then
if f600q ~= "" then
if not string.match(f600q, "^%(") then
if not string.match(f600q, "^%(") then
Linha 966: Linha 1 036:
end
end
local f610 =
local f610 =
mw.text.trim(frame:expandTemplate {title = "Field data string", args = {"610", "0", "0", fullpagename = target}}) or
mw.text.trim(frame:expandTemplate { title = "Field data string", args = { "610", "0", "0", fullpagename = target } }) or
""
""
if f610 ~= "" then
if f610 ~= "" then
if f610:sub(1, 1) == "#" then
if f610:sub(1, 1) == "#" then
Linha 981: Linha 1 051:
end
end
local f611 =
local f611 =
mw.text.trim(frame:expandTemplate {title = "Field data string", args = {"611", "0", "0", fullpagename = target}}) or
mw.text.trim(frame:expandTemplate { title = "Field data string", args = { "611", "0", "0", fullpagename = target } }) or
""
""
if f611 ~= "" then
if f611 ~= "" then
if f611:sub(1, 1) == "#" then
if f611:sub(1, 1) == "#" then
Linha 996: Linha 1 066:
end
end
local f630 =
local f630 =
mw.text.trim(frame:expandTemplate {title = "Field data string", args = {"630", "0", "0", fullpagename = target}}) or
mw.text.trim(frame:expandTemplate { title = "Field data string", args = { "630", "0", "0", fullpagename = target } }) or
""
""
if f630 ~= "" then
if f630 ~= "" then
if f630:sub(1, 1) == "#" then
if f630:sub(1, 1) == "#" then
Linha 1 011: Linha 1 081:
end
end
local f650 =
local f650 =
mw.text.trim(frame:expandTemplate {title = "Field data string", args = {"650", "0", "0", fullpagename = target}}) or
mw.text.trim(frame:expandTemplate { title = "Field data string", args = { "650", "0", "0", fullpagename = target } }) or
""
""
if f650 ~= "" then
if f650 ~= "" then
if f650:sub(1, 1) ~= "0" then
if f650:sub(1, 1) ~= "0" then
Linha 1 038: Linha 1 108:
end
end
local f651 =
local f651 =
mw.text.trim(frame:expandTemplate {title = "Field data string", args = {"651", "0", "0", fullpagename = target}}) or
mw.text.trim(frame:expandTemplate { title = "Field data string", args = { "651", "0", "0", fullpagename = target } }) or
""
""
if f651 ~= "" then
if f651 ~= "" then
if f651:sub(1, 1) ~= "#" then
if f651:sub(1, 1) ~= "#" then
Linha 1 054: Linha 1 124:
-- Testa os pontos de acesso secundários, tal como os principais
-- Testa os pontos de acesso secundários, tal como os principais
local f700 =
local f700 =
mw.text.trim(frame:expandTemplate {title = "Field data string", args = {"700", "0", "0", fullpagename = target}}) or
mw.text.trim(frame:expandTemplate { title = "Field data string", args = { "700", "0", "0", fullpagename = target } }) or
""
""
if f700 ~= "" then
if f700 ~= "" then
info = "Um ponto de acesso secundário foi dado a uma <b>pessoa</b>"
info = "Um ponto de acesso secundário foi dado a uma <b>pessoa</b>"
Linha 1 085: Linha 1 155:
end
end
-- Testa se existe mais de um subcampo $a no mesmo campo 700
-- Testa se existe mais de um subcampo $a no mesmo campo 700
local exist700 = frame:expandTemplate {title = "Exist", args = {"700", target}} or false
local exist700 = frame:expandTemplate { title = "Exist", args = { "700", target } } or false
if exist700 == "yes" then
if exist700 == "yes" then
if string.match(f700, "%$a.*%$a.-$") then
if string.match(f700, "%$a.*%$a.-$") then
Linha 1 093: Linha 1 163:
end
end
-- testa se existe "," no subcampo $a (Nome, Sobrenome)
-- testa se existe "," no subcampo $a (Nome, Sobrenome)
local f700a = frame:expandTemplate {title = "Select", args = {"700", "a", target}} or ""
local f700a = frame:expandTemplate { title = "Select", args = { "700", "a", target } } or ""
if f700a ~= "" then
if f700a ~= "" then
if not string.match(f700a, ".-,.") then
if not string.match(f700a, ".-,.") then
Linha 1 102: Linha 1 172:
if string.match(f700a, "[a-zÀ-ü],[A-ZÀ-ü]") then
if string.match(f700a, "[a-zÀ-ü],[A-ZÀ-ü]") then
a = "Falta espaço após a vírgula. Verifique o campo 700"
a = "Falta espaço após a vírgula. Verifique o campo 700"
info = string.format('* <strong class="error">%s.</strong>', a)
table.insert(infos, info)
end
if string.match(f700a, "%d%d%d%d") then
a = "No campo 700, o ano deve ser informado no subcampo $d"
info = string.format('* <strong class="error">%s.</strong>', a)
info = string.format('* <strong class="error">%s.</strong>', a)
table.insert(infos, info)
table.insert(infos, info)
end
end
end
end
local f700q = frame:expandTemplate {title = "Select", args = {"700", "q", target}} or ""
local f700q = frame:expandTemplate { title = "Select", args = { "700", "q", target } } or ""
if f700q ~= "" then
if f700q ~= "" then
if not string.match(f700q, "^%(") then
if not string.match(f700q, "^%(") then
a = "O subcampo $q do campo 700 necessita parênteses"
a = "O subcampo $q do campo 700 necessita parênteses"
info = string.format('* <strong class="error">%s.</strong>', a)
table.insert(infos, info)
end
end
local f700e = frame:expandTemplate { title = "Select", args = { "700", "e", target } } or ""
if f700e ~= "" then
if string.match(f700, "[a-zA-ZÀ-ü0-9%]-]%s?%$e") then
a = "O subcampo $e do campo 700 deve ser precedido por uma vírgula"
info = string.format('* <strong class="error">%s.</strong>', a)
info = string.format('* <strong class="error">%s.</strong>', a)
table.insert(infos, info)
table.insert(infos, info)
Linha 1 117: Linha 1 200:
end
end
local f710 =
local f710 =
mw.text.trim(frame:expandTemplate {title = "Field data string", args = {"710", "0", "0", fullpagename = target}}) or
mw.text.trim(frame:expandTemplate { title = "Field data string", args = { "710", "0", "0", fullpagename = target } }) or
""
""
if f710 ~= "" then
if f710 ~= "" then
info = "Um ponto de acesso secundário foi dado a uma <b>entidade coletiva</b>"
info = "Um ponto de acesso secundário foi dado a uma <b>entidade coletiva</b>"
Linha 1 149: Linha 1 232:
end
end
local f711 =
local f711 =
mw.text.trim(frame:expandTemplate {title = "Field data string", args = {"711", "0", "0", fullpagename = target}}) or
mw.text.trim(frame:expandTemplate { title = "Field data string", args = { "711", "0", "0", fullpagename = target } }) or
""
""
if f711 ~= "" then
if f711 ~= "" then
info = "Um ponto de acesso secundário foi dado a um <b>evento</b>"
info = "Um ponto de acesso secundário foi dado a um <b>evento</b>"
Linha 1 181: Linha 1 264:
end
end
local f740 =
local f740 =
mw.text.trim(frame:expandTemplate {title = "Field data string", args = {"740", "0", "0", fullpagename = target}}) or
mw.text.trim(frame:expandTemplate { title = "Field data string", args = { "740", "0", "0", fullpagename = target } }) or
""
""
if f740 ~= "" then
if f740 ~= "" then
if f740:sub(1, 1) == "#" then
if f740:sub(1, 1) == "#" then
Linha 1 192: Linha 1 275:
-- Testa os indicadores do campo 830
-- Testa os indicadores do campo 830
local f830 =
local f830 =
mw.text.trim(frame:expandTemplate {title = "Field data string", args = {"830", "0", "0", fullpagename = target}}) or
mw.text.trim(frame:expandTemplate { title = "Field data string", args = { "830", "0", "0", fullpagename = target } }) or
""
""
if f830 ~= "" then
if f830 ~= "" then
if f830:sub(1, 1) ~= "#" then
if f830:sub(1, 1) ~= "#" then
Linha 1 205: Linha 1 288:
table.insert(infos, info)
table.insert(infos, info)
end
end
local f830v = frame:expandTemplate {title = "Select", args = {"830", "v", target}} or ""
local f830v = frame:expandTemplate { title = "Select", args = { "830", "v", target } } or ""
if f830v ~= "" then
if f830v ~= "" then
if not string.match(f830, ";%s?%$v") then
if not string.match(f830, ";%s?%$v") then
Linha 1 220: Linha 1 303:
end
end
local f856 =
local f856 =
mw.text.trim(frame:expandTemplate {title = "Field data string", args = {"856", "0", "0", fullpagename = target}}) or
mw.text.trim(frame:expandTemplate { title = "Field data string", args = { "856", "0", "0", fullpagename = target } }) or
""
""
if f856 ~= "" then
if f856 ~= "" then
if f856:sub(1, 1) ~= "4" then
if f856:sub(1, 1) ~= "4" then
Linha 1 228: Linha 1 311:
table.insert(infos, info)
table.insert(infos, info)
end
end
local f856a = frame:expandTemplate {title = "Select", args = {"856", "a", target}} or ""
local f856a = frame:expandTemplate { title = "Select", args = { "856", "a", target } } or ""
if f856a ~= "" then
if f856a ~= "" then
a = "Normalmente, o subcampo utilizado no 856 é o $u, não o $a"
a = "Normalmente, o subcampo utilizado no 856 é o $u, não o $a"
Linha 1 237: Linha 1 320:
-- Testa por inteiro o registro de modo a acusar: "," ou o "." precedido de espaço; designadores de subcampos errados
-- Testa por inteiro o registro de modo a acusar: "," ou o "." precedido de espaço; designadores de subcampos errados
local isoRecord =
local isoRecord =
frame:callParserFunction {
frame:callParserFunction {
name = "#ask:[[-Has subobject::" .. target .. "]][[Field data::+]]",
name = "#ask:[[-Has subobject::" .. target .. "]][[Field data::+]]",
args = {
args = {
"?Field data",
"?Field data",
format = "plainlist",
format = "plainlist",
link = "none",
link = "none",
headers = "hide",
headers = "hide",
mainlabel = "-",
mainlabel = "-",
outro = "",
outro = "",
sep = "",
sep = "",
valuesep = "",
valuesep = "",
propsep = ""
propsep = ""
}
}
} or ""
} or ""
if string.match(isoRecord, "%s[.,][^.]") then
if string.match(isoRecord, "%s[.,][^.]") then
a = "Pontos finais ou vírgulas nunca devem ser precedidos por um espaço"
a = "Pontos finais ou vírgulas nunca devem ser precedidos por um espaço"

Edição atual tal como às 13h23min de 23 de outubro de 2024

A documentação para este módulo pode ser criada em Módulo:BibRules/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
  -- Somente realiza as análises se existir o campo 245
  local f245 =
      mw.text.trim(frame:expandTemplate { title = "Field data string", args = { "245", "0", "0", fullpagename = target } }) or
      ""
  if f245 ~= "" then
    -- Categorias
    local categories =
        frame:callParserFunction {
          name = "#ask:[[" .. target .. "]]",
          args = {
            "?Category",
            format = "plainlist",
            link = "none",
            headers = "hide",
            mainlabel = "-",
            outro = "",
            sep = "",
            valuesep = "",
            propsep = "",
            prefix = "none"
          }
        } or ""
    -- 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" or recordStatus == "p" 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
    -- Type of record
    local typeOfRecord =
        frame:expandTemplate {
          title = "Field data string",
          args = { "000", "6", "1", property = "Leader", fullpagename = target }
        } or false
    if typeOfRecord == "a" then
      a = "Segundo o Líder, este registro descreve um <b>material textual</b>"
      info = string.format("* %s.", a)
      table.insert(infos, info)
    end
    -- Bibliographic level
    local bibliographicLevel =
        frame:expandTemplate {
          title = "Field data string",
          args = { "000", "7", "1", property = "Leader", fullpagename = target }
        } or false
    if bibliographicLevel == "m" then
      a =
      "Segundo o Líder, este registro descreve um <b>item monográfico</b> (não parte de um item, não um item seriado, não uma coleção, etc.)"
      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 == "1" then
      a =
      "Segundo o Líder, este registro tem um nível <b>completo</b> de catalogação (mas o material não foi examinado)"
      info = string.format("* %s.", a)
      table.insert(infos, info)
    elseif encodingLevel == "#" then
      a =
      "Segundo o Líder, este registro tem um nível <b>completo</b> de catalogação (a descrição foi realizada com o material em mãos)"
      info = string.format("* %s.", a)
      table.insert(infos, info)
    end
    -- Descriptive cataloging form
    local descriptiveCatalogingForm =
        frame:expandTemplate {
          title = "Field data string",
          args = { "000", "18", "1", property = "Leader", fullpagename = target }
        } or false
    if descriptiveCatalogingForm == "a" then
      a = "Segundo o Líder, este registro possui uma catalogação <b>compatível com as regras do AACR 2</b>"
      info = string.format("* %s.", a)
      table.insert(infos, info)
    else
      a = "Segundo o Líder, este registro possui uma catalogação <b>não compatível com as regras da ISBD</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)
    -- Campo 008
    local invalidCode = '<strong class="error">código inválido para o local de publicação</strong>'
    local pubPlaceTbl = {
      ["acb"] = "Acre",
      ["alb"] = "Alagoas",
      ["amb"] = "Amazonas",
      ["apb"] = "Amapá",
      ["bab"] = "Bahia",
      ["ceb"] = "Ceará",
      ["dfb"] = "Distrito Federal",
      ["esb"] = "Espírito Santo",
      ["gob"] = "Goiás",
      ["mab"] = "Maranhão",
      ["mgb"] = "Minas Gerais",
      ["msb"] = "Mato Grosso do Sul",
      ["mtb"] = "Mato Grosso",
      ["pab"] = "Pará",
      ["pbb"] = "Paraíba",
      ["peb"] = "Pernambuco",
      ["pib"] = "Piauí",
      ["prb"] = "Paraná",
      ["rjb"] = "Rio de Janeiro",
      ["rnb"] = "Rio Grande do Norte",
      ["rob"] = "Rondônia",
      ["rrb"] = "Roraima",
      ["rsb"] = "Rio Grande do Sul",
      ["scb"] = "Santa Catarina",
      ["seb"] = "Sergipe",
      ["spb"] = "São Paulo",
      ["tob"] = "Tocantins",
      ["bl "] = "Brasil",
      ["xxu"] = "Estados Unidos",
      ["flu"] = "Flórida, EUA",
      ["nyu"] = "Nova York, EUA",
      ["po "] = "Portugal",
      ["xxk"] = "Reino Unido",
      ["fr "] = "França",
      ["sp "] = "Espanha",
      ["gw "] = "Alemanha",
      ["xx "] = '<strong class="error">não foi identificado um local de publicação no campo 008.</strong>',
      ["vp "] = "há vários locais de publicação",
      ["esp"] = invalidCode,
      ["eua"] = invalidCode,
      ["fra"] = invalidCode,
      ["pt "] = invalidCode,
      ["   "] = '<strong class="error">é necessário informar um código de local de publicação, campo 008.</strong>'
    }
    local f008pubPlace =
        frame:expandTemplate {
          title = "Field data string",
          args = { "008", "15", "3", property = "Control field data", fullpagename = target } or ""
        }
    if string.match(f008pubPlace, "^[A-Z]") then
      a = "O uso de maiúsculas não é permitido no campo 008, local de publicação"
      info = string.format('* <strong class="error">%s.</strong>', a)
      table.insert(infos, info)
    elseif pubPlaceTbl[f008pubPlace] then
      a = "O item possui a seguinte origem:"
      info = string.format("* %s %s.", a, tostring(pubPlaceTbl[f008pubPlace]))
      table.insert(infos, info)
    else
      a = "O item possui a seguinte origem:"
      info = string.format("* %s %s.", a, f008pubPlace)
      table.insert(infos, info)
    end
    invalidCode = '<strong class="error">código inválido para o idioma (campo 008 ou subcampo $h do campo 041).</strong>'
    local langTbl = {
      ["por"] = "português",
      ["eng"] = "inglês",
      ["spa"] = "espanhol",
      ["ger"] = "alemão",
      ["fre"] = "francês",
      ["ita"] = "italiano",
      ["chi"] = "chinês",
      ["esp"] = invalidCode,
      ["ing"] = invalidCode,
      ["fra"] = invalidCode,
      ["pt"] = invalidCode,
      ["en"] = invalidCode,
      ["es"] = invalidCode,
      ["   "] = '<strong class="error">é necessário informar um código de idioma no campo 008.</strong>'
    }
    local f008lang =
        frame:expandTemplate {
          title = "Field data string",
          args = { "008", "35", "3", property = "Control field data", fullpagename = target }
        } or ""
    if string.match(f008lang, "^[A-Z]") then
      a = "O uso de maiúsculas não é permitido no campo 008, idioma"
      info = string.format('* <strong class="error">%s.</strong>', a)
    elseif langTbl[f008lang] then
      a = "Majoritariamente, o item se expressa no seguinte idioma:"
      info = string.format("* %s %s", a, tostring(langTbl[f008lang]))
    else
      a = "Majoritariamente, o item se expressa no seguinte idioma:"
      info = string.format("* %s %s", a, f008lang)
    end
    -- Se existe o campo 041, mostra '(traduzido do... )' na mesma linha do idioma presente no 008
    local f041 =
        mw.text.trim(frame:expandTemplate { title = "Field data string", args = { "041", "0", "0", fullpagename = target } }) or
        ""
    if f041 ~= "" then
      if f041:sub(1, 1) == "1" then
        local f041h = frame:expandTemplate { title = "Select", args = { "041", "h", target } } or ""
        f041h = langTbl[f041h] or f041h
        info = string.format("%s (traduzido do %s).", info, f041h)
      end
    end
    table.insert(infos, info)
    -- Testa se existe(m) ISBN(s) inválido(s)
    local f020 =
        mw.text.trim(frame:expandTemplate { title = "Field data string", args = { "020", "0", "0", fullpagename = target } }) or
        ""
    if f020 ~= "" then
      local printedIsbn = frame:expandTemplate { title = "Print ISBN" } or ""
      if string.match(printedIsbn, "error") then
        a = "ISBN inválido, por favor, reveja os números informados"
        info = string.format('* <strong class="error">%s.</strong>', a)
        table.insert(infos, info)
      end
      -- Testa se existe(m) hifen(s) ou x minúsculo no ISBN
      local f020 = mw.smw.ask("[[" .. target .. "#020]]|?Field data#|headers=hide|mainlabel=-") or ""
      if type(f020) == "table" then
        for _, row in pairs(f020) do
          for _, data in pairs(row) do
            if type(data) == "table" then
              f020 = mw.text.trim(table.concat(data))
            else
              f020 = mw.text.trim(data)
            end
          end
        end
      end
      if string.match(f020, "-") then
        a = 'O ISBN não pode conter hifens. Apenas números e "X" maiúsculo'
        info = string.format('* <strong class="error">%s.</strong>', a)
        table.insert(infos, info)
      elseif string.match(f020, "x") then
        a = 'O ISBN não pode conter um x minúsculo. Apenas números e "X" maiúsculo'
        info = string.format('* <strong class="error">%s.</strong>', a)
        table.insert(infos, info)
      elseif string.match(f020, "%(") then
        a =
        'O campo de ISBN só pode conter números e "X" maiúsculo. Use o subcampo $q para outros dados (sem parênteses)'
        info = string.format('* <strong class="error">%s.</strong>', a)
        table.insert(infos, info)
      end
      -- Testa se há indicadores no campo 020
      if f020:sub(1, 1) ~= "#" then
        a = "O primeiro indicador do campo 020 foi preenchido, porém, ele não deve ser preenchido"
        info = string.format('* <strong class="error">.</strong>', a)
        table.insert(infos, info)
      end
      if f020:sub(2, 2) ~= "#" then
        a = "O segundo indicador do campo 020 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 o uso de maiúsculas no campo 041
    if f041 ~= "" then
      if f041:sub(1, 1) == "#" then
        a = "Talvez o primeiro indicador do campo 041 tenha sido esquecido"
        info = string.format('* <strong class="error">%s.</strong>', a)
        table.insert(infos, info)
      end
      local f041a = frame:expandTemplate { title = "Select", args = { "041", "a", target } } or ""
      if string.match(f041a, "^[A-Z]") then
        a = "O uso de maiúsculas não é permitido nos códigos de idioma (campo 041)"
        info = string.format('* <strong class="error">%s.</strong>', a)
        table.insert(infos, info)
      end
    end
    -- Verifica a presença de pontos de acesso principais 1XX
    -- TODO: trocar callParserFunction por mw.smw.ask
    -- queryResult = mw.smw.ask( '[[' .. target .. '#100||' .. target .. '#110||' .. target .. '#111||' .. target .. '#130]]' )
    local accessPointPresence =
        frame:callParserFunction {
          name = "#ask:[[" .. target .. "#100||" .. target .. "#110||" .. target .. "#111||" .. target .. "#130]]",
          args = { "?Field data", format = "count", mainlabel = "-" }
        } or 0
    accessPointPresence = tonumber(accessPointPresence) or 0
    -- Testa se há subcampo $b e se há espaço no subcampo $c do campo 090
    local f090 =
        mw.text.trim(frame:expandTemplate { title = "Field data string", args = { "090", "0", "0", fullpagename = target } }) or
        ""
    if f090 ~= "" then
      if string.match(f090, ",") then
        a = "Normalmente não há vírgula no campo 090, reveja"
        info = string.format('* <strong class="error">%s.</strong>', a)
        table.insert(infos, info)
      end
      local f090b = frame:expandTemplate { title = "Select", args = { "090", "b", target } } or ""
      if f090b == "" then
        a = "Está faltando o subcampo $b do campo 090 (notação de Cutter)"
        info = string.format('* <strong class="error">%s.</strong>', a)
        table.insert(infos, info)
      end
      -- Testa se não foi esquecida a letra do tíulo na notação de Cutter, caso haja um ponto de acesso 1XX
      if accessPointPresence >= 1 and string.match(f090b, "[0-9]$") then
        a = "Falta a letra do título na notação de Cutter"
        info = string.format('* <strong class="error">%s.</strong>', a)
        table.insert(infos, info)
      end
      local f090c = frame:expandTemplate { title = "Select", args = { "090", "c", target } } or ""
      if string.match(f090c, "%sed") then
        a = "Nossa política de catalogação proíbe espaços na indicação de edição no número de chamada (090 $c)"
        info = string.format('* <strong class="error">%s.</strong>', a)
        table.insert(infos, info)
      end
    end
    -- 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
    if f100existance ~= "" then
      local f100 =
          mw.text.trim(
            frame:expandTemplate { title = "Field data string", args = { "100", "0", "0", fullpagename = target } }
          ) or ""
      info = "O ponto de acesso principal foi dado a uma <b>pessoa</b>"
      if f100:sub(1, 1) == "0" then
        a = 'e a entrada começa pelo seu <strong class="error">primeiro nome</strong>'
        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
        if string.match(f100a, "%d%d%d%d") then
          a = "No campo 100, o ano deve ser informado no subcampo $d"
          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
      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 = "O ponto de acesso principal foi dado a uma <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
    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 = "O ponto de acesso principal foi dado a um <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 = "O ponto de acesso principal foi dado a um <b>título uniforme</b>"
      if f130: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
        local f130a = frame:expandTemplate { title = "Select", args = { "130", "a", target } } or ""
        a = ucfirst(f130a:sub(tonumber(f130:sub(1, 1)) or 0))
        info = string.format('* %s, ele será alfabetado como "<b>%s</b>".', info, a)
        table.insert(infos, info)
      end
      if f130:sub(2, 2) ~= "#" then
        a = "O segundo indicador do campo 130 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. Se existir, testa se o primeiro indicador do campo 245 condiz com essa realidade
    local f245ind1 = f245:sub(1, 1) or ""
    if accessPointPresence == 0 then
      if f245ind1 == "1" then
        a =
        'Não houve um ponto de acesso principal nos campos 1XX, desse modo, o primeiro indicador do campo 245 deve ter o valor "0"'
        info = string.format('* <strong class="error">%s.</strong>', a)
        table.insert(infos, info)
      end
    else
      if f245ind1 == "0" then
        a =
        'Houve um ponto de acesso principal nos campos 1XX, desse modo, o primeiro indicador do campo 245 deve ter o valor "1"'
        info = string.format('* <strong class="error">%s.</strong>', a)
        table.insert(infos, info)
      end
    end
    -- 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
    local f240 =
        mw.text.trim(frame:expandTemplate { title = "Field data string", args = { "240", "0", "0", fullpagename = target } }) or
        ""
    if f240 ~= "" then
      if f041 == "" then
        a = "Normalmente, quando há um campo 240, deve haver um campo 041"
        info = string.format('* <strong class="error">%s.</strong>', a)
        table.insert(infos, info)
      end
      local f240l = frame:expandTemplate { title = "Select", args = { "240", "l", target } } or ""
      if f240l ~= "" then
        if string.match(f240l, "^[a-zA-Z][a-zA-Z][a-zA-Z]$") then
          a = "É necessário informar o idioma por extenso ($l do campo 240) antecedido por um ponto no subcampo $a"
          info = string.format('* <strong class="error">%s.</strong>', a)
          table.insert(infos, info)
        end
        if not string.match(f240, "%.%s?%$l") then
          a = "O subcampo $l do campo 240 necessita ser antecedido por um ponto no subcampo anterior"
          info = string.format('* <strong class="error">%s.</strong>', a)
          table.insert(infos, info)
        end
      else
        a = "Normalmente, quando há um campo 240 $a, deve haver também um 240 $l. 240 $l não foi detectado"
        info = string.format('* <strong class="error">%s.</strong>', a)
        table.insert(infos, info)
      end
      if f240:sub(1, 1) == "0" then
        a = "O título uniforme não será exibido"
        info = string.format("* %s.", a)
        table.insert(infos, info)
      elseif f240:sub(1, 1) == "1" then
        a = "O título uniforme será exibido"
        info = string.format("* %s.", a)
        table.insert(infos, info)
      elseif f240:sub(1, 1) == "#" then
        a = "Está faltando o primeiro indicador do campo 240"
        info = string.format('* <strong class="error">%s.</strong>', a)
        table.insert(infos, info)
      else
        a = "O primeiro indicador do campo 240 foi preenchido incorretamente"
        info = string.format('* <strong class="error">%s.</strong>', a)
        table.insert(infos, info)
      end
      if f240:sub(2, 2) == "#" then
        a = "Está faltando o segundo indicador do campo 240"
        info = string.format('* <strong class="error">%s.</strong>', a)
        table.insert(infos, info)
      else
        local f240a =
            string.gsub(mw.text.trim(frame:expandTemplate { title = "Select", args = { "240", "a", target } }), "[/:=.]$",
              "") or ""
        a = "O título uniforme será alfabetado como"
        b = ucfirst(f240a:sub(f240:sub(2, 2) + 1))
        info = string.format('* %s "<b>%s</b>".', a, b)
        table.insert(infos, info)
      end
    end
    -- Informa se o título receberá o ponto de acesso principal ou secundário
    if f245ind1 == "0" then
      a = "O título recebeu o <b>ponto de acesso principal</b>"
      info = string.format("* %s.", a)
      table.insert(infos, info)
    elseif f245ind1 == "1" then
      a = "O título recebeu um <b>ponto de acesso secundário</b>"
      info = string.format('* %s.', a)
      table.insert(infos, info)
    elseif f245ind1 == "#" then
      a = "Está faltando o primeiro indicador do campo 245"
      info = string.format('* <strong class="error">%s.</strong>', a)
      table.insert(infos, info)
    else
      a = "O primeiro indicador do campo 245 foi preenchido incorretamente"
      info = string.format('* <strong class="error">%s.</strong>', a)
      table.insert(infos, info)
    end
    -- 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 '.')
    local f245a = frame:expandTemplate { title = "Select", args = { "245", "a", target } } or ""
    if f245:sub(2, 2) == "#" then
      a = "Está faltando o segundo indicador do campo 245"
      info = string.format('* <strong class="error">%s.</strong>', a)
      table.insert(infos, info)
    else
      a = "O título será alfabetado como"
      b = ucfirst(f245a:sub(f245:sub(2, 2) + 1))
      b = string.gsub(b, "%s?[/:=.]$", "")
      info = string.format('* %s "<b>%s</b>".', a, b)
      table.insert(infos, info)
    end
    -- Testa se existe espaço antes da pontuação "/", ":" e "=" no final do subcampo $a e $b
    if string.match(f245a, "[a-zA-Z][/:=]$") then
      a = "Inclua um espaço antes da pontuação (ao final do subcampo $a do campo 245)"
      info = string.format('* <strong class="error">%s.</strong>', a)
      table.insert(infos, info)
    end
    -- Testa se o subcampo $b começa com letras maiúsculas
    local f245b = frame:expandTemplate { title = "Select", args = { "245", "b", target } } or ""
    if f245b ~= "" then
      if string.match(f245b, "[a-zA-Z][/:=]$") then
        a = "Inclua um espaço antes da pontuação (ao final do subcampo $b do campo 245"
        info = string.format('* <strong class="error">%s.</strong>', a)
        table.insert(infos, info)
      end
      if string.match(f245b, "^[A-Z]") then
        a = "Normalmente, o início de um subtítulo (245 $b) começa com letras minúsculas"
        info = string.format('* <strong class="error">%s.</strong>', a)
        table.insert(infos, info)
      end
      -- Testa se existe mais de um subcampo $b no 245
      if string.match(f245, "%$b.*%$b") then
        a = "Há mais de um subcampo $b no campo 245. O subcampo $b não é repetível"
        info = string.format('* <strong class="error">%s.</strong>', a)
        table.insert(infos, info)
      end
    end
    -- Testa se o subcampo $c está presente
    local f245c = frame:expandTemplate { title = "Select", args = { "245", "c", target } } or ""
    if f245c ~= "" then
      -- Testa se existe espaço antes do ponto e vírgula na indicação de responsabilidade, subcampo $c do 245
      if string.match(f245c, "[a-zA-Z.];") then
        a = "Inclua um espaço antes do ponto e vírgula (subcampo $c do campo 245)"
        info = string.format('* <strong class="error">%s.</strong>', a)
        table.insert(infos, info)
      end
      -- Testa se existe "/" antes do subcampo $c do campo 245
      if string.match(f245, "[a-zA-Z]%s?%$c") then
        a = 'É necessária a pontuação que precede a indicação de responsabilidade (" / ") no campo 245'
        info = string.format('* <strong class="error">%s.</strong>', a)
        table.insert(infos, info)
      end
      -- Testa se há ": $c"
      if string.match(f245, ":%s?%$c") then
        a =
        '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).'
        info = string.format('* <strong class="error">%s.</strong>', a)
        table.insert(infos, info)
      end
      -- Testa se o subcampo $c termina em "-"
      if string.match(f245, "%-$") then
        a = "Nunca inclua hifens de separação de áreas do AACR2 em registros MARC 21. Reveja a pontuação (campo 245)"
        info = string.format('* <strong class="error">%s.</strong>', a)
        table.insert(infos, info)
      end
      -- Testa se existe mais de um subcampo $c no 245
      if string.match(f245, "%$c.*%$c") then
        a = "Há mais de um subcampo $c no campo 245. O subcampo $c não é repetível"
        info = string.format('* <strong class="error">%s.</strong>', a)
        table.insert(infos, info)
      end
      -- Testa se existe mais de 3 vírgulas no campo 245 $c
      if string.match(f245c, "[A-Za-zÀ-ü ]+,[A-Za-zÀ-ü ]+,[A-Za-zÀ-ü ]+,") then
        a = 'Parece haver mais de 3 pessoas na indicação de responsabilidade (245 $c), use " ... [et al.]"'
        info = string.format('* <strong class="error">%s.</strong>', a)
        table.insert(infos, info)
      end
      -- Testa se existe a sintaxe "*...[et. "
      if string.match(f245c, "[a-zA-ZÀ-ü]%.%.%.%[et.?%s") then
        a = 'No campo 245, o espaçamento correto é " ... [et al.]"'
        info = string.format('* <strong class="error">%s.</strong>', a)
        table.insert(infos, info)
      end
    else
      a = "Está faltando o subcampo $c do campo 245"
      info = string.format('* <strong class="error">%s.</strong>', a)
      table.insert(infos, info)
    end
    -- Testa se existe espaço antes de "ed." (subcampo $a do 250)
    local f250 =
        mw.text.trim(frame:expandTemplate { title = "Field data string", args = { "250", "0", "0", fullpagename = target } }) or
        ""
    if f250 ~= "" then
      local f250a = frame:expandTemplate { title = "Select", args = { "250", "a", target } } or ""
      if string.match(f250a, "%d%.?ed%.") then
        a = 'Inclua um espaço antes da indicação "ed." (subcampo $a do campo 250)'
        info = string.format('* <strong class="error">%s.</strong>', a)
        table.insert(infos, info)
      end
      if string.match(f250a, "%-$") then
        a = "Nunca inclua hifens de separação de áreas do AACR2 em registros MARC 21. Reveja a pontuação (campo 250)"
        info = string.format('* <strong class="error">%s.</strong>', a)
        table.insert(infos, info)
      end
    end
    -- Testa se existe 260, se existir, verifica a pontuação final dos subcampos $a, $b e $c do campo 260
    local f260 =
        mw.text.trim(frame:expandTemplate { title = "Field data string", args = { "260", "0", "0", fullpagename = target } }) or
        ""
    if f260 ~= "" then
      local f260a = frame:expandTemplate { title = "Select", args = { "260", "a", target } } or ""
      if f260a ~= "" then
        if string.match(f260a, "[a-zA-ZÀ-ü%],]%s?$") then
          a = 'Normalmente, o final do subcampo $a do campo 260 requer a seguinte pontuação " : "'
          info = string.format('* <strong class="error">%s.</strong>', a)
          table.insert(infos, info)
        end
      else
        if string.match(categories, "Livro") then
          a = "Está faltando o subcampo $a do campo 260"
          info = string.format('* <strong class="error">%s.</strong>', a)
          table.insert(infos, info)
        end
      end
      if string.match(f260a, "[a-zA-ZÀ-ü%]]:") then
        a =
        'Normalmente, o final do subcampo $a do campo 260 requer a seguinte pontuação " : " (perceba o espaço antes da pontuação)'
        info = string.format('* <strong class="error">%s.</strong>', a)
        table.insert(infos, info)
      end
      local f260b = frame:expandTemplate { title = "Select", args = { "260", "b", target } } or ""
      if f260b ~= "" then
        if string.match(f260b, "[a-zA-Z.]$") then
          a =
          'Normalmente, o final do subcampo $b do campo 260 requer uma das seguintes pontuações ", " ou " : ". Reveja a pontuação'
          info = string.format('* <strong class="error">%s.</strong>', a)
          table.insert(infos, info)
        end
      else
        if string.match(categories, "Livro") then
          a = "Está faltando o subcampo $b do campo 260"
          info = string.format('* <strong class="error">%s.</strong>', a)
          table.insert(infos, info)
        end
      end
      local f260c = frame:expandTemplate { title = "Select", args = { "260", "c", target } } or ""
      if f260c ~= "" then
        -- Testa se o subcampo $c é precedido ou não por ","
        if string.match(f260, "[a-zA-ZÀ-ü%]][;:]%s?%$c") then
          a = "O ano de publicação deve sempre ser precedido de uma vírgula. Reveja a pontuação (campo 260)"
          info = string.format('* <strong class="error">%s.</strong>', a)
          table.insert(infos, info)
        end
        if string.match(f260c, "[a-zA-ZÀ-ü0-9%]]$") then
          a = "Nossa política de catalogação define que o subcampo $c do campo 260 deve terminar com um ponto"
          info = string.format('* <strong class="error">%s.</strong>', a)
          table.insert(infos, info)
        end
      else
        a = "Está faltando o subcampo $c do campo 260"
        info = string.format('* <strong class="error">%s.</strong>', a)
        table.insert(infos, info)
      end
    end
    -- Testa se existe espaço entre o número e a indicaçação de extensão do texto
    local f300 =
        mw.text.trim(frame:expandTemplate { title = "Field data string", args = { "300", "0", "0", fullpagename = target } }) or
        ""
    if f300 ~= "" then
      local f300a = frame:expandTemplate { title = "Select", args = { "300", "a", target } } or ""
      if f300a ~= "" then
        if string.match(f300a, "%d[a-z]%.") then
          a = 'Inclua um espaço entre o número e a indicação "p.", "f." ou "v." (subcampo $a do campo 300)'
          info = string.format('* <strong class="error">%s.</strong>', a)
          table.insert(infos, info)
        end
        -- Testa se existe espaço entre "p." e ";"
        if string.match(f300a, "%.[:;]") then
          a = 'Inclua um espaço entre a indicação "p.", "f." ou "v." e a pontuação final (subcampo $a do campo 300)'
          info = string.format('* <strong class="error">%s.</strong>', a)
          table.insert(infos, info)
        end
        -- Testa se existe "il." no subcampo $a (deve estar no subcampo $b)
        if string.match(f300a, "il%.") then
          a = 'Ilustrações e outros detalhes físicos devem ir no subcampo $b do campo 300, antecedidos de " : "'
          info = string.format('* <strong class="error">%s.</strong>', a)
          table.insert(infos, info)
        end
      end
      local f300b = frame:expandTemplate { title = "Select", args = { "300", "b", target } } or ""
      if f300b ~= "" then
        -- Testa se existe ".;" no subcampo $b do campo 300
        if string.match(f300b, "%.;") then
          a = "Inclua um espaço entre o ponto e o ponto e vírgula (campo 300, subcampo $b)"
          info = string.format('* <strong class="error">%s.</strong>', a)
          table.insert(infos, info)
        end
        if string.match(f300b, "il,") then
          a = "Falta um ponto na abreviatura para ilustrações (il.)"
          info = string.format('* <strong class="error">%s.</strong>', a)
          table.insert(infos, info)
        end
        if string.match(f300b, "il%.?, col") then
          a = "'Ilustrações coloridas' (il. color.) é uma expressão só, remova a vírgula"
          info = string.format('* <strong class="error">%s.</strong>', a)
          table.insert(infos, info)
        end
        -- Testa se o subcampo $b contém "il. ; color" ou "il. ; p&b"
        if string.match(f300b, "il%. ?; color") then
          a = "'Ilustrações coloridas' (il. color.) é uma expressão só, remova o ponto e vírgula da expressão"
          info = string.format('* <strong class="error">%s.</strong>', a)
          table.insert(infos, info)
        end
        if string.match(f300b, "il%. ?; p&b") then
          a = "'Ilustrações pretas e brancas' (il. p&b) é uma expressão só, remova o ponto e vírgula da expressão"
          info = string.format('* <strong class="error">%s.</strong>', a)
          table.insert(infos, info)
        end
        -- Testa se os itens do subcampo $b estão separados por ponto e vírgula
        if string.match(f300b, "il%. ?; gráf") then
          a = "No campo 300, $b, os itens devem ser separados por vírgulas (il., gráfs.)"
          info = string.format('* <strong class="error">%s.</strong>', a)
          table.insert(infos, info)
        end
        -- Testa se o subcampo $b termina em ":"
        if not string.match(f300, ":%s%$b") then
          a = 'A pontuação que precede o subcampo $b, no campo 300, deve ser sempre " : "'
          info = string.format('* <strong class="error">%s.</strong>', a)
          table.insert(infos, info)
        end
      end
      local f300c = frame:expandTemplate { title = "Select", args = { "300", "c", target } } or ""
      if f300c ~= "" then
        -- Testa se a sintaxe das dimensões está correta
        if string.match(f300c, "%d[a-z]") then
          a =
          'Atenção, a sintaxe correta para a dimensão é: "NN cm" ou, menos frequentemente, "NN x NN cm" (subcampo $c do campo 300)'
          info = string.format('* <strong class="error">%s.</strong>', a)
          table.insert(infos, info)
        end
      else
        if string.match(categories, "Livro") then
          a = "Está faltando o subcampo $c do campo 300"
          info = string.format('* <strong class="error">%s.</strong>', a)
          table.insert(infos, info)
        end
      end
      -- Testa se a pontuação antes da dimensão é ".", "," ou ":"
      if string.match(f300, "[.,:]%s?%$c") then
        a = 'A pontuação que precede a dimensão (300 $c) deve ser " ; "'
        info = string.format('* <strong class="error">%s.</strong>', a)
        table.insert(infos, info)
      end
      -- Testa se o subcampo $c termina em "-"
      if string.match(f300, "%-$") then
        a = "Nunca inclua hifens de separação de áreas do AACR2 em registros MARC 21. Reveja a pontuação (campo 300)"
        info = string.format('* <strong class="error">%s.</strong>', a)
        table.insert(infos, info)
      end
    end
    local f440 =
        mw.text.trim(frame:expandTemplate { title = "Field data string", args = { "440", "0", "0", fullpagename = target } }) or
        ""
    if f440 ~= "" then
      a = "O campo 440 é obsoleto. Mova seu conteúdo para o campo 490"
      info = string.format('* <strong class="error">%s.</strong>', a)
      table.insert(infos, info)
    end
    -- Testa se existem indicadores, parênteses no subcampo $a do campo 490 e se existe ";" antes da numeração da série
    local f490 =
        mw.text.trim(frame:expandTemplate { title = "Field data string", args = { "490", "0", "0", fullpagename = target } }) or
        ""
    if f490 ~= "" then
      if f490:sub(2, 2) ~= "#" then
        a = "O segundo indicador do campo 490 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 f490a = frame:expandTemplate { title = "Select", args = { "490", "a", target } } or ""
      if f490a ~= "" then
        if string.match(f490a, "^%(") then
          a = "Segundo as orientações do MARC 21, não inclua os parênteses no campo 490 ou 830"
          info = string.format('* <strong class="error">%s.</strong>', a)
          table.insert(infos, info)
        end
        -- Testa se o início da série/coleção começa com letra minúscula
        if string.match(f490a, "^[a-zà-ÿ]") then
          a = "Normalmente, o início de uma série/coleção (490 $a) começa com letra maiúscula"
          info = string.format('* <strong class="error">%s.</strong>', a)
          table.insert(infos, info)
        end
      end
      local f490v = frame:expandTemplate { title = "Select", args = { "490", "v", target } } or ""
      if f490v ~= "" then
        if not string.match(f490, ";%s?%$v") then
          a = "É necessária a pontuação que precede a numeração da série (490, $v)"
          info = string.format('* <strong class="error">%s.</strong>', a)
          table.insert(infos, info)
        end
      end
      -- Testa a consistência entre o indicador do 490 e a presença do campo 830
      local f830 =
          mw.text.trim(
            frame:expandTemplate { title = "Field data string", args = { "830", "0", "0", fullpagename = target } }
          ) or ""
      if f490:sub(1, 1) == "#" then
        a = "Está faltando o primeiro indicador do campo 490"
        info = string.format('* <strong class="error">%s.</strong>', a)
        table.insert(infos, info)
      elseif f490:sub(1, 1) == "1" then
        if f830 == "" then
          a =
          "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"
          info = string.format('* <strong class="error">%s.</strong>', a)
          table.insert(infos, info)
        end
      elseif f490:sub(1, 1) == "0" then
        if f830 ~= "" then
          a =
          "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"
          info = string.format('* <strong class="error">%s.</strong>', a)
          table.insert(infos, info)
        end
      else
        a = "O primeiro indicador do campo 490 foi preenchido incorretamente"
        info = string.format('* <strong class="error">%s.</strong>', a)
        table.insert(infos, info)
      end
    end
    -- Testa se a nota 500 acaba com "."
    local f500 =
        mw.text.trim(frame:expandTemplate { title = "Field data string", args = { "500", "0", "0", fullpagename = target } }) or
        ""
    if f500 ~= "" then
      if string.match(f500, "[a-zA-ZÀ-ü0-9:;-]$") then
        a = "Nossa política de catalogação define que as notas devem terminar com um ponto (500)"
        info = string.format('* <strong class="error">%s.</strong>', a)
        table.insert(infos, info)
      end
      if string.match(f500, "inclui") then
        a = "Verifique o uso de maiúsculas no início de frase ('inclui')"
        info = string.format('* <strong class="error">%s.</strong>', a)
        table.insert(infos, info)
      end
    end
    -- Testa se a nota 504 acaba com "." e se existe uso de maiúsculas no meio da nota
    local f504 =
        mw.text.trim(frame:expandTemplate { title = "Field data string", args = { "504", "0", "0", fullpagename = target } }) or
        ""
    if f504 ~= "" then
      if string.match(f504, "[a-zA-ZÀ-ü0-9]$") then
        a = "Nossa política de catalogação define que as notas devem terminar com um ponto (504)"
        info = string.format('* <strong class="error">%s.</strong>', a)
        table.insert(infos, info)
      end
      -- Testa se existe uso de maiúsculas no meio da nota 504
      if string.match(f504:sub(6), ".*%s[A-Z]") then
        a = "Verifique o uso de maiúsculas na nota do campo 504"
        info = string.format('* <strong class="error">%s.</strong>', a)
        table.insert(infos, info)
      end
      if string.match(f504, "Inclui índice%.?$") then
        a = "'Inclui índice', somente, deve estar no campo 500"
        info = string.format('* <strong class="error">%s.</strong>', a)
        table.insert(infos, info)
      end
    end
    local f600 =
        mw.text.trim(frame:expandTemplate { title = "Field data string", args = { "600", "0", "0", fullpagename = target } }) or
        ""
    -- Testa os indicadores dos campos 6XX
    if f600 ~= "" then
      if f600:sub(1, 1) == "#" then
        a = "Está faltando o primeiro indicador do campo 600"
        info = string.format('* <strong class="error">%s.</strong>', a)
        table.insert(infos, info)
      end
      if f600:sub(2, 2) ~= "4" then
        a = 'Nossa política de catalogação define que o segundo indicador do campo 600 deve ser sempre "4"'
        info = string.format('* <strong class="error">%s.</strong>', a)
        table.insert(infos, info)
      end
      -- Testa se existe "," no subcampo $a (Nome, Sobrenome)
      local f600a = frame:expandTemplate { title = "Select", args = { "600", "a", target } } or ""
      if f600a ~= "" then
        if not string.match(f600a, ".*,.") then
          a = "Em pontos de acesso, o nome pessoal deve ser invertido (Nome, Sobrenome). Verifique o campo 600"
          info = string.format('* <strong class="error">%s.</strong>', a)
          table.insert(infos, info)
        end
        if string.match(f600a, "[a-zÀ-ü],[A-ZÀ-ü]") then
          a = "Falta espaço após a vírgula. Verifique o campo 600"
          info = string.format('* <strong class="error">%s.</strong>', a)
          table.insert(infos, info)
        end
        if string.match(f600a, "%d%d%d%d") then
          a = "No campo 600, o ano deve ser informado no subcampo $d"
          info = string.format('* <strong class="error">%s.</strong>', a)
          table.insert(infos, info)
        end
      end
      local f600q = frame:expandTemplate { title = "Select", args = { "600", "q", target } } or ""
      if f600q ~= "" then
        if not string.match(f600q, "^%(") then
          a = "O subcampo $q do campo 600 necessita parênteses"
          info = string.format('* <strong class="error">%s.</strong>', a)
          table.insert(infos, info)
        end
      end
    end
    local f610 =
        mw.text.trim(frame:expandTemplate { title = "Field data string", args = { "610", "0", "0", fullpagename = target } }) or
        ""
    if f610 ~= "" then
      if f610:sub(1, 1) == "#" then
        a = "Está faltando o primeiro indicador do campo 610"
        info = string.format('* <strong class="error">%s.</strong>', a)
        table.insert(infos, info)
      end
      if f610:sub(2, 2) ~= "4" then
        a = 'Nossa política de catalogação define que o segundo indicador do campo 610 deve ser sempre "4"'
        info = string.format('* <strong class="error">%s.</strong>', a)
        table.insert(infos, info)
      end
    end
    local f611 =
        mw.text.trim(frame:expandTemplate { title = "Field data string", args = { "611", "0", "0", fullpagename = target } }) or
        ""
    if f611 ~= "" then
      if f611:sub(1, 1) == "#" then
        a = "Está faltando o primeiro indicador do campo 611"
        info = string.format('* <strong class="error">%s.</strong>', a)
        table.insert(infos, info)
      end
      if f611:sub(2, 2) ~= "4" then
        a = 'Nossa política de catalogação define que o segundo indicador do campo 611 deve ser sempre "4"'
        info = string.format('* <strong class="error">%s.</strong>', a)
        table.insert(infos, info)
      end
    end
    local f630 =
        mw.text.trim(frame:expandTemplate { title = "Field data string", args = { "630", "0", "0", fullpagename = target } }) or
        ""
    if f630 ~= "" then
      if f630:sub(1, 1) == "#" then
        a = "Está faltando o primeiro indicador do campo 630"
        info = string.format('* <strong class="error">%s.</strong>', a)
        table.insert(infos, info)
      end
      if f630:sub(2, 2) ~= "4" then
        a = 'Nossa política de catalogação define que o segundo indicador do campo 630 deve ser sempre "4"'
        info = string.format('* <strong class="error">%s.</strong>', a)
        table.insert(infos, info)
      end
    end
    local f650 =
        mw.text.trim(frame:expandTemplate { title = "Field data string", args = { "650", "0", "0", fullpagename = target } }) or
        ""
    if f650 ~= "" then
      if f650:sub(1, 1) ~= "0" then
        a = 'Nossa política de catalogação define que o primeiro indicador do campo 650 deve ser sempre "0"'
        info = string.format('* <strong class="error">%s.</strong>', a)
        table.insert(infos, info)
      end
      if f650:sub(2, 2) ~= "4" then
        a = 'Nossa política de catalogação define que o segundo indicador do campo 650 deve ser sempre "4"'
        info = string.format('* <strong class="error">%s.</strong>', a)
        table.insert(infos, info)
      end
      -- Testa se os assuntos começam com letra minúscula
      if string.match(f650, "%$[axzy]%s[a-z]") then
        a = "Os assuntos principais e suas subdivisões devem começar com letra maiúscula"
        info = string.format('* <strong class="error">%s.</strong>', a)
        table.insert(infos, info)
      end
      -- Testa se um subcampo termina em "-"
      if string.match(f650, "%-%s?%$") then
        a = "Nunca inclua hifens entre termos de assuntos"
        info = string.format('* <strong class="error">%s.</strong>', a)
        table.insert(infos, info)
      end
    end
    local f651 =
        mw.text.trim(frame:expandTemplate { title = "Field data string", args = { "651", "0", "0", fullpagename = target } }) or
        ""
    if f651 ~= "" then
      if f651:sub(1, 1) ~= "#" then
        a = 'Nossa política de catalogação define que o primeiro indicador do campo 651 deve ser sempre "#"'
        info = string.format('* <strong class="error">%s.</strong>', a)
        table.insert(infos, info)
      end
      if f651:sub(2, 2) ~= "4" then
        a = 'Nossa política de catalogação define que o segundo indicador do campo 651 deve ser sempre "4"'
        info = string.format('* <strong class="error">%s.</strong>', a)
        table.insert(infos, info)
      end
    end
    -- Testa os pontos de acesso secundários, tal como os principais
    local f700 =
        mw.text.trim(frame:expandTemplate { title = "Field data string", args = { "700", "0", "0", fullpagename = target } }) or
        ""
    if f700 ~= "" then
      info = "Um ponto de acesso secundário foi dado a uma <b>pessoa</b>"
      if f700:sub(1, 1) == "0" then
        a = 'e a entrada começa pelo seu <strong class="error">primeiro nome</strong>'
        info = string.format("* %s %s.", info, a)
        table.insert(infos, info)
      elseif f700: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 f700: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 f700: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 f700:sub(2, 2) ~= "#" then
        a = "O segundo indicador do campo 700 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 mais de um subcampo $a no mesmo campo 700
      local exist700 = frame:expandTemplate { title = "Exist", args = { "700", target } } or false
      if exist700 == "yes" then
        if string.match(f700, "%$a.*%$a.-$") then
          a = "Há mais de um subcampo $a no campo 700. O subcampo $a não é repetível"
          info = string.format('* <strong class="error">%s.</strong>', a)
          table.insert(infos, info)
        end
        -- testa se existe "," no subcampo $a (Nome, Sobrenome)
        local f700a = frame:expandTemplate { title = "Select", args = { "700", "a", target } } or ""
        if f700a ~= "" then
          if not string.match(f700a, ".-,.") then
            a = "Em pontos de acesso, o nome pessoal deve ser invertido (Nome, Sobrenome). Verifique o campo 700"
            info = string.format('* <strong class="error">%s.</strong>', a)
            table.insert(infos, info)
          end
          if string.match(f700a, "[a-zÀ-ü],[A-ZÀ-ü]") then
            a = "Falta espaço após a vírgula. Verifique o campo 700"
            info = string.format('* <strong class="error">%s.</strong>', a)
            table.insert(infos, info)
          end
          if string.match(f700a, "%d%d%d%d") then
            a = "No campo 700, o ano deve ser informado no subcampo $d"
            info = string.format('* <strong class="error">%s.</strong>', a)
            table.insert(infos, info)
          end
        end
        local f700q = frame:expandTemplate { title = "Select", args = { "700", "q", target } } or ""
        if f700q ~= "" then
          if not string.match(f700q, "^%(") then
            a = "O subcampo $q do campo 700 necessita parênteses"
            info = string.format('* <strong class="error">%s.</strong>', a)
            table.insert(infos, info)
          end
        end
        local f700e = frame:expandTemplate { title = "Select", args = { "700", "e", target } } or ""
        if f700e ~= "" then
          if string.match(f700, "[a-zA-ZÀ-ü0-9%]-]%s?%$e") then
            a = "O subcampo $e do campo 700 deve ser precedido por uma vírgula"
            info = string.format('* <strong class="error">%s.</strong>', a)
            table.insert(infos, info)
          end
        end
      end
    end
    local f710 =
        mw.text.trim(frame:expandTemplate { title = "Field data string", args = { "710", "0", "0", fullpagename = target } }) or
        ""
    if f710 ~= "" then
      info = "Um ponto de acesso secundário foi dado a uma <b>entidade coletiva</b>"
      if f710: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 f710: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 f710: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 f710: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 f710:sub(2, 2) ~= "#" then
        a = "O segundo indicador do campo 710 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 f711 =
        mw.text.trim(frame:expandTemplate { title = "Field data string", args = { "711", "0", "0", fullpagename = target } }) or
        ""
    if f711 ~= "" then
      info = "Um ponto de acesso secundário foi dado a um <b>evento</b>"
      if f711: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 f711: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 f711: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 f711: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 f711:sub(2, 2) ~= "#" then
        a = "O segundo indicador do campo 711 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 f740 =
        mw.text.trim(frame:expandTemplate { title = "Field data string", args = { "740", "0", "0", fullpagename = target } }) or
        ""
    if f740 ~= "" then
      if f740:sub(1, 1) == "#" then
        a = "O primeiro indicador do campo 740 precisa ser preenchido"
        info = string.format('* <strong class="error">%s.</strong>', a)
        table.insert(infos, info)
      end
    end
    -- Testa os indicadores do campo 830
    local f830 =
        mw.text.trim(frame:expandTemplate { title = "Field data string", args = { "830", "0", "0", fullpagename = target } }) or
        ""
    if f830 ~= "" then
      if f830:sub(1, 1) ~= "#" then
        a = "O primeiro indicador do campo 830 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 f830:sub(2, 2) == "#" then
        a = "O segundo indicador do campo 830 precisa ser preenchido"
        info = string.format('* <strong class="error">%s.</strong>', a)
        table.insert(infos, info)
      end
      local f830v = frame:expandTemplate { title = "Select", args = { "830", "v", target } } or ""
      if f830v ~= "" then
        if not string.match(f830, ";%s?%$v") then
          a = "É necessária a pontuação que precede a numeração da série (830, $v)"
          info = string.format('* <strong class="error">%s.</strong>', a)
          table.insert(infos, info)
        end
      end
      if f490 == "" then
        a = "Foi informado um ponto de acesso secundário para a série (campo 830), porém, um campo 490 não foi detectado"
        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
      local f856a = frame:expandTemplate { title = "Select", args = { "856", "a", target } } or ""
      if f856a ~= "" 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
  end -- end if 245

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

return p