Módulo:Ficha de localidad

De Enciclopedia de conocimiento de la Iglesia de Dios
Ir a la navegación Ir a la búsqueda

Este módulo pretende implementar Plantilla:Tl, Plantilla:Tl y Plantilla:Tl a través de Lua.

Funciones

Usuario:Amitie 10g/Taller/Pruebas/Pruebas de Módulo:Ficha de localidad


local p = {}

local ModuloWikidata	= require('Módulo:Wikidata')
local ModuloFormatos	= require('Módulo:Wikidata/Formatos')
local ModuloPaginas		= require('Módulo:Páginas')
local ModuloArgs   		= require('Módulo:Argumentos')
local infobox			= require('Módulo:Ficha').infobox
local elementoTabla		= require('Módulo:Tablas').elemento
local obtenerIdioma		= require('Módulo:Obtener idioma').obtenerIdioma
local enlazar			= require('Módulo:Formato_texto').enlazar2
local argumentos		= ModuloArgs.obtenerValorDeArgumentos
local formatoNumero		= ModuloFormatos.formatoNumero2
local numeroUnidad		= ModuloFormatos.formatoUnidad2

-- :: Estilos por defecto
local Clase				= 'geography vcard'
local ColorTitulo		= ''--#cddeff'
local ColorTituloTexto	= '#000'
local ColorEtiqueta		= ''--'#eef5f6'
local EstiloEtiqueta	= 'padding:1px 7px'--'width:40%'
local EstiloSubEtiqueta = 'font-weight:100;border-top:0; padding:0 .6em 0 15px'
local EstiloDatos		= 'padding:1px 7px 1px 1px'--'width:60%'
local TamanoImagen		= '250px'

local Datos = mw.loadData('Módulo:Ficha de localidad/Datos')

local categorias = ''

