- Create organized directory structure (src/, docs/, data/, static/, templates/) - Add comprehensive .gitignore for Python projects - Move Python source files to src/ - Move documentation files to docs/ with project/ and user/ subdirectories - Move database files to data/ - Update all database path references in Python code - Maintain Flask static/ and templates/ directories 🤖 Generated with [Claude Code](https://claude.ai/code) Co-Authored-By: Claude <noreply@anthropic.com>
7.8 KiB
7.8 KiB
Product Requirements Document (PRD)
Sistem de Indexare și Căutare Activități Educaționale
1. OVERVIEW
Nume Produs: INDEX-SISTEM-JOCURI
Versiune: 1.0
Data: Septembrie 2025
Obiectiv: Sistem web simplu pentru indexarea, căutarea și generarea de fișe pentru activități educaționale din diverse formate de fișiere.
2. PROBLEMA ȘI SOLUȚIA
Problema:
- Activități educaționale stocate în ~100+ fișiere de tipuri diferite (PDF, DOC, HTML, MD, TXT)
- Căutarea manuală prin fișiere este ineficientă
- Lipsește o modalitate rapidă de a genera fișe de activități
Soluția:
- Sistem de indexare automată multi-format
- Interfață web cu filtre avansate pentru căutare
- Generator de fișe HTML fără dependințe LLM
3. CERINȚE FUNCȚIONALE
3.1 Indexare Activități
- RF1: Extragerea automată de activități din fișiere PDF, DOC/DOCX, HTML, MD, TXT
- RF2: Detectarea automată a parametrilor: titlu, descriere, vârstă, durată, materiale, participanți
- RF3: Indexare inițială batch pentru toate fișierele existente
- RF4: Indexare incrementală pentru fișiere noi/modificate
- RF5: Progress tracking pentru procesul de indexare
3.2 Interfață Web de Căutare
- RF6: Layout identic cu mockup-ul furnizat (interfata-web.jpg)
- RF7: Search box pentru căutare text liberă
- RF8: 9 filtre dropdown:
- Valori (categorie)
- Durată (5-15min, 15-30min, 30+min)
- Tematică (cercetășesc, team building, educativ)
- Domeniu (sport, artă, știință)
- Metodă (joc, poveste, atelier)
- Materiale necesare (fără, simple, complexe)
- Competențe (fizice, mentale, sociale)
- Număr participanți (2-5, 5-10, 10-30, 30+)
- Vârstă (5-8, 8-12, 12-16, 16+)
- RF9: Butoane "Aplică" și "Resetează"
- RF10: Afișare rezultate în tabel cu coloane: Titlu, Detalii, Metodă, Temă, Valori
- RF11: Link către fișierul sursă pentru fiecare rezultat
3.3 Generator Fișe Activități
- RF12: Buton "Generează fișă" pentru fiecare activitate
- RF13: Template HTML predefinit pentru fișe
- RF14: Algoritm de recomandări bazat pe similaritate (tags, categorie, vârstă)
- RF15: Fișa să conțină:
- Informații complete activitate
- Instrucțiuni pas cu pas
- Lista materiale cu checklist
- 3-5 activități similare recomandate
- RF16: Export fișă ca HTML printabil
- RF17: Funcție de copiere conținut fișă
4. CERINȚE NON-FUNCȚIONALE
4.1 Performance
- NFR1: Căutarea să returneze rezultate în <2 secunde
- NFR2: Indexarea să proceseze 100+ fișiere în <10 minute
- NFR3: Interfața să fie responsivă pe desktop/tablet
4.2 Usability
- NFR4: Interfață simplă, intuitivă, fără învățare necesară
- NFR5: Feedback vizual pentru toate acțiunile (loading, success, errors)
- NFR6: Mesaje de eroare clare și acționabile
4.3 Maintainability
- NFR7: Cod Python simplu, well-documented, <500 linii total
- NFR8: Dependințe minime (Flask + biblioteci standard)
- NFR9: Baza de date SQLite simplă, fără migrări complexe
5. ARHITECTURA TEHNICĂ
5.1 Stack Tehnologic
- Backend: Python 3.8+, Flask
- Frontend: HTML5, CSS3, JavaScript vanilla
- Database: SQLite
- Libraries: PyPDF2, python-docx, BeautifulSoup4, markdown
5.2 Structura Fișiere
INDEX-SISTEM-JOCURI/
├── app.py # Flask server principal (~200 linii)
├── indexer.py # Script indexare multi-format (~150 linii)
├── database.py # Helper SQLite (~50 linii)
├── templates/
│ ├── index.html # Pagina căutare (~100 linii)
│ ├── results.html # Afișare rezultate (~50 linii)
│ └── fisa.html # Template fișă activitate (~50 linii)
├── static/
│ └── style.css # CSS minimal (~50 linii)
├── activities.db # Baza de date SQLite
├── PRD.md # Acest document
└── PM_PROMPT.md # Prompt pentru project manager
5.3 Schema Baza de Date
CREATE TABLE activities (
id INTEGER PRIMARY KEY,
title TEXT NOT NULL,
description TEXT,
file_path TEXT NOT NULL,
file_type TEXT, -- pdf, doc, html, md, txt
page_number INTEGER,
tags TEXT, -- JSON array cu tags
category TEXT,
age_group TEXT,
participants TEXT,
duration TEXT,
materials TEXT,
difficulty TEXT DEFAULT 'mediu',
source_text TEXT, -- full text pentru căutare FTS
created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP
);
CREATE VIRTUAL TABLE activities_fts USING fts5(
title, description, source_text,
content='activities'
);
6. FLUXUL UTILIZATORULUI
6.1 Indexare Inițială
- Admin rulează
python indexer.py --full - Scriptul scanează toate fișierele din directoare
- Extrage activități folosind parsere specializate
- Salvează în baza de date cu progress feedback
- Creează indexul full-text pentru căutare rapidă
6.2 Căutare Activități
- Utilizatorul accesează http://localhost:5000
- Setează filtre din dropdown-uri (opțional)
- Introduce termeni în search box (opțional)
- Apasă "Aplică" sau Enter
- Vezi rezultatele în tabel
- Click pe titlu pentru a vedea fișierul sursă
6.3 Generare Fișă
- Din rezultate, click "Generează fișă" la o activitate
- Sistemul creează fișă HTML cu template predefinit
- Algoritm găsește 3-5 activități similare
- Afișează fișa completă în pagină nouă
- Opțiune printare sau copiere conținut
7. CRITERII DE ACCEPTANȚĂ
7.1 MVP (Minimum Viable Product)
- ✅ Indexează activități din PDF, DOC, HTML, MD, TXT
- ✅ Interfață web cu search și 9 filtre
- ✅ Afișare rezultate cu link la sursă
- ✅ Generare fișe HTML simple
7.2 Success Metrics
- Indexează >90% din activitățile existente corect
- Timpul de căutare <2 secunde pentru orice query
- Interfața funcționează pe Chrome, Firefox, Safari
- Fișele generate sunt printabile și utile
8. RISCURI ȘI MITIGĂRI
| Risc | Probabilitate | Impact | Mitigare |
|---|---|---|---|
| Parsarea PDF-urilor eșuează | Medie | Mare | Folosire PyPDF2 + pdfplumber ca backup |
| Detectarea automată parametri inexactă | Mare | Medie | Pattern-uri regex + validare manuală opțională |
| Performance slab la căutare | Mică | Mare | Index FTS SQLite + limitare rezultate |
| Interfața nu seamănă cu mockup | Mică | Mică | Review iterativ cu feedback vizual |
9. TIMELINE ESTIMAT
| Fază | Durata | Deliverables |
|---|---|---|
| Sprint 1 | 2-3 zile | Indexer funcțional pentru toate formatele |
| Sprint 2 | 2-3 zile | Interfață web cu căutare și filtre |
| Sprint 3 | 1-2 zile | Generator fișe HTML cu recomandări |
| Sprint 4 | 1 zi | Testing, bug fixes, documentație |
Total: 6-9 zile lucru
10. DEPENDENCIES
10.1 Externe
- Python 3.8+ instalat
- Acces la fișierele existente în
/mnt/d/GoogleDrive/Cercetasi/carti-camp-jocuri/ - Browser modern pentru testare
10.2 Interne
- Baza de date SQLite existentă (
game_library.db) ca referință - Mockup interfață (
interfata-web.jpg) pentru design - Colecția existentă de activități ca date de test
11. SUCCESS CRITERIA
Produs finalizat când:
- ✅ Indexer poate procesa toate tipurile de fișiere fără erori
- ✅ Interfața web arată identic cu mockup-ul
- ✅ Căutarea returnează rezultate relevante rapid
- ✅ Fișele generate sunt complete și utile
- ✅ Sistemul poate fi rulat local fără configurare complexă
- ✅ Documentația permite unei terțe părți să înțeleagă și să folosească sistemul
Autor: Claude AI Assistant
Review: [To be completed by stakeholders]
Approval: [To be completed by product owner]