#!/usr/bin/env python3
# -*- coding: utf-8 -*-
"""Presentasi proyeksi omzet The Skin Code Clinic sampai akhir 2026 (HTML → PDF).

Semua angka yang sudah ada dipakai apa adanya (GSC, GA4, profil bisnis). Angka yang belum ada
(rata-rata transaksi pasien) tidak saya karang: ditampilkan sebagai matriks pilihan.
"""
import os

WS = "/home/mantapman/.hermes/profiles/atun/workspace"
OUT = f"{WS}/drafts/proyeksi_omzet_tsc.html"

# --- angka nyata ---
GSC_28_KLIK, GSC_28_TAYANG, GSC_28_POS = 33, 1647, 6.4
GSC_90_KLIK, GSC_90_TAYANG, GSC_90_POS = 104, 6103, 7.0
GA4_SESI_28 = 51
KEJADIAN_KUNCI = 2
ULASAN_TSC, RATING_TSC = 131, "5,0"
ULASAN_PESAING = {"Alamanda Clinic Krian (ruko sama)": 858, "MS Glow Aesthetic Sidoarjo": 845,
                  "Erha Ultimate Sidoarjo": 729, "Klinik SKINVEST Sidoarjo": 715}

SESI_BULAN = round(GA4_SESI_28 * 30 / 28)          # sesi organik per bulan
KLIK_BULAN = round(GSC_28_KLIK * 30 / 28)
TAYANG_BULAN = round(GSC_28_TAYANG * 30 / 28)
LAJU_KEJADIAN = KEJADIAN_KUNCI / GA4_SESI_28         # yang terukur sekarang

BULAN = ["Oktober", "November", "Desember"]
SKENARIO_TRAFIK = [("Datar", 0.0), ("Realistis (+5%/bulan)", 0.05), ("Optimis (+15%/bulan)", 0.15)]
RASIO_KONTAK = [("Rendah 4% (setara kondisi terukur)", 0.04), ("Sedang 8%", 0.08), ("Tinggi 12%", 0.12)]
PASIEN_DARI_KONTAK = 0.40   # asumsi, ditulis terbuka
NILAI_TRANSAKSI = [250000, 500000, 1000000]


def seri(dasar, laju, n=3):
    return [round(dasar * ((1 + laju) ** i)) for i in range(n)]


trafik = {nama: seri(SESI_BULAN, laju) for nama, laju in SKENARIO_TRAFIK}