local function _init(frame)
	ModuloWikidata:setFrame(frame)
	ModuloArgs.obtenerTablaDeArgumentos(frame)
	Entidad			= mw.wikibase.getEntity(argumentos{'id'}) or mw.wikibase.getEntity(argumentos{'entidad'}) or {}
	InstanciaDe		= propiedad('P31', {['formato'] = 'entidadID'})
	SubclaseDe		= propiedad('P279', {['formato'] = 'entidadID'})
	
	-- :: Estilos
	EstiloTitulo			= 'padding:0;' .. (ColorTitulo~='' and ('background-color:' .. ColorTitulo) or '')
	EstiloSeccion			= (ColorTitulo~='' and ('background-color:' .. ColorTitulo) or '')
	EstiloEtiqueta			= EstiloEtiqueta .. ';' .. (ColorEtiqueta~='' and ('background-color:' .. ColorEtiqueta) or '')

	-- :: Datos generales
	NombreOficial	= elementoTabla(Entidad, 'claims', 'P1448', {['idioma'] = 'es'}) or ModuloWikidata.obtenerEtiquetaWikidata(Entidad) or ModuloPaginas.nombrePagina({desambiguar='sí'})
	NombreOriginal	= argumentos{'nombre original'}
	NombreNativo	= (function ()
		local NombreNativo  = {}
		local NombreNativoObj = elementoTabla(Entidad, 'claims', 'P1705')
		if NombreNativoObj then
			for k, v in pairs(NombreNativoObj) do
				local valor, idioma
				if elementoTabla(v, 'mainsnak', 'datavalue', 'value', 'language') == 'es' then return false end
				valor = elementoTabla(v, 'mainsnak', 'datavalue', 'value', 'text')
				idioma= elementoTabla(v, 'mainsnak', 'datavalue', 'value', 'language')
				table.insert(NombreNativo, valor .. ' (' .. obtenerIdioma(frame, idioma) .. ')')
				if k > 3 then break end -- listar hasta tres nombres, luego terminar el bucle.
			end
			return table.concat(NombreNativo, '<br>')
		end
	end)()
	
	Titulo = (function ()
		if NombreOriginal then return NombreOficial .. '<div style="font-size:85%;font-style:italic">' .. NombreOriginal .. '</div>' end
		if NombreNativo then return NombreOficial .. '<div style="font-size:85%;font-style:italic">' .. NombreNativo .. '</div>' end
		return NombreOficial
	end)()

	local PaisesConSellos	= Datos['paises']
	EscudoEtiqueta	= PaisesConSellos[NombreOficial] or PaisesConSellos[Entidad] or 'Escudo'
	EscudoPropiedad	= (function() 
		if EscudoEtiqueta == 'Emblema nacional' then return 'P2238' end
		if EscudoEtiqueta == 'Sello' or EscudoEtiqueta == 'Gran Sello' then return 'P158' end
		return 'P94'
	end)()
	
	Bandera			= argumentos{'imagen_bandera', 'bandera', {propiedad, 'P41', {['formato'] = 'archivo'}}}
	TamanoBandera	= argumentos{'bandera_tamaño'} or '135x110px'
	PieBandera		= argumentos{'artículo bandera', {enlazar, propiedad('P163', {['uno'] = 'sí', ['enlace'] = 'no'}), 'Bandera'}, {enlazar, 'Bandera' .. (argumentos{'de'} or ' de ') .. ModuloPaginas.nombrePagina({desambiguar='sí'}), 'Bandera'}}

	Escudo			= argumentos{'imagen_escudo', 'escudo', {ModuloWikidata.obtenerImagenWikidata, Entidad, EscudoPropiedad}}
	TamanoEscudo	= argumentos{'escudo_tamaño'} or '110x105px'
	PieEscudo		= argumentos{'artículo escudo', {enlazar, propiedad('P237', {['uno'] = 'sí', ['enlace'] = 'no'}), EscudoEtiqueta}, {enlazar, EscudoEtiqueta .. (argumentos{'de'} or ' de ') .. ModuloPaginas.nombrePagina({desambiguar='sí'}), EscudoEtiqueta}}

	-- :: Datos generales
	LemaNacional	= argumentos{'lema_nacional', {propiedad, 'P1546', {['linkback'] = 'no'}}}
	if LemaNacional then LemaNacional = '[[Anexo:Lemas nacionales|Lema]]: <span style="font-style:italic">' .. LemaNacional .. '</span>' end
	HimnoNacional	= (function()
		local Himno = argumentos{'himno_nacional', {propiedad, 'P85', {['linkback'] = 'no'}}}
		if Himno then
			local Archivo = enlazar(argumentos{'archivo_himno_nacional', {propiedad, 'P85', {['calificador'] = 'P51', ['formato'] = 'archivo'}}}, {['namespace'] = 6})
			if Archivo then return '<div>[[Himno nacional|Himno]]: <span style="font-style:italic">' ..Himno .. '</span></div><div>' .. Archivo .. "</div><div style=\"line-height:1.1em; text-align:center;\" class=\"problemas_sonido\"><small>''[[Ayuda:Multimedia|¿Problemas al reproducir este archivo?]]''</small></div>" end
			return '[[Himno nacional|Himno]]: <span style="font-style:italic">' .. Himno .. '</span></div>'
		end
	end)()
	
	-- :: Datos políticos
	DatosPoliticos	= obtenerLideres()
	Lideres = (function()
		local Lideres	= DatosPoliticos['líderes']
		local Etiquetas	= DatosPoliticos['etiquetas']

		return (function()
			local Valores = {['tipo'] = 'sección', ['estiloetiqueta'] = EstiloEtiqueta ..';'..EstiloSubEtiqueta, ['estilodatos'] = EstiloDatos .. ';border-top:0;padding:0 .6em'}
			for k,v in pairs(Lideres) do
				if not v then break end
				table.insert(Valores, {Etiquetas[k], v[1]})
			end
			return Valores
		end)()
	end)()

	SedeGobierno	= argumentos{'sede_gobierno', 'sedes_gobierno'} -- Proponer propiedad

	Idiomas			= (function()
		local IdiomaOficial			= (function()
			local IdiomaOficialArgs		= argumentos{'idioma', 'idioma_oficial', 'idioma_principal'}
			local IdiomasOficialesArgs	= argumentos{'idiomas', 'idiomas_oficiales'}
			local IdiomasOficialesWd	= propiedad('P37')
			
			if (IdiomaOficialArgs~=nil and IdiomaOficialArgs~='') then
				return {'Idioma oficial', IdiomaOficialArgs}
			elseif (IdiomasOficialesArgs~=nil and IdiomasOficialesArgs~='') then
				return {'Idiomas&nbsp;oficiales', IdiomasOficialesArgs}
			elseif (IdiomasOficialesWd~=nil and IdiomasOficialesWd~='') then
				if(IdiomasOficialesWd:find(',') or IdiomasOficialesWd:find(' y ')) then
					return {'Idiomas oficiales', IdiomasOficialesWd}
				else
					return {'Idioma oficial', IdiomasOficialesWd}
				end
			end
			return ''
		end)()
		
		local IdiomaCooficial			= (function()
			local IdiomaCooficialArgs		= argumentos{'idioma_co-oficial', 'idioma co-oficial'}
			local IdiomasCooficialesArgs	= argumentos{'idiomas_co-oficiales', 'idiomas co-oficiales', 'idiomas_cooficiales'}
		
			-- Para wikidata filtro negativo de calificador (que o tenga P518)
			
			if (IdiomaCooficialArgs~=nil and IdiomaCooficialArgs~='') then
				return {'Cooficial', IdiomaCooficialArgs}
			elseif (IdiomasCooficialesArgs~=nil and IdiomasCooficialesArgs~='') then
				return {'Cooficiales', IdiomasCooficialesArgs}
			end
			return ''
		end)()
		
		local IdiomasHablados			= (function()
			local data = argumentos{'idiomas_hablados', 'idioma_no_oficial', 'idiomas'}--, {propiedad, 'P2936'}} --Por ahora no importar ochocientosmil de wikidata, estudiar como se puede limitar la lista.
		
			if (data~=nil and data:len()>50) then
				return listaDesplegable(frame, 'Idiomas hablados', data, true)
			else
				return {'Idiomas hablados', data}
			end
			return ''
		end)()
		
		
		return	
			{tipo='sección',
				IdiomaOficial,
				{
					tipo			='sección', 
					estiloetiqueta	= EstiloEtiqueta ..';'..EstiloSubEtiqueta,
					estilodatos		= EstiloDatos .. ';border-top:0;padding:0 .6em',
					IdiomaCooficial,
					IdiomasHablados,
				},
			}
	end)()

	Gentilicio		= argumentos{'gentilicio', {propiedad, 'P1549', {['idioma'] = 'es'}}}

	Religion		= argumentos{'religión', {propiedad, 'P140'}}
	
	-- :: Datos geográficos
	Latitud			= round(argumentos{'latitud', {propiedad, 'P625', {['formato'] = 'latitud'}}}, 2)
	Longitud		= round(argumentos{'longitud', {propiedad, 'P625', {['formato'] = 'longitud'}}}, 2)
	
	Superficie			= function(enlacePrincipal, enlacePuesto)
		
		local SuperficieTotal	= (function()
			local Superficie	= argumentos{'superficie'}
			if Superficie then
				Superficie	= formatoNumero(Superficie) .. ' [[kilómetro cuadrado|km²]]'
			else
				Superficie	= propiedad('P2046', {['formato'] = 'unidad', ['separador'] = ' '})
			end
			
			local wdDetail = propiedad('P2046', {['tipo de dato']='área', ['linkback']='sí', ['calificativo']='P518', ['filtroCalificador']='P518;Q16868672'})
			
			
			if (wdDetail~=nil and wdDetail~='') then
				return wdDetail
			end
			
			return Superficie
			
		end)()
		
		local SuperficieTierra	= (function()
			local wd = propiedad('P2046', {['tipo de dato']='área', ['linkback']='sí', ['calificativo']='P518', ['filtroCalificador']='P518;Q205895,Q23442'})
			local param = argumentos{'superficie_tierra'}
			
			if (param~=nil and param:find('%%')) then
			
				if (wd~=nil and wd~='') then
					return '('..param..') '..wd
				else
					return param..' del total'
				end
				
			elseif (param~=nil and not param:find('%%')) then
				return param
			end
			return ''
		end)()

		local SuperficieAgua	= (function()
			local wdData = propiedad('P2046', {['tipo de dato']='área', ['linkback']='sí', ['calificativo']='P518', ['filtroCalificador']='P518;Q23397,Q4022,Q373315,Q102192'})
			local wdPercent = propiedad('P2927', {['formato'] = 'unidad', ['separador'] = ''})
			local param = argumentos{'superficie_agua'}
			
			if (param~=nil and param~='') then
				if (wdData~=nil and wdData~='') then
					return '('..param:gsub('%%', '')..'%) '..wdData
				else
					return param:gsub('%%', '')..'% del total'
				end
			else
				if (wdData~=nil and wdData~='') and (wdPercent~=nil and wdPercent~='') then
					return '('..wdPercent:gsub('%%', '')..'%) '..wdData
				elseif (wdData~=nil and wdData~='') and not (wdPercent~=nil and wdPercent~='') then
					return wdData
				elseif not (wdData~=nil and wdData~='') and (wdPercent~=nil and wdPercent~='') then
					return '('..wdPercent:gsub('%%', '')..'%) del total'
				end
			end
			return ''
		end)()
		
		

		local SuperficiePuesto= argumentos{'superficie_puesto'}
		if SuperficiePuesto then
			SuperficiePuesto = (enlacePuesto~=nil and enlazar(enlacePuesto, 'Puesto '..SuperficiePuesto .. 'º') or 'Puesto '..SuperficiePuesto .. 'º')
			return	{
						tipo='sección',
						{(enlacePrincipal~=nil and enlazar(enlacePrincipal, 'Superficie') or 'Superficie'), SuperficiePuesto},
						{
							tipo ='sección',
							estiloetiqueta	= EstiloEtiqueta ..';'..EstiloSubEtiqueta,
							estilodatos		= EstiloDatos .. ';border-top:0;padding:0 .6em',
							{'Total', SuperficieTotal},
							{'Tierra', SuperficieTierra},
							{'Agua', SuperficieAgua},
						},
				}
		else
			return	{
						tipo='sección',
						{(enlacePrincipal~=nil and enlazar(enlacePrincipal, 'Superficie') or 'Superficie') .. ' total', SuperficieTotal},
						{
							tipo ='sección',
							estiloetiqueta	= EstiloEtiqueta ..';'..EstiloSubEtiqueta,
							estilodatos		= EstiloDatos .. ';border-top:0;padding:0 .6em',
							{'Tierra', SuperficieTierra},
							{'Agua', SuperficieAgua},
						}
					}
		end
	end
	
	Fronteras		= argumentos{'fronteras'}
	if Fronteras then
		Fronteras	= formatoNumero(Fronteras)
	end

	LineaDeCosta			= formatoNumero(argumentos{'costas'})

	PuntoMasAlto			= argumentos{'punto_más_alto', {propiedad, 'P610'}}
	PuntoMasBajo			= argumentos{'punto_más_bajo', {propiedad, 'P1589'}}
	PuntoMasOriental		= argumentos{'punto_más_oriental', {propiedad, 'P1334'}}
	PuntoMasOccidental		= argumentos{'punto_más_occidental', {propiedad, 'P1335'}}
	PuntoMasSeptentrional	= argumentos{'punto_más_septentrional', {propiedad, 'P1332'}}
	PuntoMasMeridional		= argumentos{'punto_más_meridional', {propiedad, 'P1333'}}
	
	Historia = (function(frame)
		--local Historia = {tipo = 'sección', titulo = 'Historia'}
		local Historia = {tipo = 'sección'}

		-- Fundación
		local FundacionFechas	= argumentos{'fundación_fechas'}
		local FundacionEtiqueta	= argumentos{'fundación'}
		local HistoriaEtiqueta		= argumentos{'fundación_hitos'}
		if FundacionEtiqueta and HitosEtiqueta then HitosEtiqueta = FundacionEtiqueta .. "\n" .. HitosEtiqueta end
		table.insert(Historia, {HistoriaEtiqueta, FundacionFechas})

		-- Periodo histórico
		local PeriodoHistorico	= argumentos{'era', {propiedad, 'P2348'}}
		table.insert(Historia, {'Período histórico', PeriodoHistorico})
		
		-- Hitos
		local Hitos = {tipo ='sección', estiloetiqueta	= EstiloEtiqueta ..';border-top:0; padding:.6em .6em 0 15px; font-size:85%; line-height:1.25em', estilodatos = EstiloDatos .. ';border-top:0;padding:.6em .6em 0 .6em'}
		
		-- Evento anterior
		if argumentos{'evento_anterior1'} and argumentos{'fecha_evento_anterior1'} then
			table.insert(Hitos, {argumentos{'evento_anterior1'}, (function()
				if argumentos{'año_evento_anterior1'} then return argumentos{'fecha_evento_anterior1'} .. ' de ' .. argumentos{'año_evento_anterior1'} end
				return argumentos{'fecha_evento_anterior1'}
			end)()})
		end
		
		-- Fecha inicio
		if argumentos{'evento_inicio'} and argumentos{'fecha_inicio'} then
			table.insert(Hitos, {(argumentos{'evento_inicio'} or 'Establecido'), (function()
				if argumentos{'año_inicio'} then return argumentos{'fecha_inicio'} .. ' de ' .. argumentos{'año_inicio'} end
				return argumentos{'fecha_inicio'}
			end)()})
		end
		
		-- Eventos intermedios
		for i = 1, 20, 1 do
			if not argumentos{'evento' .. i} then break end
			table.insert(Hitos, {(argumentos{'evento' .. i}), (function()
				if argumentos{'año_evento' .. i} then return argumentos{'fecha_ievento' .. i} .. ' de ' .. argumentos{'año_evento' .. i} end
				return argumentos{'fecha_evento' .. i}
			end)()})
		end
		
		-- Fecha fin
		if argumentos{'evento_fin'} and argumentos{'fecha_fin'} then
			table.insert(Hitos, {(argumentos{'evento_fin'} or 'Disolución'), (function()
				if argumentos{'año_fin'} then return argumentos{'fecha_fin'} .. ' de ' .. argumentos{'año_fin'} end
				return argumentos{'fecha_fin'}
			end)()})
		end
		
		-- Evento posterior
		if argumentos{'evento_posterior1'} and argumentos{'fecha_evento_posterior1'} then
			table.insert(Hitos, {argumentos{'evento_posterior1'}, (function()
				if argumentos{'año_evento_posterior1'} then return argumentos{'fecha_evento_posterior1'} .. ' de ' .. argumentos{'año_evento_posterior1'} end
				return argumentos{'fecha_evento_posterior1'}
			end)()})
		end

		table.insert(Historia, Hitos)

		-- Actualidad
		table.insert(Historia, {'Hoy parte de', argumentos{'hoy', {propiedad, 'P3842'}}})

		return Historia
	end)()
	
	Poblacion			= function(enlacePrincipal, enlaceDensidad)
		
		local PoblacionCenso	= (function()
			local Valor = argumentos{'población', {propiedad, 'P1082', {['filtroCalificador'] = 'P459;Q39825', ['uno'] = 'último', ['ordenar'] = 'por fecha'}}}  -- P459=método | Q39825=censo
			local Anio = argumentos{'población_año', {propiedad, 'P1082', {['filtroCalificador'] = 'P459;Q39825', ['uno'] = 'último', ['ordenar'] = 'por fecha', ['formatoFecha'] = 'año', ['calificador'] = 'P585', ['enlace'] = 'no', ['calificativo'] = ''}}}  -- P585=punto en el tiempo   EL CALIFICATIVO VACÍO ES PORQUE SI NO SE IGNORA EL CALIFICADOR (ni idea de por qué)
			local Notas = argumentos{'población_notas'}
			
			if Valor then
				if Anio then
					return {'Censo&nbsp;'..small('('..Anio..')'), formatoNumero(Valor) .. '&nbsp;hab.' .. (Notas~=nil and Notas or '')}
				else
					return {'Censo', formatoNumero(Valor) .. '&nbsp;hab.' .. (Notas~=nil and Notas or '')}
				end
			end
			return ''
		end)()
		
		local PoblacionCensoValor = argumentos{'población', {propiedad, 'P1082', {['filtroCalificador'] = 'P459;Q39825', ['uno'] = 'último', ['ordenar'] = 'por fecha'}}, {propiedad, 'P1082', {['uno'] = 'último', ['ordenar'] = 'por fecha'}}}
		local PoblacionCensoAnio = argumentos{'población_año', {propiedad, 'P1082', {['filtroCalificador'] = 'P459;Q39825', ['uno'] = 'último', ['ordenar'] = 'por fecha', ['formatoFecha'] = 'año', ['calificador'] = 'P585', ['enlace'] = 'no', ['calificativo'] = ''}}}
		local PoblacionCensoResumen = formatoNumero(PoblacionCensoValor~=nil and PoblacionCensoValor or '')..'&nbsp;hab.'..(PoblacionCensoAnio~=nil and '&nbsp;('..PoblacionCensoAnio..')' or '')
		
		local PoblacionEstimada	= (function()
			local Valor = argumentos{'población_estimación', {propiedad, 'P1082', {['filtroCalificador'] = 'P459;Q791801,Q29051383', ['uno'] = 'último', ['ordenar'] = 'por fecha'}}}  -- P459=método | Q791801,Q29051383=estimación
			local Anio = argumentos{'población_estimación_año', {propiedad, 'P1082', {['filtroCalificador'] = 'P459;Q791801,Q29051383', ['uno'] = 'último', ['ordenar'] = 'por fecha', ['formatoFecha'] = 'año', ['calificador'] = 'P585', ['enlace'] = 'no', ['calificativo'] = ''}}}  -- P585=punto en el tiempo   EL CALIFICATIVO VACÍO ES PORQUE SI NO SE IGNORA EL CALIFICADOR (ni idea de por qué)
			local Notas = argumentos{'población_estimación_notas'}
			
			if Valor then
				if Anio then
					return {'Estimación&nbsp;'..small('('..Anio..')'), formatoNumero(Valor) .. '&nbsp;hab.' .. (Notas~=nil and Notas or '')}
				else
					return {'Estimación', formatoNumero(Valor) .. '&nbsp;hab.' .. (Notas~=nil and Notas or '')}
				end
			end
			return ''
		end)()
		
		local Superficie = argumentos{'superficie', {propiedad, 'P2046'}}
		
		local Densidad = (function()
			local Notas = argumentos{'densidad_post'}
			local AnioCenso = argumentos{'población_año', {propiedad, 'P1082', {['filtroCalificador'] = 'P459;Q39825', ['uno'] = 'último', ['ordenar'] = 'por fecha', ['formatoFecha'] = 'año', ['calificador'] = 'P585', ['enlace'] = 'no', ['calificativo'] = ''}}}
			local AnioEstimado = argumentos{'población_estimación_año', {propiedad, 'P1082', {['filtroCalificador'] = 'P459;Q791801,Q29051383', ['uno'] = 'último', ['ordenar'] = 'por fecha', ['formatoFecha'] = 'año', ['calificador'] = 'P585', ['enlace'] = 'no', ['calificativo'] = ''}}}
			local Valor = (function()
				local Poblacion = argumentos{'población', {propiedad, 'P1082', {['filtroCalificador'] = 'P459;Q39825', ['uno'] = 'último', ['ordenar'] = 'por fecha'}}}
				if argumentos{'población_densidad', 'densidad'} then return argumentos{'población_densidad', 'densidad'} end
				if tonumber(Poblacion) and tonumber(Superficie) then return (tonumber(Poblacion)/tonumber(Superficie)) else return nil end
			end)()
			local ValorEstimado = (function()
				local PoblacionEstimada = argumentos{'población_estimación', {propiedad, 'P1082', {['filtroCalificador'] = 'P459;Q791801', ['uno'] = 'último', ['ordenar'] = 'por fecha'}}}
				if tonumber(PoblacionEstimada) and tonumber(Superficie) then return (tonumber(PoblacionEstimada)/tonumber(Superficie)) else return nil end
			end)()
			
			if(tonumber(AnioCenso~=nil and AnioCenso or '0')>=tonumber(AnioEstimado~=nil and AnioEstimado or '0')) then
				if Valor then return {(enlaceDensidad~=nil and enlazar(enlaceDensidad, 'Densidad') or 'Densidad'), formatoNumero(Valor, {['decimales'] = 2}) .. '&nbsp;hab./km²' .. (Notas~=nil and Notas or '')}
				elseif ValorEstimado then return {(enlaceDensidad~=nil and enlazar(enlaceDensidad, 'Densidad') or 'Densidad')..'&nbsp;'..small('(est.)'), formatoNumero(ValorEstimado, {['decimales'] = 2}) .. '&nbsp;hab./km²' .. (Notas~=nil and Notas or '')} end
			elseif ValorEstimado then return {(enlaceDensidad~=nil and enlazar(enlaceDensidad, 'Densidad') or 'Densidad')..'&nbsp;'..small('(est.)'), formatoNumero(ValorEstimado, {['decimales'] = 2}) .. '&nbsp;hab./km²' .. (Notas~=nil and Notas or '')} end
			return ''
		end)()
		
		
		mw.log('Censo:') mw.logObject(PoblacionCenso)
		mw.log('Estimada:') mw.logObject(PoblacionEstimada)
		mw.log('Densidad:') mw.logObject(Densidad)
		mw.log('------------------') 

		if argumentos{'población_puesto'} then
			return	{
				tipo = 'sección',
				{'Población', (enlacePrincipal~=nil and enlazar(enlacePrincipal, 'Puesto ' .. argumentos{'población_puesto'} .. 'º') or 'Puesto ' .. argumentos{'población_puesto'} .. 'º')},
				{
					tipo = 'sección',
					estiloetiqueta	= EstiloEtiqueta .. ';'..EstiloSubEtiqueta,
					estilodatos		= EstiloDatos .. ';border-top:0;padding:0 .6em',
					PoblacionCenso,
					PoblacionEstimada,
					Densidad,
				},
			}
		else
			return	{
				tipo = 'sección',
				{(enlacePrincipal~=nil and enlazar(enlacePrincipal, 'Población total') or 'Población total'), PoblacionCensoResumen},
				{
					tipo = 'sección',
					estiloetiqueta	= EstiloEtiqueta ..';'..EstiloSubEtiqueta,
					estilodatos		= EstiloDatos .. ';border-top:0;padding:0 .6em',
					PoblacionEstimada,
					Densidad,
				}
			}
		end
	end

	-- :: Datos socioeconómicos
	PIBPuesto		= function(enlace)
		local PIB = argumentos{'PIB_puesto'}
		if PIB then return (enlace~=nil and enlazar(enlace, 'Puesto ' .. PIB .. 'º') or 'Puesto ' .. PIB .. 'º') end
	end
	
	PIB				= argumentos{'PIB', {nada, ''}}
	PIBAnio			= argumentos{'PIB_año', {nada, ''}}--, {propiedad, 'P2131', {['uno'] = 'último', ['ordenar'] = 'por fecha', ['calificador'] = 'P585'}}}
	PIBPerCapita	= argumentos{'PIB_per_cápita', {nada, ''}}--, {propiedad, 'P2132', {['uno'] = 'último', ['ordenar'] = 'por fecha', ['calificador'] = 'P585'}}}

	PIBNominalPuesto= function(enlace)
		local Puesto = argumentos{'PIB_nominal_puesto'}
		if Puesto then return (enlace~=nil and enlazar(enlace, 'Puesto ' .. Puesto .. 'º') or 'Puesto ' .. Puesto .. 'º') end
	end

	PIBNominal			= argumentos{'PIB_nominal', {nada, ''}}
	PIBNominalAnio		= argumentos{'PIB_nominal_año', {nada, ''}}--, {propiedad, 'P2131', {['uno'] = 'último', ['ordenar'] = 'por fecha', ['calificador'] = 'P585'}}}
	PIBNominalPerCapita	= argumentos{'PIB_nominal_per_cápita', {nada, ''}}--, {propiedad, 'P2132', {['uno'] = 'último', ['ordenar'] = 'por fecha', ['calificador'] = 'P585'}}}

	IDH				= argumentos{'IDH'}
	IDHAnio			= argumentos{'IDH_año', 'IDH año'}
	IDHpuesto		= argumentos{'IDH_puesto', 'IDH puesto'}
	IDHcategoria	= argumentos{'IDH_categoría', 'IDH categoría'}
	
	IndiceDesarrollo = function(enlace)
		local IDH				= argumentos{'IDH'}
		local IDHAnio			= argumentos{'IDH_año', 'IDH año'}
		local IDHpuesto		    = argumentos{'IDH_puesto', 'IDH puesto'}
		local IDHcategoria   	= argumentos{'IDH_categoría', 'IDH categoría'}
		
		local etiqueta = '[[Índice de desarrollo humano|IDH]]' .. ((IDHAnio~=nil) and (' ('..IDHAnio .. ')') or '')
		
		local dato = ((IDH~=nil) and IDH or '') .. ((IDHpuesto~=nil) and (' ('..(enlace~=nil and enlazar(enlace, IDHpuesto..'.º') or IDHpuesto..'.º')..')&nbsp;–&nbsp;' .. ((IDHcategoria~=nil) and IDHcategoria or '')) or '')
		
		return {etiqueta, dato}
	end
	
	Gini			= argumentos{'gini', {propiedad, 'P1125', {['uno'] = 'último', ['ordenar'] = 'por fecha', ['calificador'] = 'P585'}}}
	
	--Moneda
	Moneda			= argumentos{'moneda', {propiedad, 'P38'}}
	
	Patrono			= argumentos{'patrona', 'patrón', {propiedad, 'P417'}}

	-- Huso horario
	Huso			= seccionDesplegable(frame, '[[Huso horario]]', argumentos{'horario', {propiedad, 'P421', {['lista'] = 'nobullet'}}})
	HorarioVerano	= argumentos{'horario_verano'}
	
	CodigoISO		= (function()
		if argumentos{'código_ISO'} then return argumentos{'código_ISO'} end
		local CodigoISO = {}
		if propiedad('P297') then table.insert(CodigoISO, propiedad('P297')) end
		if propiedad('P298') then table.insert(CodigoISO, propiedad('P298')) end
		if propiedad('P299') then table.insert(CodigoISO, propiedad('P299')) end
		return table.concat(CodigoISO, '<br>')
	end)()
	
	CCTD			= code(argumentos{'cctld', {propiedad, 'P78'}})
	
	PrefijoTelef = (function()
		local data = argumentos{'código_telefónico', {propiedad, 'P474'}}
		if data~=nil then
			if data:find('+') then return data else return '+'..data end
		end
		return ''
	end)()
	PrefijoRadio	= small(code(argumentos{'prefijo_radiofónico'}))--, {propiedad, ''}}-- Solicitar propiedad
	PrefijoMatAero	= argumentos{'matrícula_avión', {propiedad, 'P2986'}}
	PrefijoMatAuto	= argumentos{'matrícula_coche', {propiedad, 'P395'}}
	COI				= argumentos{'código_COI', {propiedad, 'P984'}}
	
	MiembroDe		= listaDesplegable(frame, 'Membresía', argumentos{'miembro_de'}, true)--, {propiedad, 'P463'}}, true) Intentar generar la lista utilizando short names, si no es demasiado texto

	Notas			= (function()
		local Notas = {}
		for i = 1, 10, 1 do
			if argumentos{'nota' .. i} then table.insert(Notas, '<li id="ficha_nota-'.. i .. '">[[#ficha_ref-' .. i .. '|↑]]' .. argumentos{'nota' .. i} .. '</li>') end
		end
		if not argumentos{'notas'} == '' then table.insert(Notas, argumentos{'notas'}) end
		if #Notas > 0 then return '<ol class="references">' .. table.concat(Notas) .. '</ol>' end
	end)()
	
	SitioWeb = (function()
		local enlace	= argumentos{'sitio_web', 'sitio web', 'página web', 'página_web', 'web', {propiedad, 'P856', {['enlace']='no', uno='sí'}}}
		local texto		= 'Sitio web oficial'
		return require('Módulo:URL').enlazar(enlace, texto)
	end)() or ''
