# Especificacion: AdSense Placement - In-Content Ads Avanzados ## Definiciones Tecnicas ### Definicion: Elemento de Bloque Contable Un "elemento" para efectos de espaciado y conteo se define como el tag de cierre de los siguientes elementos de bloque principal: | Tag | Cuenta como elemento | Notas | |-----|---------------------|-------| | `
` | SI | Parrafo | | `` | SI | Encabezado nivel 2 | | `` | SI | Encabezado nivel 3 | | `` | SI | Contenedor de imagen con caption | | `` | SI | Lista desordenada (el contenedor, no los `Parrafo 1
Parrafo 2
Parrafo 3
``` - **WHEN** min_spacing es 3 - **THEN** la distancia entre A y B es 4 elementos - **AND** ambas ubicaciones pueden tener ads (4 >= 3) #### Scenario: Espaciado insuficiente - **GIVEN** min_spacing es 5 - **AND** solo hay 3 elementos entre dos ubicaciones candidatas - **THEN** la segunda ubicacion se elimina de las candidatas - **AND** se conserva la de mayor prioridad --- ### Requirement: Estrategia de seleccion configurable El sistema DEBE permitir elegir como resolver conflictos cuando dos ubicaciones estan muy cerca. #### Scenario: Modo position (default) - **WHEN** `incontent_priority_mode` es "position" - **AND** hay un H2 (prioridad 10) en posicion 3 y un parrafo (prioridad 8) en posicion 1 - **AND** min_spacing es 3 - **THEN** el parrafo en posicion 1 se selecciona primero (por orden DOM) - **AND** el H2 en posicion 3 se elimina por violar espaciado (distancia 2 < 3) - **AND** el resultado favorece distribucion uniforme #### Scenario: Modo priority - **WHEN** `incontent_priority_mode` es "priority" - **AND** hay un H2 (prioridad 10) en posicion 3 y un parrafo (prioridad 8) en posicion 1 - **AND** min_spacing es 3 - **THEN** el H2 se selecciona primero (por mayor prioridad) - **AND** el parrafo se elimina por violar espaciado con el H2 - **AND** el resultado maximiza ubicaciones de alto valor --- ### Requirement: Probabilidad deterministica por ubicacion El sistema DEBE soportar probabilidad configurable que sea consistente durante el dia. #### Scenario: Implementacion de probabilidad deterministica - **GIVEN** un post_id y una fecha - **WHEN** se calcula si insertar ad en una ubicacion - **THEN** el seed es `crc32(post_id . 'YYYY-MM-DD')` - **AND** se usa `mt_srand(seed)` antes de evaluar probabilidades - **AND** cada ubicacion consume un `mt_rand(1, 100)` en orden de aparicion #### Scenario: Valores de probabilidad disponibles - **WHEN** el usuario configura probabilidad para cualquier tipo - **THEN** los valores disponibles son: 25, 50, 75, 100 - **AND** el valor se interpreta como porcentaje --- ## MODIFIED Requirements ### Requirement: Estrategia de campos legacy Los campos existentes del grupo `behavior` relacionados con in-content ads DEBEN coexistir con el nuevo sistema mediante deprecacion suave. #### Scenario: Campos legacy a deprecar - **GIVEN** los siguientes campos existentes: - `post_content_enabled` (behavior) - `post_content_max_ads` (behavior) - `post_content_after_paragraphs` (behavior) - `post_content_min_paragraphs_between` (behavior) - `post_content_random_mode` (behavior) - `post_content_format` (behavior) - **WHEN** el sistema tiene ambos grupos de campos - **THEN** el grupo `incontent_advanced` tiene precedencia si `incontent_mode` != "legacy" - **AND** si `incontent_mode` == "legacy", se usan los campos del grupo `behavior` #### Scenario: Migracion automatica en UI - **WHEN** el usuario visita el panel de AdSense por primera vez despues de la actualizacion - **AND** tiene configuracion legacy activa (`post_content_enabled` = true) - **THEN** se muestra un banner informativo sobre el nuevo sistema - **AND** se ofrece boton "Migrar a nuevo sistema" que copia valores equivalentes #### Scenario: Mapeo de campos legacy a nuevos | Campo Legacy | Campo Nuevo | Logica de Mapeo | |--------------|-------------|-----------------| | post_content_max_ads | incontent_max_total_ads | Copia directa (ampliar opciones) | | post_content_min_paragraphs_between | incontent_min_spacing | Copia directa | | post_content_random_mode | N/A | Si true, todas las probabilidades = 75% | | post_content_after_paragraphs | N/A | Se usa para primer ad, resto aleatorio | --- ### Requirement: UI de In-Content Ads reorganizada La interfaz de administracion DEBE organizarse en subsecciones claras usando elementos HTML semanticos. #### Scenario: Estructura HTML de la seccion - **WHEN** se renderiza el card de In-Content Ads Avanzado - **THEN** DEBE seguir esta estructura: ```html