Artículo
· 8 hr atrás Lectura de 6 min

Nobody expects the Spanish Inquisidor!

¡Sí sí! ¡Adelante! No os habéis equivocado, estáis en vuestra querida Comunidad de Desarrolladores de InterSystems en español.

Os preguntaréis a qué viene el título de este artículo, pues muy sencillo, hoy estamos aquí reunidos para honrar al Inquisidor y elogiar la gran labor desempeñada por el mismo. 

Comunidad de Steam :: :: Nobody expects the Spanish Inquisition

Y bien, ¿quién o qué es el Inquisidor?

Perfecto, ahora que he captado vuestra atención, es momento de explicar que es el Inquisidor. El Inquisidor es una solución desarrollada con tecnología InterSystems para someter a inquisición los contratos públicos que diariamente son publicados en la plataforma https://contrataciondelestado.es/

Aunque la plataforma tiene un buscador habilitado para filtrar las licitaciones públicas este tenía varias limitaciones:

  • Es imposible realizar búsquedas por el título de la licitación.
  • La búsqueda por adjudicatarios depende de que conozcas la descripción exacta utilizada en el registro del mismo en el resultado de la licitación, la cual varía invariablemente de una a otra (me he encontrado a InterSystems escrito de 5 formas distintas).
  • Encontrar el organismo que ha publicado la licitación es digno de un libro de ¿Dónde está Wally en la Administración Pública?

Y ni qué decir tiene que es imposible sacar la más mínima estadística al respecto de las licitaciones.

¿Cómo funciona el Inquisidor?

Muy sencillo, la plataforma de contratación pública pone a disposición de la plebe, en una muestra de generosidad, descargas diarias de las licitaciones publicadas en la plataforma en formato XML de este estilo:

<entry>
        <id>https://contrataciondelestado.es/sindicacion/licitacionesPerfilContratante/13983936</id>
        <link href="https://contrataciondelestado.es/wps/poc?uri=deeplink:detalle_licitacion&amp;idEvl=Ag4n4m84LtCqb7rCcv76BA%3D%3D"/>
        <summary type="text">Id licitación: 2023/20; Órgano de Contratación: Parlamento de Andalucía; Importe: 99750 EUR; Estado: EV</summary>
        <title>Suministro de equipamiento para el trabajo de trabajo en movilidad del Parlamento de Andalucía.</title>
        <updated>2024-01-31T12:59:50.514+01:00</updated>
        <cac-place-ext:ContractFolderStatus>
            <cbc:ContractFolderID>2023/20</cbc:ContractFolderID>
            <cbc-place-ext:ContractFolderStatusCode listURI="https://contrataciondelestado.es/codice/cl/2.04/SyndicationContractFolderStatusCode-2.04.gc" languageID="es">EV</cbc-place-ext:ContractFolderStatusCode>
            <cac-place-ext:LocatedContractingParty>
                <cbc:ContractingPartyTypeCode listURI="http://contrataciondelestado.es/codice/cl/2.10/ContractingAuthorityCode-2.10.gc">2</cbc:ContractingPartyTypeCode>
                <cbc:ActivityCode listURI="http://contrataciondelestado.es/codice/cl/2.10/ContractingAuthorityActivityCode-2.10.gc">1</cbc:ActivityCode>
                <cbc:BuyerProfileURIID>https://contrataciondelestado.es/wps/poc?uri=deeplink:perfilContratante&amp;idBp=SI5CV24QS6s%3D</cbc:BuyerProfileURIID>
                <cac:Party>
                    <cbc:WebsiteURI>http://www.parlamentodeandalucia.es</cbc:WebsiteURI>
                    <cac:PartyIdentification>
                        <cbc:ID schemeName="DIR3">I00000175</cbc:ID>
                    </cac:PartyIdentification>
                    <cac:PartyIdentification>
                        <cbc:ID schemeName="NIF">S4133001J</cbc:ID>
                    </cac:PartyIdentification>
                    <cac:PartyIdentification>
                        <cbc:ID schemeName="ID_PLATAFORMA">20015840002647</cbc:ID>
                    </cac:PartyIdentification>

