Connect with us

POLITICA

¿Hay más muertes? Kilos desaparecidos, una destrucción dudosa y sospechas de narcotráfico: la oscura trama detrás del fentanilo mortal

Published

on



En la Argentina un envenenamiento masivo ya provocó 52 muertes, pero por lo bajo todos los involucrados saben que son cientos. Se sabe quiénes fueron los responsables, quiénes los que no controlaron y quiénes forman parte del sistema de protección. Centenares de familias lloran a sus muertos por una rara “pulmonía bilateral”, sin saber su causa real de deceso. No saben que detrás de la tragedia hay un común denominador: fentanilo, además de potenciales vínculos con el narcotráfico, sospechas de protección política y una trama con ramificaciones en lo más alto del poder.

Hace cuatro meses, antes de que el fentanilo adquiriera notoriedad por los lotes contaminados que le produjeron la muerte a por lo menos 48 personas, habló con una alta fuente internacional respecto de la presencia de la droga en la Argentina. La inquietud partía del potencial crecimiento de circulación en el país, frente a un Estados Unidos en vilo por los estragos causados en el consumo local. “Observen atentamente a los laboratorios truchos que tienen en su poder fentanilo; importaron en la pandemia sin control de ningún organismo”, alertó.

Advertisement

El drama del fentanilo en mal estado es apenas la punta del iceberg de una historia que esconde ribetes escabrosos. Cerca de 50 familias argentinas velaron sus muertos y otras tantas ni siquiera sospechan que este veneno fue la causa de la pérdida repentina de sus seres queridos.

Mientras tanto, los responsables del laboratorio que produjo el medicamento se mantienen en libertad. La Justicia se movió demasiado lento como para poder encontrar pruebas concluyentes y los reguladores estatales, encargados de apercibir y clausurar en caso de una anomalía, permanecen callados y paralizados por el miedo.

Según la United States Drug Enforcement (DEA), el fentanilo es un opioide sintético que se usa habitualmente para tratar a pacientes con dolor crónico o dolor intenso después de una cirugía. “Es una sustancia controlada de la Lista II, similar a la morfina, pero aproximadamente 100 veces más potente; bajo la supervisión de un profesional médico colegiado, el fentanilo tiene un uso médico legítimo”, define el organismo.

Advertisement

El veneno está suelto. Hay 3000 dosis producidas en el Laboratorio Ramallo y en HLB Pharma repartidas en tres lotes de 1000 cada una que todavía no se sabe dónde están. La próxima muerte puede suceder ahora mismo. Las irregularidades del laboratorio han sido tan manifiestas que no es posible tener la trazabilidad de una droga letal, controlada como ninguna en todo el mundo.

La Administración Nacional de Medicamentos, Alimentos y Tecnología Médica (Anmat) confeccionó 180 infracciones en el laboratorio y jamás se lo clausuró sino hasta la tragedia de las muertes que, en mayo pasado, se sucedieron en el hospital Italiano de La Plata.

El acta de clausura pegada en el laboratorio HLB PharmaSantiago Filipuzzi

Pero, como se dijo, no sólo las partidas en mal estado son el problema de los dos laboratorios. La mayor preocupación para quienes se ocupan de monitorear los flujos del narcotráfico son las empresas que, en las sombras de la desidia y la protección política, eran capaces de derivar el fármaco al mercado negro. Unas semanas después del alerta internacional, HLB Pharma y Laboratorios Ramallo fueron apuntadas como responsables de las primeras muertes registradas en el Hospital Italiano de La Plata, como consecuencia de ampollas de fentanilo no estériles. Estos laboratorios, de profundos vínculos con el poder, ¿eran aquellos sobre los que caía la advertencia? Hoy, la investigación apunta tanto a la falta de control de calidad como a la verdadera cantidad.

Advertisement

HLB Pharma tenía en su poder fentanilo en ampollas y citrato de fentanilo, materia prima para producir el primero.

Durante la pandemia, el laboratorio importó un poco más de 9 kilos, de los cuales habría utilizado cerca de cinco. En marzo, hubo una inspección de Sedronar (Secretaría de Políticas Integrales sobre Drogas de la Nación Argentina) tanto a sus instalaciones primarias, ubicadas en San Isidro, como a su laboratorio hermano, en Ramallo, ambos de los mismos dueños, los García Furfaro (Ariel, Diego y Damián), además de la madre, Nilda Furfaro, que suele figurar como socia o directora en algunas de las sociedades.