html = f"""<!DOCTYPE html>
<html lang="id"><head><meta charset="utf-8"><title>Proyeksi Omzet The Skin Code Clinic — s/d Desember 2026</title>
<style>
@page {{ size: A4; margin: 0; }}
* {{ box-sizing: border-box; }}
body {{ font-family: "Poppins","DejaVu Sans",sans-serif; margin:0; color:#0b1f3a; }}
.slide {{ width:210mm; height:297mm; padding:22mm 18mm; page-break-after:always; position:relative; }}
.slide:last-child {{ page-break-after:auto; }}
h1 {{ font-size:29pt; margin:0 0 6mm; line-height:1.15; }}
h2 {{ font-size:19pt; margin:0 0 5mm; }}
h3 {{ font-size:11pt; margin:6mm 0 2mm; color:#0f2557; text-transform:uppercase; letter-spacing:.06em; }}
p, li, td, th {{ font-size:10.5pt; line-height:1.5; }}
.eyebrow {{ font-size:10pt; letter-spacing:.18em; text-transform:uppercase; color:#2563eb; font-weight:600; }}
.rule {{ height:8px; background:#0f2557; width:70mm; margin:0 0 8mm; }}
table {{ width:100%; border-collapse:collapse; margin-top:3mm; }}
th {{ text-align:left; background:#eef3fb; padding:2.5mm; font-size:9.5pt; }}
td {{ padding:2.5mm; border-bottom:1px solid #e3e9f2; }}
td.num, th.num {{ text-align:right; }}
.note {{ font-size:9pt; color:#64748b; margin-top:4mm; }}
.kotak {{ background:#f7f9fd; border-left:4px solid #2563eb; padding:4mm 5mm; margin:4mm 0; }}
.kaki {{ position:absolute; bottom:12mm; left:18mm; right:18mm; font-size:9pt; color:#94a3b8;
         border-top:1px solid #e3e9f2; padding-top:3mm; }}
.big {{ font-size:23pt; font-weight:700; }}
</style></head><body>

<section class="slide">
  <div class="eyebrow">The Skin Code Clinic · Proyeksi omzet s/d Desember 2026</div>
  <h1>Dari pencarian menjadi kunjungan pasien</h1>
  <div class="rule"></div>
  <p>Disusun 14 Oktober 2026 dari data yang sudah ada: Search Console, GA4, dan kondisi profil bisnis
     klinik di Google. Angka yang belum ada saya beri tanda, bukan saya karang.</p>
  <div class="kotak">
    <p style="margin:0"><strong>Satu angka yang saya tidak punya:</strong> rata-rata nilai transaksi per
    pasien. Karena itu omzet dihitung sebagai pilihan: jumlah pasien × rata-rata transaksi yang Anda
    tentukan sendiri. Kalau angkanya dikirim, hasilnya bisa langsung dikunci.</p>
  </div>
  <div class="kaki">Halaman 1 · Basis data nyata, asumsi diberi label</div>
</section>

<section class="slide">
  <h2>Yang terukur sekarang</h2>
  <table>
    <tr><th>Ukuran</th><th class="num">28 hari terakhir</th><th class="num">90 hari</th></tr>
    <tr><td>Klik dari pencarian (GSC)</td><td class="num">{GSC_28_KLIK}</td><td class="num">{GSC_90_KLIK}</td></tr>
    <tr><td>Tayangan di pencarian</td><td class="num">{GSC_28_TAYANG:,}</td><td class="num">{GSC_90_TAYANG:,}</td></tr>
    <tr><td>Posisi rata-rata</td><td class="num">{str(GSC_28_POS).replace('.', ',')}</td>
        <td class="num">{str(GSC_90_POS).replace('.', ',')}</td></tr>
    <tr><td>Sesi dari pencarian organik (GA4)</td><td class="num">{GA4_SESI_28}</td><td class="num">—</td></tr>
    <tr><td>Kejadian kunci tercatat (klik WhatsApp/telepon)</td><td class="num">{KEJADIAN_KUNCI}</td>
        <td class="num">—</td></tr>
    <tr><td>Ulasan profil bisnis</td><td class="num">{ULASAN_TSC}</td><td class="num">—</td></tr>
    <tr><td>Rating</td><td class="num">{RATING_TSC}</td><td class="num">—</td></tr>
  </table>
  <h3>Bacaan</h3>
  <ul>
    <li>Per bulan: sekitar <strong>{KLIK_BULAN} klik</strong> dan <strong>{TAYANG_BULAN:,} tayangan</strong>
        dari pencarian.</li>
    <li>Situs klinik muncul {GSC_28_TAYANG:,} kali, tetapi hanya {GSC_28_KLIK} yang diklik.
        Perbandingannya sekitar 2%.</li>
    <li>Peringkat tidak menjadi masalah: banyak kueri lokal sudah di posisi 1–7. Yang tidak terjadi
        adalah klik.</li>
  </ul>
  <div class="kaki">Halaman 2 · Sumber: Search Console & GA4 properti klinik</div>
</section>

<section class="slide">
  <h2>Kenapa kliknya sedikit, dan ke mana pasien sebenarnya pergi</h2>
  <p>Kueri yang paling banyak menampilkan klinik ini berbentuk lokal, misalnya “dokter kulit krian” dan
     “dokter kulit terdekat”. Untuk kueri seperti itu Google menjawab dengan peta dan daftar bisnis,
     bukan tautan biasa.</p>
  <table>
    <tr><th>Kueri (90 hari)</th><th class="num">Tayangan</th><th class="num">Klik</th>
        <th class="num">Posisi</th></tr>
    <tr><td>dokter kulit sidoarjo</td><td class="num">455</td><td class="num">0</td><td class="num">6,8</td></tr>
    <tr><td>dokter kulit krian</td><td class="num">284</td><td class="num">1</td><td class="num">1,2</td></tr>
    <tr><td>dokter kulit terdekat</td><td class="num">276</td><td class="num">2</td><td class="num">3,3</td></tr>
    <tr><td>klinik kecantikan krian</td><td class="num">91</td><td class="num">4</td><td class="num">4,7</td></tr>
  </table>
  <div class="kotak"><p style="margin:0">Posisi 1,2 dengan 1 klik menunjukkan masalahnya bukan
  peringkat. Pasiennya menelepon dari kartu di peta. Karena itu, pengungkit utamanya adalah
  <strong>profil bisnis dan jumlah ulasan</strong>, bukan menambah artikel.</p></div>
  <div class="kaki">Halaman 3 · Kueri lokal dijawab paket peta</div>
</section>

<section class="slide">
  <h2>Proyeksi kunjungan dari pencarian sampai Desember</h2>
  <p>Basis: {GA4_SESI_28} sesi organik per 28 hari, setara <strong>{SESI_BULAN} sesi per bulan</strong>.
     Tiga skenario pertumbuhan, asumsinya ditulis terbuka.</p>
  <table>
    <tr><th>Skenario</th><th class="num">Oktober</th><th class="num">November</th>
        <th class="num">Desember</th><th class="num">Total 3 bulan</th></tr>
"""