end

function p.FichaPais(frame)
	_init(frame)
	
	local ClaseTitulo	= 'adr'

	-- Subtítulo: Miembro de (discutir este parámetro)
	local Subtitulo			= (function()
		local Unidad		= argumentos{'unidad', {propiedad, 'P31', {['uno'] = 'último', ['ordenar'] = 'por fecha'}}}
		local Supraunidad	= argumentos{'supraunidad'}
		local Disputado		= argumentos{'disputado'}
		
		if Unidad and Supraunidad then
			return Unidad .. ' de ' .. Supraunidad
		elseif not Disputado == nil then
			return '[[Estado con reconocimiento limitado|Soberanía discutida]]'
		end
		
		return ''--Unidad  --No retornar, evita el título de 'Estado soberano', discutir inclusión en un futuro
	end)()
	
	local Mapa			= (function()
		local ImagenMapa		= enlazar(argumentos{'imagen_mapa', 'mapa', {propiedad, 'P242', {['formato'] = 'archivo', ['uno'] = 'sí'}}}, {['tamaño'] = '250px', ['namespace'] = 6})
		local PieMapa	= argumentos{'pie_mapa'}
		if ImagenMapa then
			return ImagenMapa .. small(PieMapa~=nil and PieMapa or '')
		end
	end)()

	local Capital = (function()
		local Capital				= argumentos{'capital', {propiedad, 'P36', ['uno'] = 'último', ['ordenar'] = 'por fecha'}}
		local CiudadMasPoblada		= argumentos{'ciudad_más_poblada'}
		local AglomeradoMasPoblado	= argumentos{'aglomerado_más_poblado'}
		
		if Capital == CiudadMasPoblada then return {
			tipo = 'sección',
			{'[[Capital (política)|Capital]] <small>(y ' .. enlazar('Demografía de ' .. ModuloPaginas.nombrePagina({desambiguar='sí'}), 'ciudad más poblada') .. ')</small>', Capital}
		} end

		if Capital == AglomeradoMasPoblado then return {
			tipo = 'sección',
			{'[[Capital (política)|Capital]] <small>(y ' .. enlazar('Demografía de ' .. ModuloPaginas.nombrePagina({desambiguar='sí'}), 'aglomerado urbano más poblado') .. ')</small>', Capital}
		} end
	
		return {
			tipo = 'sección',
			{'[[Capital (política)|Capital]]', Capital},
			{enlazar('Demografía de ' .. ModuloPaginas.nombrePagina({desambiguar='sí'}), 'Ciudad más poblada'), CiudadMasPoblada},
			{enlazar('Demografía de ' .. ModuloPaginas.nombrePagina({desambiguar='sí'}), 'Aglomerado urbano más poblado'), AglomeradoMasPoblado},
		}
	end)()
	
	
	local Historia = (function(frame)
		-- Fundación
		local FundacionEtiqueta	= argumentos{'fundación'}
		local FundacionFechas	= argumentos{'fundación_fechas'}
		local FundacionHitos	= argumentos{'fundación_hitos'}
		
		local Etiqueta = (FundacionEtiqueta~=nil and FundacionEtiqueta or ('[[Historia '..frame:preprocess('{{de país|{{Título sin coletilla}}}}')..'|Fundación]]')) .. (FundacionHitos~=nil and '<br />'..FundacionHitos or '')
		
		return {Etiqueta, FundacionFechas}
	end)(frame)
	
	local Lideres = (function()
		local DatosPoliticos = (function() 
			local Datos			= {}
			Datos['líderes']	= {}
			Datos['etiquetas']	= {}
			
			for i = 1, 20, 1 do
				if argumentos{'nombre_líder' .. i} == '' or not argumentos{'nombre_líder' .. i} then break end
				table.insert(Datos['líderes'], argumentos{'nombre_líder' .. i})
				table.insert(Datos['etiquetas'], argumentos{'título_líder' .. i})
			end
			return Datos
		end)()
		
		local Lideres	= DatosPoliticos['líderes']
		local Etiquetas	= DatosPoliticos['etiquetas']

		return (function()
			local Valores = {['tipo'] = 'sección', ['estiloetiqueta'] = EstiloEtiqueta ..';'..EstiloSubEtiqueta, ['estilodatos'] = EstiloDatos .. ';border-top:0;padding:0 .6em'}
			for k,v in pairs(Lideres) do
				if not v then break end
				table.insert(Valores, {Etiquetas[k], v})
			end
			return Valores
		end)()
		
	end)()

	--Categorizar cuando la superficie o la población no son números
	if(argumentos{'superficie'}~=nil and argumentos{'población'}~=nil) then
		if(tonumber(argumentos{'superficie'})==nil or tonumber(argumentos{'población'})==nil) then
			categorizar('Wikipedia:Artículos de países que requieren mantenimiento')
		end
	end


	-- :: La ficha
	local TablaFicha = {
		titulo  			= Titulo,
		subtitulo			= Subtitulo,
		clase				= Clase,
		clasetitulo			= ClaseTitulo,
		estilotitulo		= EstiloTitulo,
		estilosubtitulo		= 'font-weight:bold; background-color:#cddeff',
		imagenizquierda		= Bandera,
		["tamañoimagenizquierda"]	= TamanoBandera,
		imagenderecha		= Escudo,
		["tamañoimagenderecha"]		= TamanoEscudo,
		pieizquierdo		= PieBandera,
		piederecho			= PieEscudo,
		estilopie			= "font-size:88%",
		estiloseccion		= EstiloSeccion,
		estiloetiqueta		= EstiloEtiqueta,
		estilodatos			= EstiloDatos,
		{tipo='sección',
			{'', LemaNacional, estilodatos='padding:.4em .6em;'},
		},
		{tipo='sección',
			{'', HimnoNacional, estilodatos='padding:.4em .6em;'},
		},
		{tipo='sección',
			--titulo  			= 'Ubicación',
			["tamañoimagen"]	= TamanoImagen,
			{'', Mapa, estilodatos='padding:.4em .6em;'},
		},
		{tipo='sección',
			--titulo  			= 'Información general',
			Capital,
			{'[[Sede de gobierno]]', SedeGobierno},
			Idiomas,
			{'Gentilicio', Gentilicio},
		},
		{tipo='sección',
			--titulo  = 'Información política',
			{'[[Forma de gobierno]]', FormaGobierno},
			Lideres,
			{'[[Órgano ejecutivo]]', OrganoEjecutivo},
			{'[[Órgano legislativo]]', OrganoLegislativo},
		},
		Historia, -- Esto formatea los hitos como la independencia
		{tipo='sección',
			--titulo  	= 'Información geográfica',
			Superficie('Superficie terrestre', 'Anexo:Países por superficie'),
			{'[[Frontera]]s', Fronteras},
			{'[[Línea de costa]]', LineaDeCosta},
			{'[[Anexo:Países por punto más alto|Punto más alto]]', PuntoMasAlto},
			--{'Punto más bajo', PuntoMasBajo},    --Comentados porque no existen en Ficha de país, se pueden añadir a futuro
			--{'Punto más oriental', PuntoMasOriental},
			--{'Punto más occidental', PuntoMasOccidental},
			--{'Punto más septentrional', PuntoMasSeptentrional},
			--{'Punto más meridional', PuntoMasMeridional},
		},
		{tipo='sección',
			--titulo  	= 'Información socioeconómica',
			Poblacion('Anexo:Países y territorios dependientes por población', 'Anexo:Países por densidad de población'),
			{'[[Producto interno bruto|PIB]] ([[Paridad de poder adquisitivo|PPA]])', PIBPuesto('Países por PIB (PPA)')},
			{tipo			='sección',
				estiloetiqueta	= EstiloEtiqueta ..';'..EstiloSubEtiqueta,
				estilodatos		= EstiloDatos .. ';border-top:0;padding:0 .6em',
				{'Total&nbsp;'..small('('..PIBAnio..')'), PIB},
				{'[[Renta per cápita|Per cápita]]', PIBPerCapita},
			},
			{'PIB (nominal)', PIBNominalPuesto('Anexo:Países por PIB (nominal)')},
			{tipo			='sección',
				estiloetiqueta	= EstiloEtiqueta ..';'..EstiloSubEtiqueta,
				estilodatos		= EstiloDatos .. ';border-top:0;padding:0 .6em',
				{'Total&nbsp;'..small('('..PIBNominalAnio..')'), PIBNominal},
				{'Per cápita', PIBNominalPerCapita},
			},
			IndiceDesarrollo('Anexo:Países por índice de desarrollo humano'),
			{'[[Coeficiente de Gini]]', Gini},
			{'[[Moneda (divisa)|Moneda]]', Moneda},
		},
		{tipo='sección',
			--titulo  			= 'Información internacional',
			Huso,
			{tipo			='sección',
				estiloetiqueta	= EstiloEtiqueta ..';'..EstiloSubEtiqueta,
				estilodatos		= EstiloDatos .. ';border-top:0;padding:0 .6em',
				{'En [[Horario de verano|verano]]', HorarioVerano},
			},
			{'[[ISO 3166-1|Código ISO]]', CodigoISO},
			{'[[Dominio de nivel superior geográfico#Lista de dominios de nivel superior geográfico|Dominio internet]]', CCTD},
			{'[[Anexo:Prefijos telefónicos internacionales|Prefijo telefónico]]', PrefijoTelef},
			{'[[Anexo:Prefijos radiofónicos|Prefijo radiofónico]]', PrefijoRadio},
			{'[[Matrícula (aeronaves)|Siglas país para aeronaves]]', PrefijoMatAero},
			{'[[Anexo:Siglas automovilísticas internacionales|Siglas país para automóviles]]', PrefijoMatAuto},
			{'[[Anexo:Códigos del COI para los países|Código del COI]]', },
		},
		{tipo='sección',
			estilodatos = 'padding:0',
			{'', SitioWeb},
		},
		{tipo='sección',
			estilodatos = 'padding:0',
			MiembroDe,
		},
		estilopiedetabla	= 'text-align:left',
		piedetabla			= Notas,
	}
	return infobox(TablaFicha)..categorias