Ariel García Furfaro empresario

El organismo dejó constancia en actas de que se encontraron 4 kilogramos de citrato de fentanilo en HLB y otro kilo y medio en la sede de la localidad de Ramallo.

Advertisement

El 26 de mayo, cuando la Justicia allanó los establecimientos tras las muertes asociadas a su marca de fentanilo, no encontró nada. El compuesto había desaparecido.

Un dato estremecedor aparece en un estudio de la DEA, la agencia antinarcóticos de los Estados Unidos: “Las organizaciones de narcotráfico suelen distribuir fentanilo por kilogramo. Un kilogramo de fentanilo tiene el potencial de matar a 500.000 personas

Por cada kilo de polvo de fentanilo salen cerca de 2 millones de ampollas. En el país se emplean alrededor de 200.000 ampollas por mes con lo cual, la demanda anual está en torno a 1,2 millón de dosis.

Advertisement

En síntesis, y en supuesto que solo HLB Pharma fuera la única empresa que abasteciera a todo el territorio, la materia prima que tenía en su poder en marzo hubiese sido suficiente para todo el consumo nacional por casi cuatro años y medio.

El fentanilo desapareció. Semejante irregularidad generó que la Justicia ya no sólo investigue las muertes sino también que empiece a enderezar la hipótesis hacia la posibilidad de que haya narcotráfico.

Así quedaron planteadas las cosas. Sin demasiado movimiento de la Justicia, los hermanos García Furfaro pudieron construir un contrafuego para intentar explicar qué pasó con semejante cantidad de fentanilo desaparecido. La semana pasada, los apoderados de los laboratorios de las muertes se presentaron ante Ernesto Kreplak, el juez que entiende en la causa y hermano de Nicolás, ministro de Salud bonaerense.

Advertisement

Mediante una presentación espontánea, los responsables de las plantas dijeron haber destruido el citrato de fentanilo y unas 2 millones de ampollas de fentanilo. Para probar aquella “maniobra”, presentaron papeles de las empresas en donde habrían realizado la disposición, así como también quiénes lo habrían transportado y la escribana que estuvo presente. Se trataba de una empresa de gestión de residuos peligrosos que solían contratar, llamada MD Servicios SRL. Todas fueron allanadas. Otro problema: si fuera cierto el destino de la mercadería, los documentos indicarían que lo hicieron después de la medida de no innovar de Anmat, que les prohibió mover cualquier cosa de los laboratorios.

A esta justificación para explicar la ausencia de la droga se le suma un hecho más que hace todo más inverosímil aún. Unos días antes de que los allanaran, HLB Pharma reportó una entradera en sus oficinas. Dijeron que se habían llevado las cajas fuertes en donde, según el reporte de Sedronar de marzo, por tratarse de material peligroso y sensible, guardaban el citrato de fentanilo.

La explicación no cierra ya que el material necesita de condiciones específicas de temperatura, humedad y estabilidad para estar preservado correctamente. Una fuente que conoció de cerca el proceso contó a que estos protocolos fueron continuamente violados en los laboratorios.

Advertisement

Los propios García Furfaro solían llevar ese material de un lugar a otro en sus camionetas. Algunos exempleados recuerdan una mañana, a las 9 y durante la pandemia, por alguna razón llegaron y “se llevaron todo” con destino a unos galpones en el kilómetro 46 del Acceso Oeste, en General Rodríguez. Allí tienen otra empresa: Cables Epuyén.

La fábrica y galpones de Cables Epuyén, en Acceso Oeste

Esta empresa es una de las tantas que conforman un notable entramado societario y comercial de los García Furfaro. De hecho, en esta compañía, dueña de una formidable planta de galpones en el corazón industrial de zona Oeste, figura como gerente titular de la sociedad Damian García Furfaro desde agosto de 2022. La firma arrastra enormes deudas de impuestos y cargas sociales impagos y tiene gran parte de su cartera crediticia en situación 5 con una acreencia del Banco Credicoop de alrededor de 570 millones de pesos.

El lento accionar judicial jamás llegó a ese predio ubicado a metros de la autopista, pero hay conocedores del asunto con los que dialogó en estas últimas semanas que consideran que podría haber sido un lugar donde pudo haberse guardado aquel tesoro mortal en polvo.

Advertisement

