Prompt file imported from YehuditHub/apartment-billing (
.github/prompts/plan-apartmentBilling.prompt.md). Copyright stays with the author.
Plan: אפליקציית ניהול חיובים לדירות עם Excel גנרי
נבנה אפליקציית Streamlit מקומית בקובץ Python אחד, עם שמירה ל-Excel יחיד (data.xlsx) במבנה Append-Only, כולל גיליון מרכזי לכל ישות עסקית וגם גיליון נפרד לכל דירה לצורך ניידות עתידית למערכות אחרות. ה-UI יכוון ל-3 זרימות מרכזיות: הגדרות, עדכון תעריפים/חיובים קבועים, ועדכון חודשי עם חישוב מים והפקת חשבונות.
✅ סטטוס ביצוע
בוצע:
-
✅ Phase 1 - תשתית קובץ והרשאות נתונים (הושלם)
- יצירת app.py עם מבנה מלא
- אתחול data.xlsx עם כל הגיליונות
- מנגנון יצירת גיליון לכל דירה
- סכמות עמודות בעברית
- פונקציות Append-Only
-
✅ Phase 2 - מודל עסקי וכללי ולידציה (הושלם)
- מודל דירות מלא
- ולידציה של תפקידי דירות
- ולידציית קריאות ותעריפים
-
✅ Phase 3 - לוגיקה עסקית מלאה (הושלם)
- חישוב תעריף לפי תאריך
- חישוב צריכה
- לוגיקת מים מיוחדת
- דירה ראשית
- חיובים קבועים וחיובים לפי דירה
- generator לחשבון חודשי
-
✅ Phase 4 - UI לפי הזרימה (הושלם)
- עמוד הגדרות
- עמוד תעריפים וחיובים
- עמוד עדכון חודשי
- עמוד חשבונות והיסטוריה
- עמוד תצוגת דירה
-
✅ Phase 5 - מבנה גיליון לכל דירה (הושלם)
- גיליון דירה עם סכמה אחידה
- רשומות קריאות מונים
- רשומות חיובים
- רשומת סיכום חודשי
-
✅ Phase 6 - בדיקות ואימות (הושלם)
- יצירת מסמך בדיקות מפורט (TESTING.md)
- רשימת בדיקות מקיפה
- הוראות הפעלה (README.md)
- תיעוד מערכת
קבצים שנוצרו:
- ✅
app.py- אפליקציית Streamlit מלאה עם הערות בעברית (1,012 שורות) - ✅
requirements.txt- תלויות הפרויקט - ✅
README.md- מדריך שימוש מפורט והוראות הפעלה - ✅
INSTALL.md- הוראות התקנה והפעלה מהירה - ✅
TESTING.md- מסמך בדיקות מקיף עם 13 בדיקות מפורטות - ✅
TECHNICAL_NOTES.md- הסברים מפורטים על כל פונקציה ראשית בקוד - ✅
.gitignore- הגנה על קובץ הנתונים - ⏳
data.xlsx- ייווצר אוטומטית בהרצה ראשונה
שגיאות שתוקנו:
- ✅ תוקנה שגיאת indentation בפונקציה
get_tariff_by_date()(שורה 361) - ✅ כל השגיאות הסינטקטיות תוקנו - הקוד מוכן להרצה
הוראות הפעלה:
# 1. התקנת תלויות
pip install -r requirements.txt
# 2. הרצת האפליקציה
streamlit run app.py
# 3. פתיחת הדפדפן בכתובת
http://localhost:8501
Steps
-
Phase 1 - תשתית קובץ והרשאות נתונים.
-
יצירת אפליקציה בקובץ יחיד עם חלוקה פנימית: סכמות, שירותי Excel, לוגיקה עסקית, עמודי UI, router.
-
אתחול
data.xlsxעם הגיליונות הנדרשים: דירות, קריאות מונים, תעריפים, חיובים קבועים, חיובים לפי דירה, חשבונות. -
הוספת מנגנון יצירת גיליון לכל דירה בעת יצירה, ובנוסף יצירת גיליון חדש בכל שינוי שם/תיאור דירה (פורמט מזהה+שם, לדוגמה
001_רוטשילד). בעת יצירת גיליון חדש מועתקת אוטומטית קריאת המונה האחרונה מהגיליון הקודם כרשומת פתיחה לחישוב הבא. -
הגדרת סכמות עמודות בעברית בלבד לכל הגיליונות המרכזיים + סכמת גיליון דירה.
-
בניית פונקציות Append-Only בלבד: קריאה, סינון, הוספת שורות; ללא עדכון מקום (in-place) לרשומות היסטוריות.
-
Phase 2 - מודל עסקי וכללי ולידציה.
-
מודל דירות גנרי בשליטת משתמש: שם/תיאור דירה, סימון דירת בעלים, סימון דירה ראשית (ללא מונה נפרד), סטטוס מונים.
-
ולידציה של תפקידי דירות: בדיוק דירת בעלים אחת ובדיוק דירה ראשית אחת.
-
ולידציית קריאות: איתור קריאה קודמת, חישוב צריכה חודשית, טיפול בהיעדר קריאה קודמת, מניעת כפילויות תאריך/מונה/דירה.
-
ולידציית תעריפים וחיובים: תוקף תעריף לפי תאריך, סכומים לא שליליים, טווחי תוקף תקינים.
-
Phase 3 - לוגיקה עסקית מלאה (תלוית Phases 1-2).
-
מימוש
tariff by date: בחירת התעריף האחרון התקף לתאריך סוף חודש חיוב. -
מימוש חישוב צריכה לפי מונה: current - previous לכל סוג מונה.
-
מימוש לוגיקת מים מיוחדת:
-
owner_cost = owner_usage * low_tariff. -
remaining_payment = total_payment - owner_cost. -
remaining_usage = total_usage - owner_usage. -
other_tariff = remaining_payment / remaining_usageעם הגנות לחלוקה באפס. -
מימוש דירה ראשית:
main_usage = total_usage - sum(other_apartments_usage)עבור מים בלבד, כולל התראה אם יוצא שלילי. -
מימוש חיובים קבועים גלובליים לפי טווח תאריכים.
-
מימוש חיובים לפי דירה:
-
חיוב חד-פעמי לדירה (למשל חוב ישן).
-
חיוב קבוע לדירה ספציפית לפי טווח (למשל ארנונה גבוהה יותר לדירה גדולה).
-
מימוש generator לחשבון חודשי פר דירה: שימושים + תעריפים + מים מיוחדים + חיובים קבועים גלובליים + חיובים ייעודיים לדירה.
-
שמירת snapshot לחשבון בגיליון חשבונות, ובנוסף append לשורת סיכום בגיליון הדירה.
-
Phase 4 - UI לפי הזרימה שביקשת.
-
Sidebar עם כפתורים:
-
הגדרות: ניהול דירות, שמות/תיאורים, סימון דירת בעלים ודירה ראשית.
-
תעריפים וחיובים קבועים: הוספת/עדכון תעריפים והוספת חיובים קבועים עם שם חיוב.
-
עדכון חודשי: הזנת קריאות מונה חודשיות, הזנת סכום חשבון מים כולל ותעריף נמוך לבעלים, חישוב אוטומטי והצגת תוצאה.
-
חשבונות והיסטוריה: טבלת חשבונות חודשיים כולל חיובים קבועים וחיובים לפי דירה.
-
עמוד/תצוגת דירה: בחירת דירה והצגת נתוני גיליון הדירה.
-
Phase 5 - מבנה גיליון לכל דירה (Export-friendly).
-
כל גיליון דירה יכיל שורות Append-Only עם שדות עבריים אחידים:
-
מזהה רשומה, דירה מזהה, חודש חיוב, שנת חיוב, סוג רשומה (מונה/חיוב/סיכום), סוג מונה, קריאה קודמת, קריאה נוכחית, צריכה, תעריף, סכום, תיאור, תאריך יצירה.
-
בכל עדכון חודשי, נרשמות בגיליון הדירה:
-
שורת קריאת מים/חשמל (אם קיימת),
-
שורות חיובים נוספים (חד פעמי/קבוע),
-
שורת סיכום חיוב חודשי.
-
שינוי שם/תיאור דירה יוצר גיליון דירה חדש (לייצוא היסטורי ברור), ומעתיק אליו את הקריאה האחרונה מכל מונה רלוונטי כרשומת פתיחה כדי לשמור רציפות חישוב.
-
Phase 6 - בדיקות ואימות.
-
בדיקת זרימה מלאה: יצירת דירות, תעריפים, חיובים קבועים, קריאות חודשיות, הפקת חשבונות.
-
אימות שקיפות: סכום חיובי מים בדירות שווה לחשבון המים הכולל (בכפוף לעיגול).
-
אימות היסטוריה: שינוי תעריף בעתיד לא משנה חשבונות עבר.
-
אימות דפי דירה: לכל דירה קיים גיליון ייעודי עם סיכום חיובים, קריאות מונים, ופירוט חיובים נוספים.
Relevant files
- app.py — קובץ ריצה יחיד של Streamlit (UI + לוגיקה + Excel I/O).
- data.xlsx — מסד הנתונים המקומי בגיליונות מרכזיים + גיליונות דירה.
Verification
- להריץ Streamlit ולאשר שכל כפתורי הסיידבר עובדים ושומרים נתונים.
- להוסיף שתי דירות לפחות, לסמן בעלים וראשית, ולאשר חוקיות ההגדרות.
- להזין קריאות חודשיות ולהשוות חישובי צריכה מול קריאה קודמת.
- להזין חשבון מים כולל + low tariff ולאשר תמחור בעלים/אחרים לפי הנוסחה.
- להוסיף חיוב חד-פעמי לדירה וחיוב קבוע לדירה אחרת ולאשר הכללה בחשבון החודשי.
- לאשר הופעת חיובים קבועים גם בתצוגה החודשית וגם בחשבונות.
- לפתוח את Excel ולאשר קיום גיליון לכל דירה עם נתוני מונים וחיובים.
Decisions
- חשמל מחושב בתעריף רגיל לפי צריכה (ללא לוגיקת חלוקה מיוחדת).
- חישוב דירה ראשית חל על מים בלבד.
- שינוי תעריף בתוך חודש: נלקח תעריף סוף חודש.
- גיליון דירה ייקרא בפורמט מזהה+שם (לדוגמה
001_רוטשילד); בשינוי שם/תיאור תיווצר לשונית חדשה לדירה, עם העתקת קריאה אחרונה כבסיס לחישובים הבאים. - גיליון דירה יכלול: סיכום חיובים חודשי, קריאות מונים, ופירוט חיובים נוספים (חד פעמי/קבוע).
Further Considerations
- מדיניות עיגול: עיגול ל-2 ספרות ושורת התאמה אוטומטית אם נוצר הפרש אגורות.
- מומלץ מזהים מסוג UUID לרשומות append-only כדי למנוע התנגשויות עתידיות.
- הרחבה עתידית אפשרית: יצוא PDF לחשבון דירה לאחר ייצוב גרסה ראשונה.