end

function p.FichaEntidadSubnacional(frame)
	_init(frame)
	
	local ClaseTitulo	= 'mapa fn org'
	
	local Pais				= argumentos{'país', 'pais', {propiedad, 'P17', ['uno'] = 'último', ['ordenar'] = 'por fecha'}}
	local Capital			= argumentos{'capital', {propiedad, 'P36', ['uno'] = 'último', ['ordenar'] = 'por fecha'}}
	local CapitalEtiqueta	= argumentos{'capital_denominación'} or '[[Capital (política)|Capital]]'

	local Subtitulo			= (function()
		if argumentos{'unidad'} then return argumentos{'unidad'} end
		
		local Unidad
		local Supraunidad
		UnidadObj = elementoTabla(Entidad, 'claims', 'P31')
		if UnidadObj then
			for k,v in pairs(UnidadObj) do
				Unidad		= elementoTabla(v, 'mainsnak', 'datavalue', 'value', 'id')
				Supraunidad	= ModuloWikidata.obtenerEtiquetaWikidata(mw.wikibase.getEntity(elementoTabla(v, 'qualifiers', 'P642', 1, 'datavalue', 'value', 'id')))
				if Unidad == 'Q5119' and Supraunidad then
					return '[[Capital (política)|Capital]] de [[' .. Supraunidad .. ']]'
				end
			end
		end
		return '[[Entidad subnacional]]'
	end)()
	
	local ImagenPanorama	= argumentos{'img_panorama_urb', 'image_skyline', 'image_skyline', 'imagen', {propiedad, 'P18', {['formato'] = 'archivo'}}}
	local PieImagenPanorama	= argumentos{'image_caption', 'pie_img_panorama_urb', 'pie_de_imagen'}

	-- :: Datos cartográficos
	local Mapa1	= obtenerMapa(frame,
			{
				[1]					= ModuloPaginas.nombrePagina({desambiguar='sí'}),
				['zoom']			= (argumentos{'zoom'} or 10),
				['latitude']		= Latitud,
				['longitude']		= Longitud,
				['mapa_loc']		= argumentos{'mapa_loc', 'pushpin_map'},
				['mapa_etiq']		= (argumentos{'nombre', 'nombre_oficial'} or NombreOficial),
				['mapa_etiq_pos']	= argumentos{'pos_etiqueta_loc'},
				['mapa_marca']		= argumentos{'imagen_marca_loc'},
				['mapa_marca_tam']	= (argumentos{'tam_marca_loc'} or 5),
				['mapa_alt']		= argumentos{'mapa_alternativo'},
				['mapa_tamaño'] = (argumentos{'tam_mapa_loc', 'pushpin_mapsize'} or 250),
			}
		)
	local MapaPie1		= (function()
		local MapaLoc	= argumentos{'mapa_loc', 'pushpin_map'}
		local Etiqueta	= (argumentos{'nombre', 'nombre_oficial'} or NombreOficial)
		if MapaLoc and Etiqueta then return 'Localización de ' .. Etiqueta .. ' en ' .. MapaLoc end
	end)()

	local Mapa2			= obtenerMapa(frame,
			{
				[1]					= argumentos{'nombre_mapa_'},
				['zoom']			= (argumentos{'zoom'} or 10),
				['latitude']		= Latitud,
				['longitude']		= Longitud,
				['mapa_loc']		= argumentos{'mapa_loc1', 'pushpin_map1'},
				['mapa_etiq']		= (argumentos{'nombre', 'nombre_oficial'} or NombreOficial),
				['mapa_etiq_pos']	= argumentos{'pos_etiqueta_loc1'},
				['mapa_marca']		= argumentos{'imagen_marca_loc1'},
				['mapa_marca_tam']	= (argumentos{'tam_marca_loc1'} or 5),
				['mapa_alt']		= argumentos{'mapa_alternativo1'},
				['mapa_tamaño']		= (argumentos{'tam_mapa_loc1', 'pushpin_mapsize1'} or 250),
			}
		)
	local MapaPie2		= (function()
		local MapaLoc	= argumentos{'mapa_loc1', 'pushpin_map1'}
		local Etiqueta	= (argumentos{'nombre', 'nombre_oficial'} or NombreOficial)
		if MapaLoc and Etiqueta then return 'Localización de ' .. Etiqueta .. ' en ' .. MapaLoc end
	end)()

	local Mapa3 		= argumentos{'mapa', 'imagen_mapa', 'image_map', {propiedad, 'P242'}, {obtenerMapa, frame, {['latitud'] = Latitud, ['longitud'] = Longitud, ['tipo'] = 'interactivo'}}}
	local Mapa3Tamano	= argumentos{'tam_mapa_loc1', 'pushpin_mapsize1'} or 250
	local Mapa3Pie		= argumentos{'pie_mapa'}

	local Mapa4 		= argumentos{'mapa1', 'imagen_mapa1', 'image_map1'}
	local Mapa4Tamano	= argumentos{'tam_mapa_loc1', 'pushpin_mapsize1'} or 250
	local Mapa4Pie		= argumentos{'pie_mapa1'}

	-- :: La ficha
	local TablaFicha = {
		titulo  			= Titulo,
		subtitulo			= Subtitulo,
		clase				= Clase,
		clasetitulo			= ClaseTitulo,
		estilotitulo		= EstiloTitulo,
		estilosubtitulo		= 'font-weight:bold; background-color:#cddeff',
		imagensuperior		= ImagenPanorama,
		piesuperior			= PieImagenPanorama,
		imagenizquierda		= Bandera,
		["tamañoimagenizquierda"]	= TamanoBandera,
		imagenderecha		= Escudo,
		["tamañoimagenderecha"]		= TamanoEscudo,
		pieizquierdo		= PieBandera,
			piederecho			= PieEscudo,
			estilopie			= "font-size:88%",
			estiloseccion		= EstiloSeccion,
			estiloetiqueta		= EstiloEtiqueta,
			estilodatos			= EstiloDatos,
			datosup1			= Apodo,
			datosup2			= LemaNacional,
			datosup3			= HimnoNacional,
			imagenflotante1		= 'sí',
			imagenflotante2		= 'sí',
			imagen1				= Mapa1,
			pie1				= Mapa1Pie,
			imagen2				= Mapa2,
			pie2				= Mapa2Pie,
			imagen3				= Mapa3,
			pie3				= Mapa3Pie,
			imagen4				= Mapa4,
			pie4				= Mapa4Pie,
			{tipo='sección',
				--titulo  			= 'Información general',
				Capital,
				{'[[Sede de gobierno]]', SedeGobierno},
--				Idiomas,
				{'Gentilicio', Gentilicio},
			},
			{tipo='sección',
				--titulo  = 'Información política',
				{'[[Forma de gobierno]]', FormaGobierno},
				Lideres,
				{'[[Órgano ejecutivo]]', OrganoEjecutivo},
				{'[[Órgano legislativo]]', OrganoLegislativo},
			},
			Historia, -- Esto formatea los hitos como la independencia
			{tipo='sección',
				--titulo  	= 'Información geográfica',
				Superficie('Área', nil),
				{'[[Frontera]]s', Fronteras},
				{'[[Línea de costa]]', LineaDeCosta},
				{'[[Anexo:Países por punto más alto|Punto más alto]]', PuntoMasAlto},
				{'Punto más bajo', PuntoMasBajo},
				{'Punto más oriental', PuntoMasOriental},
				{'Punto más occidental', PuntoMasOccidental},
				{'Punto más septentrional', PuntoMasSeptentrional},
				{'Punto más meridional', PuntoMasMeridional},
			},
			{tipo='sección',
				--titulo  	= 'Información socioeconómica',
				Poblacion('Población', 'Densidad de población'),
				{'[[Producto interno bruto|PIB]] ([[Paridad de poder adquisitivo|PPA]])', PIBPuesto(nil)},
				{tipo			='sección',
					estiloetiqueta	= EstiloEtiqueta ..';'..EstiloSubEtiqueta,
					estilodatos		= EstiloDatos .. ';border-top:0;padding:0 .6em',
					{'Total', PIBAnio},
					{'[[Renta per cápita|Per cápita]]', PIBPerCapita},
				},
				{'PIB (nominal)', PIBNominalPuesto(nil)},
				{tipo			='sección',
					estiloetiqueta	= EstiloEtiqueta ..';'..EstiloSubEtiqueta,
					estilodatos		= EstiloDatos .. ';border-top:0;padding:0 .6em',
					{'Total', PIBNominalAnio},
					{'Per cápita', PIBNominalPerCapita},
				},
				IndiceDesarrollo(nil),
				{'[[Coeficiente de Gini]]', Gini},
				{'[[Moneda (divisa)|Moneda]]', Moneda},
			},
			{tipo='sección',
				--titulo  			= 'Información internacional',
				Huso,
				{tipo			='sección',
					estiloetiqueta	= EstiloEtiqueta ..';'..EstiloSubEtiqueta,
					estilodatos		= EstiloDatos .. ';border-top:0;padding:0 .6em',
					{'En [[Horario de verano|verano]]', HorarioVerano},
				},
				{'[[ISO 3166-1|Código ISO]]', CodigoISO},
				{'[[Dominio de nivel superior geográfico#Lista de dominios de nivel superior geográfico|Dominio internet]]', CCTD},
				{'<small>[[Anexo:Prefijos telefónicos internacionales|Prefijo telefónico]]</small>', PrefijoTelef},
				{'<small>[[Anexo:Prefijos radiofónicos|Prefijo radiofónico]]</small>', PrefijoRadio},
				{'[[Matrícula (aeronaves)|Siglas país para aeronaves]]', PrefijoMatAero},
				{'[[Anexo:Siglas automovilísticas internacionales|Siglas país para automóviles]]', PrefijoMatAuto},
				{'[[Anexo:Códigos del COI para los países|Código del COI]]', },
			},
			{tipo='sección',
				estilodatos = 'padding:0',
				{'', SitioWeb},
			},
			MiembroDe,
			estilopiedetabla	= 'text-align:left',
			--piedetabla			= Notas,
			piedetabla			= Debug,
		}
		return infobox(TablaFicha)
	end
	