Hay otra explicación extraoficial, reconstruida por testimonios reservados que estas fuentes entregaron a estos cronistas. García tiene otra sociedad muy conocida. Se trata de Tres Arroyos, una empresa dedicada al rubro alimentos y cereales. Cuatro camiones con este logo habrían llegado a San Isidro y luego parado en Ramallo a recolectar pallets de ampollas de fentanilo y el citrato de fentanilo unos días antes que la Justicia haga sus allanamientos. Luego, habrían salido para General Rodríguez, donde habría quedado la mercadería en los galpones.

Camiones de Tres Arroyos cargados de productos de HLB Pharma (no corresponden al presunto día en que lo movieron)

Gran parte del desvío ocurrió en las narices de la Anmat. De hecho, en el proceso de producción del opioide que se utiliza diariamente en las terapias intensivas y en el quirófano, está gran parte de la explicación de cómo registraban el uso del fentanilo.

De acuerdo con lo que reconstruyó , cuando un laboratorio elabora un fármaco siempre se registra una “merma”. El término refiere al porcentaje de producción que se pierde por errores o problemas de calidad, así como también por la acumulación que queda en diferentes partes del camino.

Advertisement

Lo explica así, a modo de ilustrar, un conocedor del asunto: “Cuando se pone 100 miligramos de un producto en el inicio del proceso nunca sale eso por el otro lado; es decir, se introducen 100 de un lado del caño y en el otro extremo sale entre 94 y 92, esa es una merma media de mercado”.

Ese porcentaje de “pérdida” queda fuera de la venta. En general, las empresas de este rubro registran entre un 4% y 8% de merma. HLB registraba, según fuentes consultadas por , entre un 24% y 25% de “pérdida”.

Para algunos, tornaría inviable el emprendimiento una pérdida constante de esta magnitud. Dicho de otra manera, por cada cuatro pasadas, una quedaba fuera del mercado y podía ser desviada la mercado ilegal. Todos estos documentos de la merma duermen el sueño eterno en la Anmat, el organismo que los debería haber controlado.

Advertisement

Dentro de la empresa, de acuerdo con testimonios recabados, existía lo que llamaban el “canal veterinario”. Presuntamente, una porción importante del fentanilo que se vendía se destinaba al tratamiento en animales, algo no recomendado. Esta merma atípica está siendo observada por la investigación judicial y es, posiblemente, la que habrían transportado antes de los allanamientos a las plantas de Epuyén.

Mientras la Argentina se conmueve por muertes repentinas, el fantasma del fentanilo en mal estado arrecia en gran parte del sistema de salud pública, principales compradores de los laboratorios HLB y Ramallo. A eso se suma el narcotráfico y los principales carteles de drogas del planeta, únicos eventuales compradores de varios kilos del polvo mortal que en el último año se llevó centenares de miles de vidas en todo el mundo.



Advertisement
Advertisement

POLITICA

Ritondo habló sobre la situación de Espert: “La explicación no alcanzó”

Published

on



El diputado nacional Cristian Ritondo de Propuesta Republicana (Pro), y aliado de La Libertad Avanza (LLA), dijo que la explicación de José Luis Espert sobre si recibió o no dinero de un narcotraficante “no alcanzó”. Una investigación de confirmó que el candidato del oficialismo recibió depósitos de empresas relacionadas a Fred Machado por 200.000 dólares y eso consta en un documento del Bank of America.

En este sentido, en diálogo con TN, Ritondo sostuvo que sin esas explicaciones “no se puede hacer campaña”. Sin embargo, apuntó contra el kirchnerismo de estar detrás de “una operación”. “Han logrado romper con un esquema donde no estamos discutiendo la economía y el narcotráfico”, apuntó.

Advertisement

La explicación de Espert no alcanzó. Deja en la nebulosa una pregunta que repiten los periodistas y que tiene que contestar. Hoy Guillermo Francos y Patricia Bullrich le pidieron que aclare un poco más. Es cierto que en un proceso electoral hay muchas operaciones, pero también es cierto que hay momentos en los que hay que dar explicaciones y seguir con la campaña”, afirmó Ritondo.

En tanto, continuó: “En otros momentos podés esperar y dar explicaciones cuando quieras, pero cuando estás en campaña y sos candidato, el reflejo tiene que estar en contestar rápido y salir del problema. Lógicamente, la respuesta más profunda se la das a la Justicia”.

