POLITICA
Fentanilo contaminado: revelan falencias en el control de laboratorios por parte de la ANMAT

La investigación judicial por el fentanilo de uso médico contaminado de HLB Pharma y su elaborador exclusivo, Laboratorios Ramallo, vinculado a 40 pacientes fallecidos en hospitales y clínicas por haber sido tratados con ese medicamento, deja a la intemperie un tema que no es nuevo y que se profundiza año tras año: la vulnerabilidad del sistema argentino en el control de drogas peligrosas -como el fentanilo y la efedrina- y la necesidad urgente de reforzar las inspecciones y la trazabilidad de estas sustancias que pueden ser desviadas para la elaboración de drogas ilícitas.
El juzgado federal de La Plata, a cargo de Ernesto Kreplak, no investiga -al menos en esta etapa de la instrucción- este tipo de posibles irregularidades, pero deja al descubierto situaciones que parecen anómalas y se toma nota de ello.
Por ejemplo, la última vez que el Departamento de Sustancias Sujetas a Control Especial realizó una inspección a HLB Pharma fue en el año 2018, hace siete años.
Laboratorios Ramallo, es decir, el que fabricó la droga mortal, para la empresa de Ariel García Furfaro, nunca fue visitada por el Departamento de Sustancias Sujetas a Control Especial.
En este punto vale puntualizar las siguientes cuestiones burocráticas.
-Del Ministerio de Salud de la Nación, a cargo de Mario Lugones, depende la Administración Nacional de Medicamentos, Alimentos y Tecnología Médica (ANMAT), su responsable, desde el 27 de diciembre de 2024, es Nélida Agustina Bisio.
La ANMAT tiene como función principal garantizar que los productos para la salud, alimentos y tecnologías médicas que circulan en el país “sean seguros, eficaces y de calidad” según se describe en su página oficial.
-De la ANMAT depende el Instituto Nacional de Medicamentos (INAME). Está a cargo de Gabriela Mantecón Fumadó. El INAME actúa como una unidad técnico-científica dentro del marco regulatorio de la ANMAT. Tiene autonomía operativa para emitir dictámenes técnicos, informes regulatorios y decisiones sobre expedientes relacionados con productos medicinales.
-A su vez, del INAME depende el Departamento de Sustancias Sujetas a Control Especial. El área está a cargo desde 2016 de Alejandra Verónica Rey, una profesional que ingresó a la ANMAT en 1993. Su función central es la fiscalización, autorización y control de todas las sustancias que, por su peligrosidad o potencial de desvío, están sujetas a regulación especial. También la autorización de operaciones de importación y exportación e Interviene en todos los trámites que involucren sustancias controladas, como opioides (fentanilo, morfina), psicotrópicos, precursores químicos y sustancias de corte. Es la responsable de la emisión de certificados regulatorios. Por ejemplo, en el caso del fentanilo, el área tiene competencia para otorgar la autorización final de importación.
Por estas razones, el juzgado de Kreplak convocó a la funcionaria nacional Andrea Rey en calidad de testigo. Los investigadores querían conocer de primera mano:
-Cómo se fiscalizan los movimientos y cantidades de materia prima (citrato de fentanilo) para elaborar el medicamento de uso clínico.
-A qué laboratorio, nacional o extranjero, compró ese producto HLB Pharma y su elaborador exclusivo Laboratorios Ramallo.
-Cuándo fue la última inspección al laboratorio HLB Pharma y Ramallo. -Qué laboratorios producen citrato de fentanilo en Argentina.
-Con qué frecuencia se controlan las empresas farmacéuticas que utilizan “Sustancias Sujetas a Control Especial”. Por las respuestas de Rey o la falta de ellas, quedó expuesto:
-La falta de inspecciones recientes a HLB Pharma. Andrea Rey admitió que la última vez que se controlaron las sustancias sujetas a control especial que maneja la firma “fue en 2018”. Laboratorios Ramallo nunca fue inspeccionado. “En general, las inspecciones se realizan cada dos años”, explicó la funcionaria y consideró “excepcional ese lapso sin fiscalización” pero reconoció que “esto ocurre con otros laboratorios”.
Rey admitió que su Departamento está sobrecargado por los trámites de importación y exportación, y que las inspecciones suelen postergarse por falta de recursos: “A veces se llega al punto de no hacerla porque es más trabajoso y se cuenta con capacidad limitada de recursos y personal”.
Al profundizar sobre la cuestión, la directora nacional le dijo a los funcionarios judiciales que: “En el Departamento de Sustancias Sujetas a Control Especial de ANMAT trabajan 20 personas, de las cuales la mayoría son administrativos”. Para más datos Rey precisó: “Solo cuatro de ellas son profesionales habilitados para realizar inspecciones, como bioquímicos, farmacéuticos o licenciados en química”. Y amplió: “Casi la totalidad (del personal) son administrativos. Para cada inspección se necesita dos profesionales”.
Rey mencionó que en Argentina hay producción de citrato de fentanilo y que son dos los laboratorios que lo elaboran: CONIFARMA y TRIQUIM. Y refirió que el primero de ellos: “Fue el proveedor de HLB Pharma del citrato de fentanilo en el año 2021”, pero no supo precisar la cantidad adquirida. Ante una pregunta específica del juez Kreplak la funcionaria aseguró que el citrato de fentanilo -la materia prima para elaborar el fentanilo de uso clínico- que utiliza HLB Pharma no es importado, sino que: “La materia prima fue adquirida a CONIFARMA”. Ante esta respuesta, los funcionarios judiciales le exhibieron documentación que la contradecía. Allí quedaba plasmado que HLB Pharma había importado citrato de fentanilo. Se trataba de un certificado de calidad del citrato de fentanilo (analizado en enero de 2023), que luego fue utilizado en el lote contaminado (31202). Se trata del lote contaminado con las bacterias Klebsiella pneumoniae MBL y Ralstonia pickettii vinculado a la mayoría de los 40 pacientes fallecidos.
En ese caso en particular se importó, en agosto de 2021, la cantidad de 17,4 de la firma sudafricana Fine Chemicals Corporation con vencimiento en el mes de enero de 2025. Ante la exposición de la documentación secuestrada en los allanamientos que se realizó a HLB Pharma y Laboratorios Ramallo, Andrea Rey respondió que: “Discrepa de la que posee en su Departamento, que desconoce en cuanto a la operación de la importación que surge del documento exhibido extraído del batch récords (registro de lote) rotulado ‘Certificado de Análisis Certificado de Análisis Estándar Secondarid’, consta en sus registros”.
Ante la imposibilidad de dar más detalles sobre la importación del citrato de fentanilo importado de Sudáfrica, la funcionaria del Ministerio de Salud de la Nación insistió: “En 2024 realicé una inspección en CONIFARMA y figuraban registros que indicaban que le proveían materia prima a HLB Pharma” y refirió que: “En las inspecciones controlan que en el laboratorio la materia prima coincida con la cantidad documentada”. Andrea Rey insistió en que “no hay posibilidad que ingrese al país citrato de fentanilo sin haber pasado por previa autorización de ANMAT”.
Ante la insistencia del juzgado sobre la importación del citrato de fentanilo por parte de HLB Pharma y/o Laboratorios Ramallo a través de la firma Fine Chemicals Corporation, Rey intentó desvincularse de la situación al responder que su Departamento: “No recibe información de la compra, sino que la obtienen en las inspecciones que realice”. Una aclaración: la compra se realizó en 2021, se utilizó en diciembre de 2024, pero el laboratorio no es inspeccionado desde 2018. Por último, la funcionaria que depende del INAME informó que “el laboratorio no tiene la obligación de informar los movimientos de compra con el fentanilo”.
Según la documentación oficial a la que accedió Infobae, entre 2012 y 2025 los informes de la Sindicatura General de la Nación (SIGEN) y la Auditoría General de la Nación (AGN) revelan deficiencias en la “gestión de riesgos y la fiscalización sobre el control de sustancias peligrosas vinculadas a insumos médicos y farmacéuticos”. Por ejemplo, en junio de 2025, la SIGEN publicó una auditoría sobre la administración y distribución de insumos médicos durante la gestión anterior, con hallazgos que resultan relevantes para la ANMAT:
• Fallas en la trazabilidad de medicamentos y vacunas.
• Existencia de productos vencidos y problemas en la gestión de stock.
• Insuficiencia de controles continuos y sistemáticos.
• Trazabilidad incompleta de medicamentos y otros productos regulados.
• Déficit en la actualización y aplicación de normativas. • Inspecciones insuficientes y controles administrativos con limitaciones técnicas y de recursos.
• Falta de sistemas de información eficaces y problemas de comunicación interinstitucional.
Estas deficiencias, según las auditorías oficiales, “impactan en la capacidad de la ANMAT para cumplir de manera efectiva su función de control, prevención y vigilancia de riesgos asociados a los productos médicos y farmacéuticos en el país”.
POLITICA
Guillermo Francos mantuvo un duro cruce con un hombre que lo insultó en Mar del Plata: del “estás loco” a dos “fuck you”

