Spaces:
Sleeping
Sleeping
import gradio as gr | |
from datetime import datetime, timedelta | |
# Hàm tính thời hiệu khởi kiện | |
def calculate_statute_of_limitations(start_date, case_type): | |
if not start_date or not case_type: | |
return "Vui lòng nhập đầy đủ thông tin" | |
try: | |
start = datetime.strptime(start_date, "%Y-%m-%d") | |
# Thời hiệu theo BLDS 2015 | |
time_limits = { | |
"Tranh chấp hợp đồng": 3, | |
"Bồi thường thiệt hại": 3, | |
"Tranh chấp đất đai": 3, | |
"Thừa kế - chia di sản (BĐS)": 30, | |
"Thừa kế - chia di sản (ĐS)": 10, | |
"Xác nhận quyền thừa kế": 10, | |
"Tuyên bố giao dịch vô hiệu": 2 | |
} | |
years = time_limits.get(case_type, 3) | |
end_date = start + timedelta(days=years*365) | |
today = datetime.now() | |
if today > end_date: | |
return f""" | |
⚠️ **ĐÃ HẾT THỜI HIỆU** | |
📅 **Thời hiệu hết hạn:** {end_date.strftime('%d/%m/%Y')} | |
⏰ **Thời gian:** {years} năm | |
📋 **Căn cứ pháp lý:** {get_legal_basis(case_type)} | |
⚖️ **Lưu ý:** Tòa án chỉ áp dụng thời hiệu theo yêu cầu của đương sự (Điều 149 BLDS 2015) | |
""" | |
else: | |
days_left = (end_date - today).days | |
return f""" | |
✅ **CÒN THỜI HIỆU** | |
📅 **Thời hiệu hết hạn:** {end_date.strftime('%d/%m/%Y')} | |
⏰ **Còn lại:** {days_left} ngày ({years} năm từ ngày phát sinh) | |
📋 **Căn cứ pháp lý:** {get_legal_basis(case_type)} | |
⚖️ **Lưu ý:** Thời hiệu được tính từ ngày biết hoặc phải biết quyền bị xâm phạm (Điều 154 BLDS 2015) | |
""" | |
except: | |
return "Lỗi: Vui lòng nhập đúng định dạng ngày" | |
def get_legal_basis(case_type): | |
legal_basis = { | |
"Tranh chấp hợp đồng": "Điều 429 BLDS 2015", | |
"Bồi thường thiệt hại": "Điều 588 BLDS 2015", | |
"Tranh chấp đất đai": "Điều 154 BLDS 2015", | |
"Thừa kế - chia di sản (BĐS)": "Điều 623 BLDS 2015", | |
"Thừa kế - chia di sản (ĐS)": "Điều 623 BLDS 2015", | |
"Xác nhận quyền thừa kế": "Điều 623 BLDS 2015", | |
"Tuyên bố giao dịch vô hiệu": "Điều 132 BLDS 2015" | |
} | |
return legal_basis.get(case_type, "Điều 154 BLDS 2015") | |
# Hàm tính án phí | |
def calculate_court_fee(asset_value): | |
if not asset_value or asset_value <= 0: | |
return "Vui lòng nhập giá trị tài sản hợp lệ" | |
# Theo Nghị quyết 326/2016/UBTVQH14 | |
if asset_value <= 6000000: | |
fee = 300000 | |
elif asset_value <= 400000000: | |
fee = asset_value * 0.05 | |
elif asset_value <= 800000000: | |
fee = 20000000 + (asset_value - 400000000) * 0.04 | |
elif asset_value <= 2000000000: | |
fee = 36000000 + (asset_value - 800000000) * 0.03 | |
elif asset_value <= 4000000000: | |
fee = 72000000 + (asset_value - 2000000000) * 0.02 | |
else: | |
fee = 112000000 + (asset_value - 4000000000) * 0.001 | |
advance_fee = fee * 0.5 # Tạm ứng 50% | |
return f""" | |
💰 **KẾT QUẢ TÍNH ÁN PHÍ** | |
📊 **Giá trị tài sản:** {asset_value:,.0f} VNĐ | |
⚖️ **Án phí:** {fee:,.0f} VNĐ | |
💳 **Tạm ứng án phí:** {advance_fee:,.0f} VNĐ | |
📋 **Căn cứ pháp lý:** Nghị quyết 326/2016/UBTVQH14 | |
📝 **Ghi chú:** Tạm ứng án phí bằng 50% mức án phí dự tính | |
""" | |
# Hàm tính lãi suất chậm trả | |
def calculate_late_interest(principal, interest_rate, days): | |
if not all([principal, interest_rate, days]) or any(x <= 0 for x in [principal, interest_rate, days]): | |
return "Vui lòng nhập đầy đủ thông tin hợp lệ" | |
if interest_rate > 20: | |
return "⚠️ Lãi suất không được vượt quá 20%/năm theo Điều 468 BLDS 2015" | |
# Tính lãi chậm trả | |
daily_rate = interest_rate / 100 / 365 | |
interest_amount = principal * daily_rate * days | |
total_amount = principal + interest_amount | |
return f""" | |
💰 **KẾT QUẢ TÍNH LÃI CHẬM TRẢ** | |
💵 **Số tiền gốc:** {principal:,.0f} VNĐ | |
📈 **Lãi suất:** {interest_rate}%/năm | |
📅 **Số ngày chậm trả:** {days} ngày | |
💸 **Tiền lãi chậm trả:** {interest_amount:,.0f} VNĐ | |
💰 **Tổng số tiền phải trả:** {total_amount:,.0f} VNĐ | |
📋 **Căn cứ pháp lý:** | |
- Điều 357 BLDS 2015: Trách nhiệm do chậm thực hiện nghĩa vụ trả tiền | |
- Điều 468 BLDS 2015: Lãi suất tối đa 20%/năm | |
📝 **Ghi chú:** Nếu không thỏa thuận lãi suất, áp dụng 10%/năm (50% mức giới hạn) | |
""" | |
# Hàm tính thù lao luật sư | |
def calculate_lawyer_fee(hourly_rate, hours): | |
if not all([hourly_rate, hours]) or any(x <= 0 for x in [hourly_rate, hours]): | |
return "Vui lòng nhập đầy đủ thông tin hợp lệ" | |
max_rate = 702000 # Mức tối đa theo quy định mới | |
if hourly_rate > max_rate: | |
return f"⚠️ Thù lao không được vượt quá {max_rate:,.0f} VNĐ/giờ theo quy định hiện hành" | |
total_fee = hourly_rate * hours | |
return f""" | |
💼 **KẾT QUẢ TÍNH THÙ LAO LUẬT SƯ** | |
💰 **Mức thù lao/giờ:** {hourly_rate:,.0f} VNĐ | |
⏰ **Số giờ làm việc:** {hours} giờ | |
💵 **Tổng thù lao:** {total_fee:,.0f} VNĐ | |
📋 **Căn cứ pháp lý:** Nghị định 73/2024/NĐ-CP | |
📝 **Ghi chú:** | |
- Mức lương cơ sở: 2.340.000 VNĐ/tháng (từ 01/7/2024) | |
- Thù lao tối đa: 702.000 VNĐ/giờ (0,3 lần mức lương cơ sở) | |
""" | |
# Tạo giao diện Gradio | |
with gr.Blocks( | |
title="Luật Sư Calculator - Công cụ tính toán pháp lý", | |
theme=gr.themes.Soft(), | |
css=""" | |
.main-header { | |
background: linear-gradient(135deg, #667eea 0%, #764ba2 100%); | |
color: white; | |
padding: 30px; | |
border-radius: 15px; | |
text-align: center; | |
margin-bottom: 20px; | |
} | |
.feature-card { | |
background: rgba(102, 126, 234, 0.1); | |
border-left: 4px solid #667eea; | |
padding: 15px; | |
margin: 10px 0; | |
border-radius: 8px; | |
} | |
.step-box { | |
background: rgba(255, 255, 255, 0.8); | |
border-radius: 8px; | |
padding: 15px; | |
margin: 10px 0; | |
border-left: 4px solid #667eea; | |
} | |
.footer { | |
text-align: center; | |
padding: 20px; | |
color: #666; | |
border-top: 1px solid #eee; | |
margin-top: 30px; | |
} | |
/* Dark theme support */ | |
.dark .main-header { | |
background: linear-gradient(135deg, #4a5568 0%, #2d3748 100%); | |
} | |
.dark .feature-card { | |
background: rgba(74, 85, 104, 0.3); | |
border-left-color: #90cdf4; | |
color: #e2e8f0; | |
} | |
.dark .step-box { | |
background: rgba(45, 55, 72, 0.8); | |
border-left-color: #90cdf4; | |
color: #e2e8f0; | |
} | |
.dark .footer { | |
color: #a0aec0; | |
border-top-color: #4a5568; | |
} | |
""" | |
) as app: | |
with gr.Column(): | |
gr.HTML(""" | |
<div class="main-header"> | |
<h1>⚖️ Luật Sư Calculator</h1> | |
<p>Công cụ tính toán pháp lý tổng hợp cho luật sư Việt Nam</p> | |
</div> | |
""") | |
with gr.Tabs(): | |
with gr.Tab("📖 Giới thiệu"): | |
gr.HTML(""" | |
<div style="padding: 20px;"> | |
<h2>🎯 Tại sao cần công cụ này?</h2> | |
<div class="feature-card"> | |
<h3>⏱️ Tiết kiệm thời gian:</h3> | |
<p>Không cần tra cứu và tính toán thủ công</p> | |
</div> | |
<div class="feature-card"> | |
<h3>✅ Tránh sai sót:</h3> | |
<p>Công thức được lập trình theo quy định pháp luật</p> | |
</div> | |
<div class="feature-card"> | |
<h3>⚡ Tư vấn chính xác:</h3> | |
<p>Cung cấp thông tin nhanh chóng cho khách hàng</p> | |
</div> | |
<div class="feature-card"> | |
<h3>📱 Miễn phí:</h3> | |
<p>Sử dụng mọi lúc, mọi nơi</p> | |
</div> | |
<h2>🛠️ Tính năng chính</h2> | |
<div style="display: grid; gap: 15px; grid-template-columns: repeat(auto-fit, minmax(250px, 1fr));"> | |
<div style="padding: 15px; background: rgba(40, 167, 69, 0.1); border-radius: 8px;"> | |
<h3>⏰ Tính thời hiệu khởi kiện</h3> | |
<p>Theo từng loại vụ án: hợp đồng, bất động sản, thừa kế...</p> | |
</div> | |
<div style="padding: 15px; background: rgba(255, 193, 7, 0.1); border-radius: 8px;"> | |
<h3>💰 Tính án phí dân sự</h3> | |
<p>Theo giá trị tài sản tranh chấp, bao gồm tạm ứng</p> | |
</div> | |
<div style="padding: 15px; background: rgba(220, 53, 69, 0.1); border-radius: 8px;"> | |
<h3>📈 Tính lãi suất chậm trả</h3> | |
<p>Theo quy định BLDS 2015, tối đa 20%/năm</p> | |
</div> | |
<div style="padding: 15px; background: rgba(111, 66, 193, 0.1); border-radius: 8px;"> | |
<h3>💼 Tính thù lao luật sư</h3> | |
<p>Theo giờ làm việc, tối đa 702.000 VNĐ/giờ</p> | |
</div> | |
</div> | |
</div> | |
""") | |
with gr.Tab("⏰ Thời hiệu khởi kiện"): | |
with gr.Row(): | |
with gr.Column(): | |
statute_date = gr.Textbox( | |
label="Ngày phát sinh quyền yêu cầu", | |
info="Định dạng: YYYY-MM-DD (ví dụ: 2024-01-01)", | |
placeholder="2024-01-01" | |
) | |
case_type = gr.Dropdown( | |
choices=[ | |
"Tranh chấp hợp đồng", | |
"Bồi thường thiệt hại", | |
"Tranh chấp đất đai", | |
"Thừa kế - chia di sản (BĐS)", | |
"Thừa kế - chia di sản (ĐS)", | |
"Xác nhận quyền thừa kế", | |
"Tuyên bố giao dịch vô hiệu" | |
], | |
label="Loại vụ án", | |
info="Chọn loại vụ án để áp dụng thời hiệu phù hợp" | |
) | |
statute_btn = gr.Button("Tính thời hiệu", variant="primary") | |
with gr.Column(): | |
statute_result = gr.Markdown(label="Kết quả") | |
statute_btn.click( | |
fn=calculate_statute_of_limitations, | |
inputs=[statute_date, case_type], | |
outputs=statute_result | |
) | |
with gr.Tab("💰 Án phí dân sự"): | |
with gr.Row(): | |
with gr.Column(): | |
asset_value = gr.Number( | |
label="Giá trị tài sản tranh chấp (VNĐ)", | |
info="Ví dụ: 500000000" | |
) | |
fee_btn = gr.Button("Tính án phí", variant="primary") | |
with gr.Column(): | |
fee_result = gr.Markdown(label="Kết quả") | |
fee_btn.click( | |
fn=calculate_court_fee, | |
inputs=asset_value, | |
outputs=fee_result | |
) | |
with gr.Tab("📈 Lãi suất chậm trả"): | |
with gr.Row(): | |
with gr.Column(): | |
principal = gr.Number( | |
label="Số tiền gốc (VNĐ)", | |
info="Ví dụ: 100000000" | |
) | |
interest_rate = gr.Number( | |
label="Lãi suất (%/năm)", | |
info="Tối đa 20%/năm, mặc định 10%/năm" | |
) | |
delay_days = gr.Number( | |
label="Số ngày chậm trả", | |
info="Ví dụ: 90" | |
) | |
interest_btn = gr.Button("Tính lãi chậm trả", variant="primary") | |
with gr.Column(): | |
interest_result = gr.Markdown(label="Kết quả") | |
interest_btn.click( | |
fn=calculate_late_interest, | |
inputs=[principal, interest_rate, delay_days], | |
outputs=interest_result | |
) | |
with gr.Tab("💼 Thù lao luật sư"): | |
with gr.Row(): | |
with gr.Column(): | |
hourly_rate = gr.Number( | |
label="Mức thù lao/giờ (VNĐ)", | |
info="Tối đa 702.000 VNĐ/giờ" | |
) | |
working_hours = gr.Number( | |
label="Số giờ làm việc", | |
info="Ví dụ: 20" | |
) | |
lawyer_btn = gr.Button("Tính thù lao", variant="primary") | |
with gr.Column(): | |
lawyer_result = gr.Markdown(label="Kết quả") | |
lawyer_btn.click( | |
fn=calculate_lawyer_fee, | |
inputs=[hourly_rate, working_hours], | |
outputs=lawyer_result | |
) | |
with gr.Tab("📖 Hướng dẫn"): | |
gr.HTML(""" | |
<div style="padding: 20px;"> | |
<h2>📋 Hướng dẫn sử dụng</h2> | |
<div style="display: grid; gap: 15px;"> | |
<div style="padding: 15px; border-left: 4px solid #007bff; background: rgba(0, 123, 255, 0.1);" class="step-box"> | |
<h3>Bước 1: Chọn tính năng</h3> | |
<p>Click vào tab tương ứng với tính năng bạn cần sử dụng</p> | |
</div> | |
<div style="padding: 15px; border-left: 4px solid #28a745; background: rgba(40, 167, 69, 0.1);" class="step-box"> | |
<h3>Bước 2: Nhập thông tin</h3> | |
<p>Điền đầy đủ các thông tin cần thiết vào form</p> | |
</div> | |
<div style="padding: 15px; border-left: 4px solid #ffc107; background: rgba(255, 193, 7, 0.1);" class="step-box"> | |
<h3>Bước 3: Tính toán</h3> | |
<p>Click nút tính toán để xem kết quả</p> | |
</div> | |
<div style="padding: 15px; border-left: 4px solid #6f42c1; background: rgba(111, 66, 193, 0.1);" class="step-box"> | |
<h3>Bước 4: Sử dụng kết quả</h3> | |
<p>Copy kết quả để sử dụng trong công việc</p> | |
</div> | |
</div> | |
<h2>❓ Câu hỏi thường gặp</h2> | |
<div style="margin: 20px 0;"> | |
<details class="step-box" style="margin: 10px 0; padding: 10px; cursor: pointer;"> | |
<summary style="font-weight: bold;">Kết quả có chính xác không?</summary> | |
<p style="margin: 10px 0;">Có, công cụ được lập trình dựa trên các quy định pháp luật hiện hành với căn cứ pháp lý cụ thể được ghi rõ trong mỗi kết quả tính toán.</p> | |
</details> | |
<details class="step-box" style="margin: 10px 0; padding: 10px; cursor: pointer;"> | |
<summary style="font-weight: bold;">Có cần đăng ký tài khoản?</summary> | |
<p style="margin: 10px 0;">Không, công cụ hoàn toàn miễn phí và không cần đăng ký.</p> | |
</details> | |
<details class="step-box" style="margin: 10px 0; padding: 10px; cursor: pointer;"> | |
<summary style="font-weight: bold;">Dữ liệu có được lưu trữ?</summary> | |
<p style="margin: 10px 0;">Không, tất cả tính toán được thực hiện trên server và không lưu trữ dữ liệu cá nhân.</p> | |
</details> | |
<details class="step-box" style="margin: 10px 0; padding: 10px; cursor: pointer;"> | |
<summary style="font-weight: bold;">Căn cứ pháp lý được cập nhật khi nào?</summary> | |
<p style="margin: 10px 0;">Công cụ được cập nhật theo các quy định pháp luật mới nhất. Hiện tại áp dụng BLDS 2015, Nghị quyết 326/2016/UBTVQH14 và Nghị định 73/2024/NĐ-CP.</p> | |
</details> | |
</div> | |
</div> | |
""") | |
gr.HTML(""" | |
<div class="footer"> | |
<p>© 2024 Luật Sư Calculator - Phát triển bởi AI Assistant cho cộng đồng luật sư Việt Nam</p> | |
<p>Căn cứ pháp lý: BLDS 2015 | Nghị quyết 326/2016/UBTVQH14 | Nghị định 73/2024/NĐ-CP</p> | |
</div> | |
""") | |
if __name__ == "__main__": | |
app.launch(server_name="0.0.0.0", server_port=7860) | |