function p.FichaEstadoDesaparecido(frame)
	_init(frame)
		
	local ClaseTitulo	= 'adr'
	
	local Predecesor = (function()
		local Predecesor = {}
		local Anio, Imagen, Bandera, Enlace
		for i = 1, 21, 1 do
			if not argumentos{'p'..i} then break end
		Enlace	= {}
			table.insert(Enlace, enlazar(argumentos{'p'..i}, '←'))
			if argumentos{'año_p'..i} then table.insert(Enlace, '<small>(' .. argumentos{'año_p'..i} .. ')</small>') end
			
			if argumentos{'bandera_p'..i} then 
				table.insert(Enlace, enlazar(argumentos{'bandera_p'..i}, {['tamaño'] = '30px', ['borde'] = true, ['link'] = argumentos{'p'..i}, ['namespace'] = 6}))
			elseif argumentos{'imagen_p'..i} then
				table.insert(Enlace, argumentos{'imagen_p'..i})
			else
				table.insert(Enlace, (
						enlazar('bandera_de_'..argumentos{'p'..i}..'.svg', {['tamaño'] = '30px', ['borde'] = true, ['link'] = argumentos{'p'..i}, ['namespace'] = 6}) or
						enlazar('bandera_de_la_'..argumentos{'p'..i}..'.svg', {['tamaño'] = '30px', ['borde'] = true, ['link'] = argumentos{'p'..i}, ['namespace'] = 6}) or
						enlazar('3by2white.svg', {['tamaño'] = '30px', ['borde'] = true, ['link'] = argumentos{'p'..i}, ['namespace'] = 6})
					)
				)
			end

			table.insert(Predecesor, table.concat(Enlace))
		end
		if #Predecesor > 0 then return table.concat(Predecesor, '<br>') end
		return propiedad('P155', {['lista'] = 'nobullet'})
	end)()
	
	local Periodo	= (function()
		if argumentos{'duración'} then return argumentos{'duración'} end
		if argumentos{'año_inicio'} and argumentos{'año_fin'} then return argumentos{'año_inicio'}  .. ' - ' .. argumentos{'año_fin'} end
	end)()

	local Sucesor = (function()
		local Datos = {}
		for i = 1, 21, 1 do
			if not argumentos{'s'..i} then break end
			Enlace	= {}
			if argumentos{'año_s'..i} then table.insert(Enlace, '<small>(' .. argumentos{'año_s'..i} .. ')</small>') end
			if argumentos{'bandera_s'..i} then 
				table.insert(Enlace, enlazar(argumentos{'bandera_s'..i}, {['tamaño'] = '30px', ['borde'] = true, ['link'] = argumentos{'s'..i}, ['namespace'] = 6}))
			elseif argumentos{'imagen_s'..i} then
				table.insert(Enlace, argumentos{'imagen_s'..i})
			else
				table.insert(Enlace, (
					enlazar('bandera_de_'..argumentos{'s'..i}..'.svg', {['tamaño'] = '30px', ['borde'] = true, ['link'] = argumentos{'s'..i}, ['namespace'] = 6}) or
						enlazar('bandera_de_la_'..argumentos{'s'..i}..'.svg', {['tamaño'] = '30px', ['borde'] = true, ['link'] = argumentos{'s'..i}, ['namespace'] = 6}) or
						enlazar('3by2white.svg', {['tamaño'] = '30px', ['borde'] = true, ['link'] = argumentos{'s'..i}, ['namespace'] = 6})
					)
				)
			end
			table.insert(Enlace, enlazar(argumentos{'s'..i}, '→'))

			table.insert(Datos, table.concat(Enlace))
		end
		if #Datos > 0 then return table.concat(Datos, '<br>') end
		return propiedad('P155', {['lista'] = 'nobullet'})
	end)()
	
	local Bandera		= argumentos{'imagen_bandera', {propiedad, 'P41', {['formato'] = 'archivo'}}}
	local TamanoBandera	= argumentos{'bandera_tamaño'} or '135x110px'
	local PieBandera	= enlazar(argumentos{'bandera'}, (argumentos{'bandera_denom'} or 'Bandera')) or enlazar('Bandera de ' .. (argumentos{'nombre_común'} or ''), (argumentos{'bandera_denom'} or 'Bandera')) or enlazar('Bandera de la ' .. (argumentos{'nombre_común'} or ''), (argumentos{'bandera_denom'} or 'Bandera'))

	local Escudo		= argumentos{'imagen_escudo', {propiedad, 'P94', {['formato'] = 'archivo'}}}
	local TamanoEscudo	= argumentos{'escudo_tamaño'} or '110x105px'
	local PieEscudo		= enlazar(argumentos{'símbolo'}, (argumentos{'escudo_denom'} or 'Escudo')) or enlazar('Escudo de ' .. (argumentos{'nombre_común'} or ''), (argumentos{'escudo_denom'} or 'Escudo')) or enlazar('Escudo de la ' .. (argumentos{'nombre_común'} or ''), (argumentos{'escudo_denom'} or 'Escudo'))

	local Mapa		= enlazar(argumentos{'imagen_mapa', 'mapa', {propiedad, 'P242', {['formato'] = 'archivo', ['uno'] = 'sí'}}}, {['tamaño'] = '250px', ['namespace'] = 6})
	local PieMapa	= argumentos{'pie_mapa'}
	
	local Capital = (function()
		local Capital				= argumentos{'capital', {propiedad, 'P36', ['uno'] = 'último', ['ordenar'] = 'por fecha'}}
		local CiudadMasPoblada		= argumentos{'ciudad_más_poblada'}
		local AglomeradoMasPoblado	= argumentos{'aglomerado_más_poblado'}
		
		if Capital == CiudadMasPoblada then return {
			tipo = 'sección',
			{'[[Capital (política)|Capital]] <small>(y ' .. enlazar('Demografía de ' .. ModuloPaginas.nombrePagina({desambiguar='sí'}), 'ciudad más poblada') .. ')</small>', Capital}
		} end

		if Capital == AglomeradoMasPoblado then return {
			tipo = 'sección',
			{'[[Capital (política)|Capital]] <small>(y ' .. enlazar('Demografía de ' .. ModuloPaginas.nombrePagina({desambiguar='sí'}), 'aglomerado urbano más poblado') .. ')</small>', Capital}
		} end
	
		return {
			tipo = 'sección',
			{'[[Capital (política)|Capital]]', Capital},
			{enlazar('Demografía de ' .. ModuloPaginas.nombrePagina({desambiguar='sí'}), 'ciudad más poblada'), CiudadMasPoblada},
			{enlazar('Demografía de ' .. ModuloPaginas.nombrePagina({desambiguar='sí'}), 'aglomerado urbano más poblado'), AglomeradoMasPoblado},
		}
	end)()
	
	local Lideres = (function()
		local Lideres		= (function()
			local Datos	= DatosPoliticos['líderes']
			local Valores	= {}
			for k, v in pairs(Datos) do
				Valor = (function()
					local Lider = v[1]
					local Anio	= v[2]
					if Lider then
						if Anio then return Lider .. '&nbsp;<small>(' .. Anio .. ')</small>' end
						return Lider
					end
				end)()
				if Valor then table.insert(Valores, Valor) end
			end
			if #Valores > 0 then return table.concat(Valores, '<br>') end
		end)()
		
		local Gobernantes	= (function()
			local Datos = DatosPoliticos['gobernantes']
			local Valores = {}
			for k, v in pairs(Datos) do
				Valor = (function()
					local Lider = v[1]
					local Anio	= v[2]
					if Lider then
						if Anio then return Lider .. '&nbsp;<small>(' .. Anio .. ')</small>' end
						return Lider
					end
				end)()
				if Valor then table.insert(Valores, Valor) end
			end
			if #Valores > 0 then return table.concat(Valores, '<br>') end
		end)()

		local Etiquetas		= DatosPoliticos['etiquetas']

		local Valores = {['tipo'] = 'sección', ['estiloetiqueta'] = EstiloEtiqueta ..';'..EstiloSubEtiqueta, ['estilodatos'] = EstiloDatos .. ';border-top:0;padding:0 .6em'}

		if Lideres then table.insert(Valores, {Etiquetas[1], Lideres}) end
		
		table.insert(Valores, {Etiquetas[2], Gobernantes})

		return Valores
	end)()

	local Superficie	= (function()
		local Valor = {}
		for i = 1, 20, 1 do
			Dato		= argumentos{'datos_superficie' .. i}
			if Dato == '' or Dato == nil then break end
			Anio		= argumentos{'datos_año' .. i}
			Dato		= formatoNumero(Dato) .. '&nbsp;km²'
			if Dato and Anio then Dato = Dato .. '&nbsp;(' .. enlazar(Anio) .. ')' end
			table.insert(Valor, Dato)
		end
		return table.concat(Valor, '<br>')
	end)()

	local Poblacion	= (function()
		local Valor = {}
		for i = 1, 20, 1 do
			Dato		= argumentos{'datos_población' .. i}
			if Dato == '' or not Dato then break end
			Anio		= argumentos{'datos_año' .. i}
			Densidad	= (function() if tonumber(Dato) and tonumber(argumentos{'datos_superficie' .. i}) then return formatoNumero((tonumber(Dato)/tonumber(argumentos{'datos_superficie' .. i})), {['decimales'] = 2}) end end)()
			Ref			= argumentos{'ref_población' .. i}

			Dato		= formatoNumero(Dato) .. '&nbsp;hab.'
			if Anio then Dato = Dato .. '&nbsp;(' .. Anio .. ')' end
			if Ref then Dato = Dato .. Ref end
			if Densidad then Dato = Dato .. '<br><small>' .. Densidad .. '&nbsp;hab/km²</small>' end

			table.insert(Valor, Dato)
		end
		return table.concat(Valor, '<br>')
	end)()

	-- :: La ficha
	local TablaFicha = {
		titulo  			= Titulo,
		subtitulo			= Subtitulo,
		clase				= Clase,
		clasetitulo			= ClaseTitulo,
		estilotitulo		= EstiloTitulo,
		estilosubtitulo		= 'font-weight:bold; background-color:#cddeff',
		estiloseccion		= EstiloSeccion,
		estiloetiqueta		= EstiloEtiqueta,
		estilodatos			= EstiloDatos,
		-- Data esta implementación, las banderas irán arriba de las suseciones.
		imagenizquierda		= Bandera,
		["tamañoimagenizquierda"]	= TamanoBandera,
		imagenderecha		= Escudo,
		["tamañoimagenderecha"]		= TamanoEscudo,
		pieizquierdo		= PieBandera,
		piederecho			= PieEscudo,
		estilopie			= "font-size:88%",
		{
			tipo				= 'sucesión',
			color				= 'transparent',
			anterior			= Predecesor,
			actual				= Periodo,
			siguiente			= Sucesor,
		},
		{tipo='sección',
			{'', HimnoNacional},
		},
		{tipo='sección',
			--titulo  			= 'Ubicación',
			["tamañoimagen"]	= TamanoImagen,
			{'', Mapa},
		},
		{tipo='sección',
			--titulo  			= 'Información general',
			Capital,
			{'[[Sede de gobierno]]', SedeGobierno},
			{'Gentilicio', Gentilicio},
			Idiomas,
		},
		{tipo='sección',
			--titulo  = 'Información política',
			{'[[Forma de gobierno]]', FormaGobierno},
			Lideres,
			{'[[Órgano ejecutivo]]', OrganoEjecutivo},
			{'[[Órgano legislativo]]', OrganoLegislativo},
			{'[[Estado confesional|Religión]]', Religion},
		},
		Historia, -- Esto formatea los hitos como la independencia
		{tipo='sección',
			--titulo  	= 'Información geográfica',
			{'[[Superficie terrestre|Superficie]]', Superficie},
			{'[[Anexo:Países y territorios dependientes por población|Población]]', Poblacion},
			{'[[Frontera]]s', Fronteras},
			{'[[Línea de costa]]', LineaDeCosta},
			{'[[Anexo:Países por punto más alto|Punto más alto]]', PuntoMasAlto},
			{'Punto más bajo', PuntoMasBajo},
			{'Punto más oriental', PuntoMasOriental},
			{'Punto más occidental', PuntoMasOccidental},
			{'Punto más septentrional', PuntoMasSeptentrional},
			{'Punto más meridional', PuntoMasMeridional},
		},
		{tipo='sección',
			--titulo  	= 'Información socioeconómica',
			{'[[Moneda (divisa)|Moneda]]', Moneda},
		},
		{tipo='sección',
			estilodatos = 'padding:0',
			{'', SitioWeb},
		},
		{tipo='sección',
			estilodatos = 'padding:0',
			MiembroDe,
		},
		estilopiedetabla	= 'text-align:left',
		piedetabla			= Notas,
	}
	return infobox(TablaFicha)