El jefe de Gabinete, Guillermo Francos, mantuvo una acalorada discusión con un hombre que lo insultó en las inmediaciones del Hotel Hermitage, en Mar del Plata. El episodio ocurrió este martes, durante la visita de Javier Milei, Francos, candidatos y funcionarios a la ciudad balnearia. Allí participaron de la inauguración de una planta de procesamiento de papas de la multinacional Lamb Weston y en una caravana militante por la calle Güemes.
Las imágenes, que se viralizaron en la red social X, fueron registradas entre las 18 y las 19. Sucedió antes de la recorrida de Milei junto a la secretaria general de la Presidencia Karina Milei, los aspirantes a ingresar al Congreso Diego Santilli y Karen Reichardt, y el armador oficialista en territorio bonaerense, Sebastián Pareja, por la avenida comercial.
Según confirmaron a desde el entorno de Francos, el individuo no dejaba de insultarlo, motivo por el cual el ministro se acercó a dialogar. Al advertir que el hombre estaba exaltado, decidió retirarse.
En los primeros segundos del video se observa al jefe de Gabinete cerca de un automóvil perteneciente a la flota oficial, mientras escucha los gritos de un individuo que, desde detrás de una valla, le increpa: “La van a tener que pagar. La historia se las va a cobrar. A todos ustedes”. Francos preguntó “por qué”.
A partir de ese momento, la grabación, registrada por un tercero, se tornó ininteligible por unos segundos. El sujeto y Francos discutían a viva voz. Quien grabó el episodio identificó en ese momento al hombre como “kirchnerista”. Cuando los gritos cesan, se escucha nuevamente la voz del sujeto que se había acercado a Francos. “Ahora te la están cobrando, te la están pidiendo. ¿Cuántos miles de dólares pediste?”.
Ante los insultos, Francos se lleva el dedo índice a la cabeza y le responde “estás loco”, para luego coronar el gesto con dos “fuck you”, lo que provoca aún más enojo en el hombre.
“A mí no me digas loco, forro (sic). ¿Quién te creés que sos? Sos un mandatario. Te votaron para mandar, no para pedir guita. Ladrón. Hijo de p… (sic). ¿Qué se puede esperar de un burro más que una patada?”, replica el individuo, mientras el jefe de Gabinete se aleja de la escena.
Francos no fue el único en recibir insultos durante su paso por la ciudad balnearia. Durante una caminata en la avenida Colón y las Heras, de la cual participó también la diputada nacional Lilia Lemoine, Milei discutió a lo lejos con un vecino que lo insultó desde un balcón mientras saludaba a simpatizantes y se sacaba fotos.
En las imágenes se escucha cómo el hombre le grita “estafador hijo de puta” al mandatario. Milei, lejos de responder con insultos, replicó con ironía: “Igual te estoy arreglando la vida”.