Tenéis acceso a los archivos desde esta URL.

El Inquisidor se conecta diariamente a la URL que descarga el fichero y lo mapea a su propia base de datos, extrayendo los datos más útiles de la misma, como es la descripción, el importe, fechas de publicación así como el ganador de la misma y el importe en el caso de estar adjudicadas.

Esta información puede ser consultada desde una aplicación de Angular desarrollada para tal efecto:

¿Que nos aporta InterSystems IRIS al Inquisidor?

Hasta ahora las funcionalidades presentadas no pueden ser más sencillas y podrían implementarse con cualquier tecnología, pero gracias a IRIS, no tenemos que contentarnos con esa funcionalidades básicas. Veamos cómo IRIS impulsa y mejora a nuestro Inquisidor.

Almacenamiento columnar para estadísticas

Actualmente la plataforma almacena 874534 licitaciones entre publicadas y adjudicadas (y creciendo). La explotación estadística de las mismas se podría ver afectada por el número de registros, pero gracias al almacenamiento de tipo columnar sobre la columna de importes de adjudicación el tiempo de búsqueda y de agregaciones se reduce dramáticamente.

Property Ganador As %String(MAXLEN = 200);
Property GanadorNIF As %String(MAXLEN = 200);
Property ImporteGanador As %Numeric(STORAGEDEFAULT = "columnar");
Property ImporteGanadorSinImpuestos As %Numeric(STORAGEDEFAULT = "columnar");

De tal forma que podremos buscar agilmente y con absoluta inmediatez los importes de adjudicaciones agregadas tanto por empresas ganadoras, organismo contratante y años de publicación.

Indexación de textos con %iFind

Las búsquedas por campos de texto pueden ser una auténtica tortura, al implicar consultas que hagan uso de "LIKE" así como de carácteres especiales "%" o "?" que pueden ralentizar la obtención de resultados ad aeternum. Esto no es un problema trabajando con IRIS gracias a la indexación con %iFind (más información aquí).

Index IndexTitulo On (Titulo) As %iFind.Index.Basic(INDEXOPTION = 0, LANGUAGE = "es");

Este tipo de índices permite indexar campos de texto que aceleran de forma dramática las búsquedas sobre los mismos ahorrando tiempos de procesamiento y sobre todo y lo más importante, no agotando nuestra paciencia.

Aquí podemos ver un ejemplo de búsqueda de adjudicaciones de contratos para la adquisición de embutidos y la cual ha tardado menos de 1 segundo:

Vectorización de títulos de licitaciones

En ocasiones es posible que no estemos totalmente seguros de la descripción usada para el título de las licitaciones, por ello hemos aprovechado las capacidades de almacenamiento vectorial de la base de datos para la vectorización de los títulos y permitir búsquedas basadas en proximidad vectorial, obteniendo resultados que se aproximen a la búsqueda realizada.

Property TituloVectorizado As %Vector(DATATYPE = "DECIMAL", LEN = 384);

Conclusiones

Como veis, lo que a priori puede ser una aplicación básica, gracias a InterSystems IRIS puede ser mejorada y optimizada al máximo haciendo uso de las múltiples funcionalidades y capacidades incluidas.

¿Cuellos de botellas o problemas de rendimiento en tus aplicaciones? ¡Echa un vistazo a InterSystems IRIS!

Asociado a este artículo tenéis la aplicación subida a GitHub. La aplicación hace uso de la versión Community de InterSystems IRIS, por lo que podréis hacer uso de la misma de forma gratuita, con la única limitación del tamaño de la base de datos.

Actualmente disponemos de una versión pública a la que podréis acceder (previa solicitud dejando un comentario en este artículo).

Comentarios (1)2
Inicie sesión o regístrese para continuar