126 lines
5.8 KiB
Markdown
126 lines
5.8 KiB
Markdown
# IDEAS_BACKLOG.md
|
||
|
||
**Propósito**: lista corta de items concretos pendientes que no están en
|
||
`PHASE_35_PLAN.md`. Cosas que se descubrieron como gaps pero NO bloquean el flujo
|
||
principal. Si tenés tiempo, agarrá uno desde acá.
|
||
|
||
**Convención**:
|
||
- 🔴 P1 = afecta funcionalidad core hoy
|
||
- 🟡 P2 = mejora cobertura/UX significativa
|
||
- 🟢 P3 = nice to have
|
||
|
||
Cada item: contexto, costo en horas, blockers, criterio "done".
|
||
|
||
---
|
||
|
||
## 🟡 1. 26 FL counties que NO usan realauction.com
|
||
|
||
**Contexto**: probe a `https://www.realauction.com/clients` confirmó que 41 de los 67 condados FL usan realforeclose.com. Los 26 restantes están en otras plataformas (parking pages en realauction = no client). Mayormente counties pequeños/rurales pero también algunos importantes como Monroe (Keys), Collier (Naples), Okaloosa (Destin), St. Johns (St. Augustine).
|
||
|
||
**Counties pendientes**:
|
||
Bradford, Collier, Columbia, DeSoto, Dixie, Franklin, Gadsden, Glades, Hamilton,
|
||
Hardee, Hendry, Hernando, Highlands, Holmes, Jefferson, Lafayette, Levy, Liberty,
|
||
Madison, Monroe, Okaloosa, St. Johns, Sumter, Taylor, Union, Wakulla.
|
||
|
||
**Plataformas a investigar**: Govease, ClerkAuction.com, ServiceLink Auction, sistemas in-house del clerk.
|
||
|
||
**Esfuerzo**: ~30 min por county para identificar plataforma + 2-3h por plataforma nueva para integrar engine.
|
||
**Done cuando**: top 5 prioritarios (Monroe, Collier, Okaloosa, St. Johns, Hernando) tienen scraper funcional.
|
||
|
||
---
|
||
|
||
## 🟢 2. Property Researcher agent — prompt tuning
|
||
|
||
**Contexto**: framework `property_researcher.py` + `agent_tools.py` están construidos. El test con Wake County NC mostró que qwen2.5:14b sigue la estrategia inicial bien (lookup_portal → web_search → fetch_url) pero se queda atrapado en loops de fetch sin llamar `extract_with_local_llm` ni `finish()`. 10/10 iteraciones sin terminar limpio en el test.
|
||
|
||
**Posibles fixes** (probar en orden):
|
||
1. Mejor system prompt con flow paso-a-paso explícito + few-shot examples
|
||
2. Force `extract_with_local_llm` después de cada `fetch_url` exitoso (regla en prompt)
|
||
3. Cambiar al modelo Coordinator (qwen2.5:32b, 19GB) — más reasoning power
|
||
4. Implementar "judge" — un segundo LLM evalúa si la iteración avanzó, si no → corrige el plan
|
||
|
||
**Esfuerzo**: 2-4h iteraciones de prompt + tests.
|
||
**Done cuando**: agente completa research de 1 deal NC con `finish()` + ≥2 portales descubiertos guardados en `portal_directory.json`.
|
||
|
||
---
|
||
|
||
## 🟢 3. Firecrawl `/extract` como fallback para counties non-FL
|
||
|
||
**Contexto**: alternativa al PropertyResearcher agent. Firecrawl `/extract` toma una URL + JSON schema y devuelve data extraída via su LLM. 4 credits por deal completo ≈ $0.004. Buena solución para los counties non-FL donde no tenemos scraper.
|
||
|
||
**Pipeline propuesto**:
|
||
```python
|
||
def fetch_deal_anywhere(address, county, state):
|
||
# 1 cred: descubrir portal
|
||
portal = firecrawl_search(f"property appraiser {county} county {state}")
|
||
# 1 cred: scrape PA
|
||
pa_data = firecrawl_extract(portal_url, schema=PA_SCHEMA)
|
||
# 1 cred: descubrir court
|
||
court_portal = firecrawl_search(f"court records {county} {state}")
|
||
# 1 cred: scrape court
|
||
court_data = firecrawl_extract(court_portal, schema=COURT_SCHEMA)
|
||
return pa_data | court_data # ~4 credits
|
||
```
|
||
|
||
**Budget impact**: 4 cred × 250 deals/mes = 1000 cred, justo en límite. Solo activar para counties non-FL.
|
||
|
||
**Esfuerzo**: ~2h implementación + 1h testing.
|
||
**Done cuando**: deal de Virginia (Fairfax) procesado correctamente con verdict + plaintiff + owner extraídos.
|
||
|
||
---
|
||
|
||
## 🟢 4. PA fetchers extendidos (Duval, Miami-Dade street photos)
|
||
|
||
**Contexto**: solo Broward PA tiene foto exterior real funcional vía `bcpa.net`. Miami-Dade y Duval solo exponen aerial map + sketch (verificado). Algunos counties más pequeños podrían tener street photos.
|
||
|
||
**Counties a probar**:
|
||
- Hillsborough: probablemente sí (high-volume)
|
||
- Orange: probablemente sí
|
||
- Pinellas, Lee, Brevard, Volusia: probable
|
||
- Counties más pequeños: usualmente sketch-only
|
||
|
||
**Esfuerzo**: ~20 min por county para probe + 30 min para integrar al `pa_photo_lookup.py`.
|
||
**Done cuando**: al menos 3 counties más con foto exterior funcional + entries en `_FETCHERS` dict.
|
||
|
||
---
|
||
|
||
## 🟢 5. HUD PropertyDetails photo extraction
|
||
|
||
**Contexto**: HUD Homestore search-list page no incluye foto. La página individual `/PropertyDetails?caseNumber=X` SÍ podría tener foto (no investigado a fondo aún). Probe inicial mostró Cloudinary placeholders `NoImage.jpg` para todos.
|
||
|
||
**Pendiente verificar**:
|
||
- ¿Todos los HUD listings son NoImage o solo los que vi?
|
||
- ¿Hay listings que SÍ tienen foto del HUD photographer program?
|
||
- ¿Vale la pena el per-deal fetch (39 deals × 1 Playwright call ≈ 5 min)?
|
||
|
||
**Esfuerzo**: ~1h probe + decisión + posible integración.
|
||
**Done cuando**: documentado si HUD tiene fotos reales para algún subset, o confirmado que es siempre NoImage.
|
||
|
||
---
|
||
|
||
## 🟡 6. Cards UX — feedback loop on Pre-screening result freshness
|
||
|
||
**Contexto**: pre-screening result se persiste en `st.session_state[f"prescreen_result_{deal_id}"]`. Si re-corrés pre-screening, sobrescribe. Pero si el deal data cambió (re-scrape), la card sigue mostrando el result viejo.
|
||
|
||
**Pendiente**:
|
||
- Mostrar `run_at` timestamp en la pre-screening result box
|
||
- Botón "Re-correr pre-screening" cuando hay un result viejo
|
||
- Invalidar automáticamente si el deal fue re-scrapeado post-pre-screening
|
||
|
||
**Esfuerzo**: ~1h.
|
||
**Done cuando**: card muestra "Pre-screening generado hace 2h" + botón Re-run visible.
|
||
|
||
---
|
||
|
||
## Cómo trabajar este backlog
|
||
|
||
1. Cuando arranques nueva sesión, leé este archivo + `PHASE_35_PLAN.md`
|
||
2. Si Phase 3.5 está en curso, prioridad es esa
|
||
3. Si Phase 3.5 está bloqueada o terminada, agarrá item P1/P2 de acá
|
||
4. Marcar como ✅ acá cuando se completa + linkear commit hash
|
||
5. Mover a tabla "Done" al final del archivo
|
||
|
||
## Done (historial)
|
||
|
||
_(vacío — agregar conforme completemos items)_
|