HH/templates/physicians/doctor_rating_fetch.html
2026-04-09 13:46:34 +03:00

222 lines
10 KiB
HTML

{% extends "layouts/base.html" %}
{% load i18n %}
{% load static %}
{% block title %}{% trans "Fetch Doctor Ratings from HIS" %} - PX360{% endblock %}
{% block extra_css %}
<style>
.field-label {
font-size: 10px;
font-weight: 700;
text-transform: uppercase;
letter-spacing: 0.05em;
color: #64748b;
}
</style>
{% endblock %}
{% block content %}
<div class="p-8">
<!-- Header -->
<header class="mb-8">
<div class="flex items-center justify-between">
<div>
<h1 class="text-2xl font-bold text-navy flex items-center gap-3">
<div class="w-10 h-10 bg-blue-100 rounded-xl flex items-center justify-center">
<i data-lucide="cloud-download" class="w-5 h-5 text-blue-600"></i>
</div>
{% trans "Fetch Doctor Ratings from HIS" %}
</h1>
<p class="text-slate mt-2 text-sm">{% trans "Fetch doctor ratings directly from HIS API by date range" %}</p>
</div>
<div class="flex items-center gap-3">
<a href="{% url 'physicians:doctor_rating_import' %}"
class="px-5 py-2.5 border border-slate-200 text-slate rounded-xl font-semibold hover:bg-slate-50 hover:border-slate-300 transition flex items-center gap-2">
<i data-lucide="upload" class="w-4 h-4"></i>
{% trans "CSV Import" %}
</a>
<a href="{% url 'physicians:doctor_rating_job_list' %}"
class="px-5 py-2.5 border border-slate-200 text-slate rounded-xl font-semibold hover:bg-slate-50 hover:border-slate-300 transition flex items-center gap-2">
<i data-lucide="clock" class="w-4 h-4"></i>
{% trans "Import History" %}
</a>
</div>
</div>
</header>
<div class="grid grid-cols-1 lg:grid-cols-3 gap-6">
<!-- Instructions & Form -->
<div class="lg:col-span-2 space-y-6">
<!-- Instructions Card -->
<section class="bg-white rounded-2xl shadow-sm border border-slate-100">
<div class="p-6 border-b border-slate-200">
<h3 class="text-lg font-bold text-navy flex items-center gap-2">
<i data-lucide="info" class="w-5 h-5 text-blue"></i>
{% trans "How It Works" %}
</h3>
</div>
<div class="p-6">
<div class="grid grid-cols-1 md:grid-cols-2 gap-6">
<div>
<h4 class="font-bold text-navy mb-3">{% trans "Fetch Process:" %}</h4>
<p class="text-slate text-sm mb-3">
{% trans "Ratings are fetched from the HIS FetchDoctorRatingMAPI endpoint for the selected date range." %}
</p>
<ul class="space-y-2">
<li class="flex items-start gap-2 text-sm text-slate">
<i data-lucide="check-circle" class="w-4 h-4 text-green-600 mt-0.5 flex-shrink-0"></i>
{% trans "Select a date range and submit" %}
</li>
<li class="flex items-start gap-2 text-sm text-slate">
<i data-lucide="check-circle" class="w-4 h-4 text-green-600 mt-0.5 flex-shrink-0"></i>
{% trans "A background job fetches and processes ratings" %}
</li>
<li class="flex items-start gap-2 text-sm text-slate">
<i data-lucide="check-circle" class="w-4 h-4 text-green-600 mt-0.5 flex-shrink-0"></i>
{% trans "Track progress on the job status page" %}
</li>
</ul>
</div>
<div>
<h4 class="font-bold text-navy mb-3">{% trans "HIS Response Fields:" %}</h4>
<ul class="space-y-2">
<li class="flex items-start gap-2 text-sm text-slate">
<i data-lucide="asterisk" class="w-4 h-4 text-red-600 mt-0.5 flex-shrink-0"></i>
<span><strong class="text-navy">DoctorID</strong> / <strong class="text-navy">DoctorName</strong></span>
</li>
<li class="flex items-start gap-2 text-sm text-slate">
<i data-lucide="asterisk" class="w-4 h-4 text-red-600 mt-0.5 flex-shrink-0"></i>
<span><strong class="text-navy">HospitalName</strong> - {% trans "Matched to PX360 hospital" %}</span>
</li>
<li class="flex items-start gap-2 text-sm text-slate">
<i data-lucide="asterisk" class="w-4 h-4 text-red-600 mt-0.5 flex-shrink-0"></i>
<span><strong class="text-navy">Rating</strong> - {% trans "1-5 rating value" %}</span>
</li>
<li class="flex items-start gap-2 text-sm text-slate">
<i data-lucide="circle" class="w-4 h-4 text-slate-400 mt-0.5 flex-shrink-0"></i>
<span><strong class="text-navy">RatingDate, Department</strong> - {% trans "Optional" %}</span>
</li>
</ul>
</div>
</div>
</div>
</section>
<!-- Fetch Form -->
<section class="bg-white rounded-2xl shadow-sm border border-slate-100">
<div class="p-6 border-b border-slate-200">
<h3 class="text-lg font-bold text-navy">{% trans "Select Date Range" %}</h3>
</div>
<div class="p-6">
<form method="post" class="space-y-6" data-loading data-loading-text="{% trans 'Fetching...' %}">
{% csrf_token %}
{{ form.hospital }}
<div class="grid grid-cols-1 md:grid-cols-2 gap-6">
<div>
<label for="{{ form.from_date.id_for_label }}" class="field-label block mb-2">
{% trans "From Date" %} <span class="text-red-600">*</span>
</label>
{{ form.from_date }}
{% if form.from_date.errors %}
<div class="text-red-600 text-sm mt-1">{{ form.from_date.errors.0 }}</div>
{% endif %}
<p class="text-slate text-xs mt-1">{% trans "Start date for fetching ratings" %}</p>
</div>
<div>
<label for="{{ form.to_date.id_for_label }}" class="field-label block mb-2">
{% trans "To Date" %} <span class="text-red-600">*</span>
</label>
{{ form.to_date }}
{% if form.to_date.errors %}
<div class="text-red-600 text-sm mt-1">{{ form.to_date.errors.0 }}</div>
{% endif %}
<p class="text-slate text-xs mt-1">{% trans "End date for fetching ratings" %}</p>
</div>
</div>
{% if form.non_field_errors %}
<div class="bg-red-50 border border-red-200 rounded-xl p-4">
{% for error in form.non_field_errors %}
<p class="text-red-600 text-sm">{{ error }}</p>
{% endfor %}
</div>
{% endif %}
<div class="flex items-center gap-3 pt-4 border-t border-slate-200">
<button type="submit" class="px-6 py-2.5 bg-navy text-white rounded-xl font-semibold shadow-md hover:bg-blue transition flex items-center gap-2">
<i data-lucide="cloud-download" class="w-4 h-4"></i>
{% trans "Fetch Ratings" %}
</button>
<a href="{% url 'physicians:physician_list' %}" class="px-6 py-2.5 border border-slate-200 text-slate rounded-xl font-semibold hover:bg-slate-50 hover:border-slate-300 transition flex items-center gap-2">
<i data-lucide="x-circle" class="w-4 h-4"></i>
{% trans "Cancel" %}
</a>
</div>
</form>
</div>
</section>
</div>
<!-- Sidebar -->
<div class="lg:col-span-1">
<section class="bg-white rounded-2xl shadow-sm border border-slate-100 sticky top-8">
<div class="p-6 border-b border-slate-200">
<h3 class="text-lg font-bold text-navy flex items-center gap-2">
<i data-lucide="zap" class="w-5 h-5 text-yellow-600"></i>
{% trans "About HIS Fetch" %}
</h3>
</div>
<div class="p-6">
<p class="text-slate text-sm mb-4">
{% trans "This fetches ratings directly from the HIS system via the FetchDoctorRatingMAPI API endpoint." %}
</p>
<div class="bg-slate-900 text-white p-4 rounded-xl font-mono text-sm space-y-2 mb-4">
<div class="text-slate-400 text-xs">{% trans "# HIS API Endpoint" %}</div>
<div class="text-green-400 break-all">GET ?FromDate=...&ToDate=...</div>
</div>
<p class="text-slate text-sm">
<i data-lucide="info" class="w-4 h-4 inline mr-1 text-blue"></i>
{% trans "The monthly scheduled task uses the same process." %}
</p>
</div>
<!-- Quick Tips -->
<div class="p-6 border-t border-slate-200">
<h4 class="font-bold text-navy mb-3 flex items-center gap-2">
<i data-lucide="lightbulb" class="w-4 h-4 text-yellow-600"></i>
{% trans "Quick Tips" %}
</h4>
<ul class="space-y-3">
<li class="flex items-start gap-2 text-sm text-slate">
<i data-lucide="check" class="w-4 h-4 text-green-600 mt-0.5 flex-shrink-0"></i>
{% trans "Use narrow date ranges for faster results" %}
</li>
<li class="flex items-start gap-2 text-sm text-slate">
<i data-lucide="check" class="w-4 h-4 text-green-600 mt-0.5 flex-shrink-0"></i>
{% trans "Hospitals are matched by name from HIS data" %}
</li>
<li class="flex items-start gap-2 text-sm text-slate">
<i data-lucide="check" class="w-4 h-4 text-green-600 mt-0.5 flex-shrink-0"></i>
{% trans "Duplicate ratings for same doctor/date are skipped" %}
</li>
<li class="flex items-start gap-2 text-sm text-slate">
<i data-lucide="check" class="w-4 h-4 text-green-600 mt-0.5 flex-shrink-0"></i>
{% trans "Job runs in background — you can leave the page" %}
</li>
</ul>
</div>
</section>
</div>
</div>
</div>
{% endblock %}
{% block extra_js %}
<script>
lucide.createIcons();
</script>
{% endblock %}