end

-- Esta función permite obtener los líderes de la entidad, además de
-- preformatear datos según el tipo de gobierno.
function obtenerLideres()
	local FormaGobiernoID	= propiedad('P122', {['formato'] = 'entidadID'})
	local Organismo			= ModuloWikidata.obtenerEtiquetaWikidata(Entidad) or ModuloPaginas.nombrePagina({desambiguar='sí'})

	FormaGobierno		= argumentos{'gobierno', 'forma_de_gobierno', {propiedad, 'P122', {['uno'] = 'último', ['ordenar'] = 'por fecha'}}}
	OrganoEjecutivo		= argumentos{'órgano_ejecutivo',{propiedad, 'P208', {['uno'] = 'último', ['ordenar'] = 'por fecha'}}}
	OrganoLegislativo	= argumentos{'órgano_legislativo',{propiedad, 'P194', {['uno'] = 'último', ['ordenar'] = 'por fecha'}}}

	local Datos			= {}
	Datos['líderes']	= {}
	Datos['gobernantes']= {}
	Datos['etiquetas']	= {}

	-- Presidencialismo
	if ModuloWikidata.esUnValor(mw.wikibase.getEntity(propiedad('P1906', {['formato'] = 'entidadID'})), 'P279', 'Q248577')
	or ModuloWikidata.esUnValor(mw.wikibase.getEntity(propiedad('P1906', {['formato'] = 'entidadID'})), 'P279', 'Q30461')
	then
		table.insert(Datos['líderes'], {
			argumentos{'nombre_líder1', 'líder1', 'líder' , {propiedad, 'P35', {['uno'] = 'último', ['ordenar'] = 'por fecha'}}},
			argumentos{'año_líder1'}
		})
		table.insert(Datos['etiquetas'], argumentos{'título_líder1', (function()
			if ModuloWikidata.esUnValor(mw.wikibase.getEntity(propiedad('P35', {['formato'] = 'entidadID'})), 'P21', 'Q6581072') then return enlazar('Presidenta') end
			return enlazar('Presidente')
		end)})

		table.insert(Datos['líderes'], argumentos{'nombre_líder2', 'líder2'})--, {propiedad, 'P6149', {['uno'] = 'sí'}}} -- Buscar propiedad
		table.insert(Datos['etiquetas'], argumentos{'título_líder2', {enlazar, 'Vicepresidente'}})
		return Datos
	end

	-- Monarquía parlamentaria/constitucional
	if ModuloWikidata.esUnValor(mw.wikibase.getEntity(propiedad('P1906', {['formato'] = 'entidadID'})), 'P279', 'Q116') then
		table.insert(Datos['líderes'], {
			argumentos{'nombre_líder1', 'líder1', 'líder' , {propiedad, 'P35', {['uno'] = 'último', ['ordenar'] = 'por fecha'}}},
			argumentos{'año_líder1'}
		})		table.insert(Datos['líderes'], argumentos{'nombre_líder2', 'líder2', {propiedad, 'P35', {['formato'] = 'enlace', ['calificador'] = 'P1393', ['ordenar'] = 'por fecha', ['uno'] = 'último', ['valor_posicional'] = 'último', ['valor_posicional_calif'] = 'último'}}})
		table.insert(Datos['líderes'], argumentos{'nombre_líder3', 'líder3', {propiedad, 'P6', {['uno'] = 'último', ['ordenar'] = 'por fecha'}}})

		table.insert(Datos['etiquetas'], argumentos{'título_líder1', (function()
			if ModuloWikidata.esUnValor(mw.wikibase.getEntity(propiedad('P35', {['formato'] = 'entidadID'})), 'P21', 'Q6581072') then return enlazar('Reina') end
			return enlazar('Rey')
		end)})

		table.insert(Datos['etiquetas'], argumentos{'título_líder2', (function()
			if ModuloWikidata.esUnValor(mw.wikibase.getEntity(propiedad('P35', {['formato'] = 'entidadID', ['calificador'] = 'P1393', ['ordenar'] = 'por fecha', ['uno'] = 'último', ['valor_posicional'] = 'último', ['valor_posicional_calif'] = 'último'})), 'P21', 'Q6581072') then return enlazar('Gobernador general de ' .. Organismo, 'Gobernadora general') end
			return enlazar('Gobernador general de ' .. Organismo)
		end)})

		table.insert(Datos['etiquetas'], argumentos{'título_líder3', {enlazar, 'Primer ministro'}})

		return Datos
	end
	
	-- Se agregarán más formas de gobierno

	-- ::Por defecto
	return (function()
		local Lider1	= argumentos{'nombre_líder1', 'líder1', 'líder' , {propiedad, 'P35', {['uno'] = 'último', ['ordenar'] = 'por fecha'}}}
		local Lider1Anio= argumentos{'año_líder1'}
		local Lider1Etiq= argumentos{'título_líder1', 'título_líder', (function()
			if ModuloWikidata.esUnValor(mw.wikibase.getEntity(propiedad('P35', {['formato'] = 'entidadID'})), 'P21', 'Q6581072') then return enlazar('Jefe de estado', 'Jefa de estado') end
			return enlazar('Jefe de estado')
		end)()}

		table.insert(Datos['líderes'], {Lider1, Lider1Anio})
		table.insert(Datos['etiquetas'], Lider1Etiq)
		
		for i = 2, 20, 1 do
			if argumentos{'nombre_líder' .. i, 'líder' .. i} == '' or not argumentos{'nombre_líder' .. i, 'líder' .. i} then break end
			table.insert(Datos['líderes'], {
				argumentos{'nombre_líder' .. i, 'líder' .. i},
				argumentos{'año_líder' .. i}
			})
		end

		if argumentos{'título_gobernante'} then
			table.insert(Datos['etiquetas'], argumentos{'título_gobernante'})
			for i = 1, 20, 1 do
				if argumentos{'nombre_gobernante' .. i, 'gobernante' .. i} == '' or not argumentos{'nombre_gobernante' .. i, 'gobernante' .. i} then break end
				table.insert(Datos['gobernantes'], {
				argumentos{'nombre_gobernante' .. i, 'gobernante' .. i},
				argumentos{'año_gobernante' .. i}
			})
			end
		end
		return Datos
	end)()