El intercambio no terminó ahí. Ante la insistencia del vecino, una mujer que acompañaba al jefe de Estado le pidió: “Dome, Milei, dome”. Entonces el Presidente volvió a levantar la voz para cerrar la discusión. “Te voy a bajar un poco más la inflación así puteás un poco más, dale”, dijo, lo que provocó risas entre los militantes presentes.
durante la visita de Javier Milei, Francos, candidatos y funcionarios a la ciudad balnearia,Guillermo Francos,Mar del Plata,Javier Milei,Conforme a,,»Le gustan las cámaras». Facundo Manes denunció a Martín Menem por amenazas en los pasillos del Congreso y el libertario lo desmintió,,Dictó más de cuatro DNU por mes La oposición puso en jaque la principal herramienta de gobernabilidad de Milei,,»Momento bisagra». Milei relanzó la campaña de LLA junto a Santilli y busca dejar atrás la crisis por el escándalo de Espert,Guillermo Francos,,Guitarra en mano. El salteño Sáenz reclamó en Plaza de Mayo por la obra pública prometida por la Casa Rosada,,»Generó daño en la campaña». Qué dijo Francos sobre la renuncia de Espert a su candidatura,,Uno por uno, los apuntados. El Congreso activa su rol de contralor y acorrala a los funcionarios a los que cuestiona
POLITICA
El Gobierno gana tiempo porque Diputados no pudo convertir en ley el límite a los DNU