for nama, laju in SKENARIO_TRAFIK:
    s = trafik[nama]
    html += (f"    <tr><td><strong>{nama}</strong></td><td class='num'>{s[0]}</td>"
             f"<td class='num'>{s[1]}</td><td class='num'>{s[2]}</td>"
             f"<td class='num'><strong>{sum(s)}</strong></td></tr>\n")

html += f"""  </table>
  <div class="note">Asumsi skenario realistis: perbaikan yang sudah dipasang (pengindeksan
  empat halaman, tautan internal, konsolidasi halaman, tanya jawab dokter) bekerja seperti biasanya.
  Skenario optimis hanya terjadi kalau profil bisnis dan ulasan dijalankan penuh.</div>
  <div class="kaki">Halaman 4 · Sesi organik dari pencarian</div>
</section>

<section class="slide">
  <h2>Dari kunjungan menjadi pasien</h2>
  <p>Tingkat kontak yang sedang terukur: {KEJADIAN_KUNCI} kejadian kunci dari {GA4_SESI_28} sesi
     (sekitar {round(LAJU_KEJADIAN * 100)}%). Angka ini dari contoh yang sangat kecil, jadi saya
     tampilkan beberapa tingkat kontak sekaligus.</p>
  <table>
    <tr><th>Tingkat kontak dari sesi</th><th class="num">Kontak/bulan (basis datar)</th>
        <th class="num">Perkiraan pasien/bulan</th></tr>
"""

for nama, rasio in RASIO_KONTAK:
    kontak = round(SESI_BULAN * rasio)
    pasien = round(kontak * PASIEN_DARI_KONTAK)
    html += (f"    <tr><td>{nama}</td><td class='num'>{kontak}</td><td class='num'>{pasien}</td></tr>\n")

html += f"""  </table>
  <div class="note">Kolom pasien memakai asumsi {int(PASIEN_DARI_KONTAK * 100)}% dari yang menghubungi
  akhirnya datang. Angka ini <strong>asumsi</strong>, bukan hasil ukur — perlu dicocokkan dengan catatan
  pendaftaran klinik.</div>
  <div class="kaki">Halaman 5 · Kunjungan → kontak → pasien</div>
</section>

<section class="slide">
  <h2>Omzet: dari pasien menjadi rupiah</h2>
  <p>Karena rata-rata nilai transaksi belum ada di catatan saya, berikut bentuknya dalam pilihan.
     Ambil kolom yang paling dekat dengan kenyataan klinik.</p>
  <table>
    <tr><th>Rata-rata transaksi per pasien</th><th class="num">2 pasien/bulan</th>
        <th class="num">5 pasien/bulan</th><th class="num">9 pasien/bulan</th></tr>
"""

for nilai in NILAI_TRANSAKSI:
    html += (f"    <tr><td>Rp {nilai:,}</td>".replace(",", ".")
             + "".join(f"<td class='num'>Rp {nilai * n:,}</td>".replace(",", ".") for n in (2, 5, 9))
             + "</tr>\n")