end

-- Envoltura para la plantilla "Mapa de localización" y <mapframe>
function obtenerMapa(frame, parametros)
	if not parametros then parametros = {} end

	if parametros['latitude'] and parametros['longitude'] then
		--if parametros['tipo'] == 'interactivo' then return frame:preprocess('<mapframe frameless align=center width=275 height=250 zoom=' .. (tonumber(parametros['zoom']) or 10) .. ' latitude=' .. parametros['latitud'] .. ' longitude=' .. parametros['longitud'] ..' />') end

		-- Por alguna razón, esto arroja error al no entregar un valor de longitud válido,
		-- a pesar de que se está pasando como parámetro. Se deja para uso local.
		--return require('Módulo:Mapa_de_localización').main(frame, parametros)
	end
end

function seccionDesplegable(frame, titulo, lista, subseccion, minimo)
	if lista then
		if minimo == true or(string.len(lista) > (tonumber(minimo) or 400)) then
			if not titulo then titulo = 'Varios' end
			return {tipo='sección', estilodatos = 'padding:0', {'', frame:preprocess('{{Sección desplegable|align=left|estilotitulo=padding:.4em .6em;border-top:0;' .. (ColorEtiqueta~='' and ('background-color:' .. ColorEtiqueta) or '') .. '|título=' .. titulo .. '|datos='.. lista .. '}}')}}
		end

		if subseccion then
			return {
				tipo='sección',
				estiloetiqueta	= EstiloEtiqueta ..';'..EstiloSubEtiqueta,
				estilodatos		= EstiloDatos .. ';border-top:0;padding:0 .6em',
				{titulo, lista}}
		end
		return {tipo='sección', {titulo, lista}}
	end