Además declaró que no tiene por qué creer o no en la honestidad de Espert y sostuvo que “la Justicia lo va a determinar”. “Él tiene que demostrarlo. En lo que yo conozco creo que sí lo es”, dijo pero dejó el asunto en manos judiciales.

Advertisement

Por otra parte, Ritondo explicó que la situación de Espert afecta a la alianza entre LLA y Pro en la recta final de cara a las elecciones nacionales de octubre: “No podés hacer campaña. Si no estuviese este tema, estaríamos discutiendo otras cosas, como el nuevo Código Penal. No podemos discutir el compromiso de Pro de acompañar a La Libertad Avanza”.

Este miércoles, Espert dio una entrevista pero se negó en reiteradas ocasiones a contestar si cobró o no US$200.000 de Fred Machado durante la campaña de 2019, en el marco de una denuncia que salió a la luz por una presentación que hizo el dirigente de Patria Grande, Juan Grabois. “No voy a responder, no le voy a dar el gusto a Grabois, le voy a responder en la Justicia”, señaló en A24, durante una tensa entrevista, en la que le preguntaron varias veces lo mismo y evadió la respuesta con la misma frase.

A su vez, el presidente Javier Milei ratificó la candidatura de Espert como diputado nacional por la provincia de Buenos Aires y acusó una “operación berreta” de parte de la oposición. Aseguró que nunca pensó en aparatarlo y consideró: “Es un refrito de algo que pasó hace seis años”.

Advertisement

Noticia en desarrollo.


José Luis Espert,Una investigación de LA NACION confirmó que el candidato del oficialismo recibió depósitos de empresas relacionadas a Fred Machado por 200.000 dólares y eso consta en un documento del Bank of America,, una presentación que hizo el dirigente de Patria Grande, Juan Grabois,Cristian Ritondo,José Luis Espert,Conforme a,Cristian Ritondo,,Tensión. Qué pasó entre Cristian Ritondo y Silvia Lospennato en el Congreso,,»No te voy a permitir». Así fue el cruce entre Cristian Ritondo y Silvia Lospennato en el Congreso,,Alimentos para las cárceles. Sobreseen al exsecretario de Seguridad echado por Bullrich

Advertisement
Continue Reading

POLITICA

La Justicia confirmó que José Luis Espert viajó 35 veces en aviones vinculados al narco “Fred” Machado

Published

on


La justicia federal corroboró que José Luis Espert utilizó hasta 35 vuelos en aviones ligados al empresario Fred Machado, quien está detenido bajo acusaciones de narcotráfico y lavado. El juez Martínez de Giorgi fue el encargado de constatar la operación de esas aeronaves dentro del marco de la investigación.

El hallazgo contradice versiones previas que hablaban de una única utilización de esas aeronaves. Según Clarín, “en principio, se creía que había sido uno solo”, pero la verificación judicial amplió ese número decisivamente. Esa nueva escala alimenta la sospecha de vínculos irregulares entre Espert y Machado, y refuerza la denuncia presentada por Juan Grabois.

Advertisement

La Nación difundió la primera imagen de Espert con Machado. De izquierda a derecha Nazareno Etchepare, José Luis Espert, Iván Sherman y Fred Machado.

Desde su entorno, Espert admitió conocer a Machado y haber viajado en uno de sus aviones, pero relativizó la acusación: “Obviamente le agradecí, si me llevó en su avión”, señaló al referirse a un viaje en 2019. No obstante, esos vuelos múltiples complican su defensa y multiplican los requerimientos de claridad sobre sus lazos financieros y operativos con el empresario investigado.

Advertisement

La causa en curso ya investiga aportes por US$ 200.000 que habrían sido canalizados por Machado en campañas políticas pasadas, como parte de una denuncia por lavado de activos. La confirmación judicial de las múltiples rutas aéreas gravita ahora como un elemento clave para que la justicia defina si procede una imputación formal mayor o incluso medidas cautelares contra Espert.

La entrada La Justicia confirmó que José Luis Espert viajó 35 veces en aviones vinculados al narco “Fred” Machado se publicó primero en Nexofin.

Aviones,Fred Machado,José Luis Espert,Narcotráfico

Advertisement
Continue Reading

POLITICA

Uno por uno, cómo votaron los senadores el veto de Milei a la ley Garrahan

Published

on



Conteo de Votos y Hemiciclo

