- 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>
213 lines
7.8 KiB
Markdown
213 lines
7.8 KiB
Markdown
# 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
|
|
```sql
|
|
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ă
|
|
1. Admin rulează `python indexer.py --full`
|
|
2. Scriptul scanează toate fișierele din directoare
|
|
3. Extrage activități folosind parsere specializate
|
|
4. Salvează în baza de date cu progress feedback
|
|
5. Creează indexul full-text pentru căutare rapidă
|
|
|
|
#### 6.2 Căutare Activități
|
|
1. Utilizatorul accesează http://localhost:5000
|
|
2. Setează filtre din dropdown-uri (opțional)
|
|
3. Introduce termeni în search box (opțional)
|
|
4. Apasă "Aplică" sau Enter
|
|
5. Vezi rezultatele în tabel
|
|
6. Click pe titlu pentru a vedea fișierul sursă
|
|
|
|
#### 6.3 Generare Fișă
|
|
1. Din rezultate, click "Generează fișă" la o activitate
|
|
2. Sistemul creează fișă HTML cu template predefinit
|
|
3. Algoritm găsește 3-5 activități similare
|
|
4. Afișează fișa completă în pagină nouă
|
|
5. 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:**
|
|
1. ✅ Indexer poate procesa toate tipurile de fișiere fără erori
|
|
2. ✅ Interfața web arată identic cu mockup-ul
|
|
3. ✅ Căutarea returnează rezultate relevante rapid
|
|
4. ✅ Fișele generate sunt complete și utile
|
|
5. ✅ Sistemul poate fi rulat local fără configurare complexă
|
|
6. ✅ 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] |