html += f"""  </table>
  <div class="note">Angka di dalam tabel <strong>aritmatika, bukan data klinik</strong>. Yang saya
  yakini dari data: kunjungan dari pencarian saat ini kecil (satuan pasien per bulan), dan kenaikannya
  bergantung pada profil bisnis, bukan pada jumlah artikel.</div>
  <h3>Kalau profil bisnis dijalankan penuh</h3>
  <p>Kueri lokal yang menampilkan klinik ±{TAYANG_BULAN:,} kali per bulan. Menaikkan tingkat klik dari
  sekitar 2% menjadi 6% saja berarti tambahan sekitar
  <strong>{round(TAYANG_BULAN * 0.04)} kunjungan per bulan</strong> — tanpa satu artikel baru pun.
  Itu jalur tercepat menambah omzet dari sisi digital.</p>
  <div class="kaki">Halaman 6 · Omzet bergantung dua angka yang perlu Anda kunci</div>
</section>

<section class="slide">
  <h2>Yang menghambat kalau dibiarkan</h2>
  <table>
    <tr><th>Hal</th><th>Kondisi</th><th>Akibat pada omzet</th></tr>
    <tr><td><strong>Ulasan kalah banyak</strong></td>
        <td>Klinik {ULASAN_TSC} ulasan; Alamanda di ruko yang sama {ULASAN_PESAING['Alamanda Clinic Krian (ruko sama)']}</td>
        <td>Pasien menelepon pesaing lebih dulu</td></tr>
    <tr><td><strong>Konversi tidak terukur</strong></td>
        <td>Hanya {KEJADIAN_KUNCI} kejadian kunci tercatat</td>
        <td>Tidak diketahui halaman mana yang menghasilkan pasien</td></tr>
    <tr><td><strong>Empat halaman belum diindeks</strong></td>
        <td>Termasuk panduan berobat dan biaya</td>
        <td>Isi sudah ditulis tetapi belum bisa ditemukan</td></tr>
    <tr><td><strong>Halaman klaster bertumpuk</strong></td>
        <td>59 halaman, satu yang bekerja</td>
        <td>Sinyal terpecah, kenaikan terasa lambat</td></tr>
  </table>
  <div class="kaki">Halaman 7 · Hambatan yang menahan omzet</div>
</section>

<section class="slide">
  <h2>Ringkasan dan yang perlu diputuskan</h2>
  <div class="kotak">
    <p style="margin:0"><strong>Kesimpulan:</strong> dari data yang ada, kunjungan pasien lewat
    pencarian masih kecil dan tidak akan berubah hanya dengan menambah artikel. Yang menentukan adalah
    jumlah ulasan dan kelengkapan profil bisnis, karena di situlah pasien lokal mengambil keputusan.
    Jalur tercepat menambah omzet: naikkan tingkat klik dari ±2% ke 6%, setara tambahan sekitar
    {round(TAYANG_BULAN * 0.04)} kunjungan per bulan.</p>
  </div>
  <table>
    <tr><th>Yang perlu diputuskan</th><th>Kenapa penting untuk proyeksi ini</th></tr>
    <tr><td>Rata-rata nilai transaksi per pasien</td><td>satu angka ini yang mengubah kunjungan jadi rupiah</td></tr>
    <tr><td>Jumlah pasien baru per bulan sekarang</td><td>dasar pembanding, supaya kenaikannya terlihat</td></tr>
    <tr><td>Siapa menjalankan ulasan</td><td>pengungkit omzet terbesar, butuh staf klinik</td></tr>
    <tr><td>Pencatatan klik WhatsApp/telepon</td><td>tanpa itu proyeksi hanya bisa memakai asumsi</td></tr>
  </table>
  <div class="kaki">Halaman 8 · Ringkasan</div>
</section>

</body></html>
"""

open(OUT, "w").write(html)
print(f"HTML: {OUT} ({len(html)} char)")
print(f"basis: sesi/bulan {SESI_BULAN} · klik/bulan {KLIK_BULAN} · tayangan/bulan {TAYANG_BULAN}")
print(f"tambahan kunjungan kalau klik 6%: {round(TAYANG_BULAN * 0.04)} per bulan")
for nama, laju in SKENARIO_TRAFIK:
    print(f"  {nama:<24} {trafik[nama]}")