El Gobierno calculaba que no tenía los números suficientes para evitar que la oposición aprobara el proyecto que limita el uso de los Decretos de Necesidad y Urgencia (DNU). Es por eso que Javier Milei tenía entre sus previsiones vetar la ley, según pudo saber TN, pero luego de que se aplicaran algunos cambios, el Ejecutivo logró ganar tiempo hasta que el Senado defina la resolución final.
En el oficialismo consideraban que la medida no podía salir tal cual como estaba redactada. “Se va a vetar, excepto que haya cambios”, expresaba una fuente de Casa Rosada mientras se desarrollaba el debate parlamentario. Otra persona, con acceso al despacho presidencial, también confirmó esa decisión.
Leé también: Santilli, tras la decisión de la Justicia Electoral: “No me importa el lugar, voy a estar donde el Presidente
Desde que hubo quorum para la sesión, distintos actores de La Libertad Avanza avizoraban la complejidad del panorama. “No creo que tengamos los números”, reconoció una voz libertaria del bloque de Diputados.
Asimismo, los aliados de LLA en el recinto dieron cuenta de la situación: “No puede no vetarla. Se cae el Gobierno, te dejan inmovilizado”.
A pesar de los intentos, el Ejecutivo no logró evitar que Unión por la Patria, Encuentro Federal, Democracia para Siempre y la Coalición Cívica den el presente para comenzar la sesión.
Además, fueron claves los cuatro diputados que responden a Martín Llaryora, el gobernador de Córdoba. En Balcarce 50 no lograron convencer al mandatario provincial, que es uno de los principales referentes del frente Provincias Unidas.
En cambio, los que sí se ausentaron fueron los legisladores de Ignacio Torres (Chubut), Maximiliano Pullaro (Santa Fe), Gustavo Sáenz (Salta), Hugo Passalacqua (Misiones) y Alberto Weretilneck (Río Negro).