end

function listaDesplegable(frame, titulo, lista, minimo)
	if lista then
		if minimo == true or(string.len(lista) > (tonumber(minimo) or 400)) then
			if not titulo then titulo = 'Varios' end
			return {tipo='sección', {'', frame:preprocess('{{Lista desplegable|título=' .. titulo .. '|1='.. lista .. '}}')}, estilodatos = 'text-align:left'}
		end
		return {tipo='sección', {titulo, lista}}
	end
end

function round(num, numDecimalPlaces)
	if type(num) == 'number' then
		return tonumber(string.format("%." .. (numDecimalPlaces or 0) .. "f", num))
	else
		return num
	end
end

function code(content)
	if(content~=nil) then
		return '<code>'..content..'</code>'
	end
	return ''
end

function small(content)
	if(content~=nil) then
		return '<small>'..content..'</small>'
	end
	return ''
end

function nada(content) return content end

-- Función, propiedad() personalizada
function propiedad(idPropiedad, opciones, entidad, frame)
	if not entidad then entidad = Entidad end

	if entidad and entidad.claims and entidad.claims[idPropiedad] then
		if not opciones then
			opciones = {['linkback']='sí'}
		end

		local ValorPosicional = (function()
			if opciones['valor_posicional'] == 'último' then return -1 end
			if type(opciones['valor_posicional']) == 'number' then return opciones['valor_posicional'] end
			return 1
		end)()

		local ValorPosicionalCalif =(function()
			if opciones['valor_posicional_calif'] == 'último' then return -1 end
			if type(opciones['valor_posicional_calif']) == 'number' then return opciones['valor_posicional_calif'] end
			return 1
		end)()
		
		local Calificador = opciones['calificador']

		local Obj = (function()
			local Obj = (function()
				local Obj = elementoTabla(entidad, 'claims', idPropiedad)
				if ValorPosicional == -1 then return elementoTabla(Obj, #Obj) end
				return elementoTabla(Obj, ValorPosicional)
			end)()
			
			if Calificador then
				return (function()
					local Obj = elementoTabla(Obj, 'qualifiers', Calificador)
					if ValorPosicionalCalif == -1 then return elementoTabla(Obj, #Obj, 'datavalue') end
					return elementoTabla(Obj, ValorPosicionalCalif, 'datavalue')
				end)()
			end
			return elementoTabla(Obj, 'mainsnak', 'datavalue')
		end)()

		if Obj then
			Tipo	= elementoTabla(Obj, 'type')
			
			-- Devolver el ID de la entidad, para propiedades de entidad
			if opciones['formato'] == 'entidadID' then
				return elementoTabla(Obj, 'value', 'id')
			end
			
			-- Obtener la propiedad como cadena sin formato
			if opciones['formato'] == 'cadena' then
				opciones['linkback'] = 'no'
				if Tipo == 'string' then
					return elementoTabla(Obj, 'value')
				end
			end

			-- Devolver una cadena numérica correctamente formateada
			if opciones['formato'] == 'número' then
				if Tipo == 'quantity' then
					return formatoNumero(elementoTabla(Obj, 'value', 'amount'))
				end
			end
	
			-- Devolver una cadena numérica con su unidad
			if opciones['formato'] == 'unidad' then
				if elementoTabla(entidad, 'claims', idPropiedad, 2, 'mainsnak', 'datavalue') then
					return formatoNumero(elementoTabla(entidad, 'claims', idPropiedad, 1, 'mainsnak', 'datavalue', 'value', 'amount')) .. '&nbsp;-&nbsp;' .. numeroUnidad(elementoTabla(entidad, 'claims', idPropiedad, 2, 'mainsnak', 'datavalue'), opciones)
				else
					return numeroUnidad(elementoTabla(entidad, 'claims', idPropiedad, 1, 'mainsnak', 'datavalue'), opciones)
				end
			end
			
			-- Obtener la propiedad como cadena sin formato
			if opciones['formato'] == 'enlace' then
				opciones['linkback'] = 'no'
				if Tipo == 'wikibase-entityid' then
					return enlazar(ModuloWikidata.obtenerEtiquetaWikidata(mw.wikibase.getEntity(elementoTabla(Obj, 'value', 'id'))))
				elseif Tipo == 'string' then
					return enlazar(elementoTabla(Obj, 'value'))
				end
			end
			
			-- Preparar para devolver el archivo más reciente en la propiedad. Buscar cómo hacerlo con los calificadores
			if opciones['formato'] == 'archivo' then
				if Calificador then return elementoTabla(Obj, 'value') end
				if not opciones['uno'] then opciones['uno'] = 'último' end
				opciones['ordenar'] = 'por fecha'
			end
			
			if Tipo == 'globecoordinate' then
				if opciones['formato'] == 'latitud' then return elementoTabla(Obj, 'value', 'latitude') end
				if opciones['formato'] == 'longitud' then return elementoTabla(Obj, 'value', 'longitude') end
			end
		end

		-- Invocar a la función fallback si no se cumplen las condiciones anteriores
		opciones.entityId  = entidad.id
		opciones.propiedad = idPropiedad
		return ModuloWikidata.getPropiedad(opciones, entidad.claims[idPropiedad])
	end
end

function categorizar(cat)
	categorias = categorias .. '[[Categoría:'..cat..']]'
end

return p