Uno por uno, así votaron los senadores el rechazo al veto de la Ley Garrahan

Advertisement

Advertisement


`
: `

Advertisement
foto-senador

`
}

${bloque}

`;
targetContainer.appendChild(card);
}

function createHemicicleSmall(nAfirmativo, nNegativo, nAbstencion, nAusente) {
const hemicycle = document.querySelector(‘.votos-senadores__hemiciclo.small’);
hemicycle.innerHTML = »; // Clear previous content.

Advertisement

const centerX = 300;
const baseY = 450;
const numberOfRows = 5;
// Array of seats per row (from outer to inner)
const seatsPerRow = [21, 18, 16, 12, 7];
const verticalOffset = 0;
const totalSeats = seatsPerRow.reduce((a, b) => a + b, 0);
const totalVotes = nAfirmativo + nNegativo + nAbstencion + nAusente;

// Instead of percentage-based rounding, we’ll compute a per-row distribution
// using floor() and then distribute any remaining seats based on the remainders.
let rowSeatCounts = seatsPerRow.map((seatsInRow) => {
// Compute the exact (floating point) allocation for each category.
const exactAfirmativo = (nAfirmativo * seatsInRow) / totalSeats;
const exactNegativo = (nNegativo * seatsInRow) / totalSeats;
const exactAbstencion = (nAbstencion * seatsInRow) / totalSeats;
const exactAusente = (nAusente * seatsInRow) / totalSeats;
// Take floor values.
let rowAfirmativo = Math.floor(exactAfirmativo);
let rowNegativo = Math.floor(exactNegativo);
let rowAbstencion = Math.floor(exactAbstencion);
let rowAusente = Math.floor(exactAusente);
let assigned = rowAfirmativo + rowNegativo + rowAbstencion + rowAusente;
let diff = seatsInRow – assigned;
// Create an array of remainders along with category identifiers.
let remainders = [{
cat: «afirmativo»,
remainder: exactAfirmativo – rowAfirmativo
},
{
cat: «negativo»,
remainder: exactNegativo – rowNegativo
},
{
cat: «abstencion»,
remainder: exactAbstencion – rowAbstencion
},
{
cat: «ausente»,
remainder: exactAusente – rowAusente
}
];
// Sort descending by remainder.
remainders.sort((a, b) => b.remainder – a.remainder);
// Distribute the remaining seats one by one to the categories with the highest remainders.
while (diff > 0) {
for (let r of remainders) {
if (diff <= 0) break;
switch (r.cat) {
case «afirmativo»:
rowAfirmativo++;
break;
case «negativo»:
rowNegativo++;
break;
case «abstencion»:
rowAbstencion++;
break;
case «ausente»:
rowAusente++;
break;
}
diff–;
}
}
return {
afirmativo: rowAfirmativo,
negativo: rowNegativo,
abstencion: rowAbstencion,
ausente: rowAusente
};
});

// Now, using your inverted loop order (columns first, then rows)
const maxSeatsInRow = seatsPerRow[0]; // maximum seats in the outer row

Advertisement

// For each seat position (by column, then row), assign the color based on that row’s distribution.
for (let col = 0; col < maxSeatsInRow; col++) {
for (let row = 0; row < numberOfRows; row++) {
if (col < seatsPerRow[row]) { // only if this row has a seat at this column
const seatsInThisRow = seatsPerRow[row];
const radius = 170 – row * (30 – verticalOffset);
const angleRange = Math.PI; // semicircle
const angleStep = (seatsInThisRow > 1) ? angleRange / (seatsInThisRow – 1) : 0;
const angle = (Math.PI – angleRange) / 2 + col * angleStep;
const x = centerX + radius * Math.cos(angle);
const y = baseY – radius * Math.sin(angle);

// For this row, assign colors in order:
// First use available «afirmativo», then «negativo», then «abstencion», then «ausente»
let colorClass=»color-empty»;
if (rowSeatCounts[row].afirmativo > 0) {
colorClass=»color-afirmativo»;
rowSeatCounts[row].afirmativo–;
} else if (rowSeatCounts[row].negativo > 0) {
colorClass=»color-negativo»;
rowSeatCounts[row].negativo–;
} else if (rowSeatCounts[row].abstencion > 0) {
colorClass=»color-abstencion»;
rowSeatCounts[row].abstencion–;
} else if (rowSeatCounts[row].ausente > 0) {
colorClass=»color-ausente»;
rowSeatCounts[row].ausente–;
}
const seat = document.createElement(‘div’);
seat.classList.add(‘seat’, colorClass);
seat.style.left = `${x}px`;
seat.style.top = `${y}px`;
hemicycle.appendChild(seat);
}
}
}

/* // Set the legend text (sin mostrar Ley Aprobada o no aprobada)
document.querySelector(‘#voto-summary’).innerHTML = `

Advertisement

Afirmativo: ${nAfirmativo} |
Negativo: ${nNegativo}

Abstención: ${nAbstencion} |
Ausente: ${nAusente}

`; */

/* // — Update Legend —
const leyText = nAfirmativo > nNegativo ? «Ley Aprobada» : «Ley no aprobada»;
const resultsText=»shshs»;
document.querySelector(«#voto-summary»).innerHTML = leyText + resultsText; */

Advertisement

/*
// Set the legend text. Mayoría simple
const leyText = nAfirmativo > nNegativo ? ‘Ley Aprobada’ : ‘Ley no aprobada’;
document.querySelector(‘#voto-summary’).innerHTML = `

Afirmativo: ${nAfirmativo} |
Negativo: ${nNegativo}

Abstención: ${nAbstencion} |
Ausente: ${nAusente}

` + ‘

Advertisement

‘ + leyText + ‘

‘; */

// Set the legend text. Dos tercios de los presentes (******EDITAR LEYENDA*****)
function votosNecesarios(presentes) {
return Math.ceil((2 / 3) * presentes);
}

Advertisement

const leyText = nAfirmativo >= (votosNecesarios(72 – nAusente)) ? ‘Aprobada’ : ‘Rechazada’;
document.querySelector(‘#voto-summary’).innerHTML = `

Afirmativo: ${nAfirmativo} |
Negativo: ${nNegativo}

Abstención: ${nAbstencion} |
Ausente: ${nAusente}

` + ‘

Advertisement

‘ + leyText + ‘

‘;

}

Advertisement

// Creates the big hemiciclo visualization.
function createHemicicleBig(nAfirmativo, nNegativo, nAbstencion, nAusente) {
const hemicycle = document.querySelector(‘.votos-senadores__hemiciclo.big’);
hemicycle.innerHTML = »; // Clear previous content.

const centerX = 300;
const baseY = 450;
const numberOfRows = 5;
// Array of seats per row (outer to inner; total should be 257)
const seatsPerRow = [21, 18, 16, 11, 6];
const verticalOffset = 2;
const totalSeats = seatsPerRow.reduce((a, b) => a + b, 0);

// Raw vote counts must sum to totalSeats (257)
const totalVotes = nAfirmativo + nNegativo + nAbstencion + nAusente;
if (totalVotes !== totalSeats) {
console.warn(«Total votes (» + totalVotes + «) do not equal total seats (» + totalSeats + «).»);
}

Advertisement

console.log(nAfirmativo, nNegativo, nAbstencion, nAusente, totalSeats, totalVotes);

// — Per-Row Distribution Using Absolute Counts —
// For each row, compute the exact allocation for each vote category based on its fraction of the total seats.
let rowSeatCounts = seatsPerRow.map(seatsInRow => {
const exactA = (nAfirmativo / totalSeats) * seatsInRow;
const exactN = (nNegativo / totalSeats) * seatsInRow;
const exactAb = (nAbstencion / totalSeats) * seatsInRow;
const exactAu = (nAusente / totalSeats) * seatsInRow;

let rowA = Math.floor(exactA);
let rowN = Math.floor(exactN);
let rowAb = Math.floor(exactAb);
let rowAu = Math.floor(exactAu);

Advertisement

let assigned = rowA + rowN + rowAb + rowAu;
let diff = seatsInRow – assigned;

// Create an array of remainders for each category.
let remainders = [{
cat: «afirmativo»,
rem: exactA – rowA
},
{
cat: «negativo»,
rem: exactN – rowN
},
{
cat: «abstencion»,
rem: exactAb – rowAb
},
{
cat: «ausente»,
rem: exactAu – rowAu
}
];
// Sort the remainders in descending order.
remainders.sort((a, b) => b.rem – a.rem);

// Distribute any leftover seats one by one.
while (diff > 0) {
for (let r of remainders) {
if (diff <= 0) break;
switch (r.cat) {
case «afirmativo»:
rowA++;
break;
case «negativo»:
rowN++;
break;
case «abstencion»:
rowAb++;
break;
case «ausente»:
rowAu++;
break;
}
diff–;
}
}
return {
afirmativo: rowA,
negativo: rowN,
abstencion: rowAb,
ausente: rowAu
};
});

Advertisement

// — Global Correction —
// Sum the allocated seats for each category across all rows.
let globalA = rowSeatCounts.reduce((sum, row) => sum + row.afirmativo, 0);
let globalN = rowSeatCounts.reduce((sum, row) => sum + row.negativo, 0);
let globalAb = rowSeatCounts.reduce((sum, row) => sum + row.abstencion, 0);
let globalAu = rowSeatCounts.reduce((sum, row) => sum + row.ausente, 0);

// For each category, if the global total is less than the raw count, add the missing seats to the outer row (row 0).
if (globalA < nAfirmativo) {
rowSeatCounts[0].afirmativo += (nAfirmativo – globalA);
}
if (globalN < nNegativo) {
rowSeatCounts[0].negativo += (nNegativo – globalN);
}
if (globalAb < nAbstencion) {
rowSeatCounts[0].abstencion += (nAbstencion – globalAb);
}
if (globalAu < nAusente) {
rowSeatCounts[0].ausente += (nAusente – globalAu);
}

// — Seat Placement Using Inverted Loop Order —
const maxSeatsInRow = seatsPerRow[0];
for (let col = 0; col < maxSeatsInRow; col++) {
for (let row = 0; row < numberOfRows; row++) {
if (col < seatsPerRow[row]) { // Only process if this row has a seat at the current column.
const seatsInThisRow = seatsPerRow[row];
const radius = 300 – row * (55 – verticalOffset);
const angleRange = Math.PI; // semicircle
const angleStep = (seatsInThisRow > 1) ? angleRange / (seatsInThisRow – 1) : 0;
const angle = (Math.PI – angleRange) / 2 + col * angleStep;
const x = centerX + radius * Math.cos(angle);
const y = baseY – radius * Math.sin(angle);

Advertisement

// For the current row, assign the color in order: afirmativo, then negativo, then abstencion, then ausente.
let colorClass=»color-empty»;
if (rowSeatCounts[row].afirmativo > 0) {
colorClass=»color-afirmativo»;
rowSeatCounts[row].afirmativo–;
} else if (rowSeatCounts[row].negativo > 0) {
colorClass=»color-negativo»;
rowSeatCounts[row].negativo–;
} else if (rowSeatCounts[row].abstencion > 0) {
colorClass=»color-abstencion»;
rowSeatCounts[row].abstencion–;
} else if (rowSeatCounts[row].ausente > 0) {
colorClass=»color-ausente»;
rowSeatCounts[row].ausente–;
}

const seat = document.createElement(‘div’);
seat.classList.add(‘seat’, colorClass);
seat.style.left = `${x}px`;
seat.style.top = `${y}px`;
hemicycle.appendChild(seat);
}
}
}

}

Advertisement

// Go-to-top button functionality.
document.addEventListener(‘DOMContentLoaded’, function() {
const goToTopButton = document.querySelector(‘.votos-senadores__go-to-top’);
const targetElement = document.querySelector(‘.votos-senadores’);

goToTopButton.addEventListener(‘click’, function() {
targetElement.scrollIntoView({
behavior: ‘smooth’
});
});
const observer = new IntersectionObserver((entries) => {
entries.forEach((entry) => {
goToTopButton.style.display = entry.isIntersecting ? ‘block’ : ‘none’;
});
}, {
root: null,
rootMargin: ‘0px’,
threshold: 0.1
});
observer.observe(targetElement);

// Attach the toggle listener to each vote button.
const toggleBtns = document.getElementsByClassName(‘votos-senadores__voto-btn’);
for (let i = 0; i < toggleBtns.length; i++) {
toggleBtns[i].addEventListener(‘click’, function() {
this.classList.toggle(‘active’);
const panel = this.nextElementSibling;
panel.style.maxHeight = panel.style.maxHeight ? null : ‘14000px’;
});
}

Advertisement

// Now simulate a click on each button from within DOMContentLoaded.
// This will trigger the listener and expand each panel on load.
for (let i = 0; i < toggleBtns.length; i++) {
toggleBtns[i].click();
}

});

Advertisement
Continue Reading

Tendencias