Después de varias horas de debate, Diputados aprobó la reforma que limita los DNU de Milei, pero no pudo convertirla en ley porque se impusieron cambios y ahora la iniciativa vuelve al Senado.
Qué dice el proyecto que limita los DNU
La iniciativa nació en la Cámara Alta, donde obtuvo media sanción. El proyecto modifica la ley 26.122, que fue sancionada en 2006 e impulsada por Cristina Kirchner.
Entre los puntos más destacados del texto figura la eliminación de la convalidación tácita de los DNU, cuando el Congreso no los trata. Ahora, se propone que sean aprobados por ambas cámaras y con mayoría absoluta para que mantengan vigencia.
Leé también: José Luis Espert pidió licencia hasta el final de su mandato como diputado
Además, el documento fija un plazo para que este trámite se lleve adelante: 90 días corridos desde la publicación del decreto en el Boletín Oficial. Si no es aprobado dentro de ese lapso de tiempo, perdería vigencia de manera automática.
La medida establece que si alguna de las dos cámaras del Congreso rechaza un DNU, el decreto quedará derogado. No obstante, estarán a salvo los derechos adquiridos durante su vigencia.
Por último, la iniciativa también le prohíbe al Gobierno dictar megadecretos, como el DNU 70/2023 que Javier Milei firmó al inicio de su gestión. En cambio, se especifica que los documentos deberán referirse a una sola temática.
Cámara de Diputados, Congreso., DNU
POLITICA
Uno por uno, cómo votaron en general los diputados la reforma de la ley de DNU, que ahora vuelve al Senado

`
: `
`
}
${bloque}
`;
targetContainer.appendChild(card);
}
function createHemicicleSmall(nAfirmativo, nNegativo, nAbstencion, nAusente) {
const hemicycle = document.querySelector(‘.votos-diputados__hemiciclo.small’);
hemicycle.innerHTML = »; // Clear previous content.
const centerX = 300;
const baseY = 450;
const numberOfRows = 10;
// Array of seats per row (from outer to inner)
const seatsPerRow = [38, 36, 33, 30, 27, 24, 21, 19, 16, 13];
const verticalOffset = 2;
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
// 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 * (16 – 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.
const leyText = nAfirmativo > nNegativo ? ‘Ley Aprobada’ : ‘Ley no aprobada’;
document.querySelector(‘#voto-summary’).innerHTML = `
Afirmativo: ${nAfirmativo} |
Negativo: ${nNegativo}
Abstención: ${nAbstencion} |
Ausente: ${nAusente}
` + ‘
‘ + leyText + ‘
‘;
}
// Creates the big hemiciclo visualization.
function createHemicicleBig(nAfirmativo, nNegativo, nAbstencion, nAusente) {
const hemicycle = document.querySelector(‘.votos-diputados__hemiciclo.big’);
hemicycle.innerHTML = »; // Clear previous content.
const centerX = 300;
const baseY = 450;
const numberOfRows = 10;
// Array of seats per row (outer to inner; total should be 257)
const seatsPerRow = [38, 36, 33, 30, 27, 24, 21, 19, 16, 13];
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 + «).»);
}
// — 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);
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
};
});
// — 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 * (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 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);
}
}
}
/* // — Update Legend —
const leyText = nAfirmativo > nNegativo ? «Ley Aprobada» : «Ley no aprobada»;
const resultsText=»shshs»;
document.querySelector(«#voto-summary»).innerHTML = leyText + resultsText; */
}
// Go-to-top button functionality.
document.addEventListener(‘DOMContentLoaded’, function() {
const goToTopButton = document.querySelector(‘.votos-diputados__go-to-top’);
const targetElement = document.querySelector(‘.votos-diputados’);
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-diputados__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’;
});
}
// 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();
}
});
- CHIMENTOS2 días ago
Mica Viciconte confesó por qué no fue a conocer a su primer sobrino: “Me cuesta, no me hallo”
- POLITICA3 días ago
En la antesala de la elección de la CGT, los gremios del transporte refuerzan su conducción y su perfil opositor a Milei
- CHIMENTOS1 día ago
Quién es la Gran Hermano que se separó y se puso de novia con un futbolista argentino: «Catalina Gorostidi está con Germán Ferreyra»