Files

241 lines
30 KiB
HTML

<html lang="en"><head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1, shrink-to-fit=no">
<link rel="shortcut icon" href="data:image/svg+xml,&lt;svg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 100 100'&gt;&lt;text y='.9em' font-size='90'&gt;💰&lt;/text&gt;&lt;/svg&gt;">
<link rel="preload" href="./static/media/SourceSansVF-Upright.ttf.BsWL4Kly.woff2" as="font" type="font/woff2" crossorigin="">
<title>Jarca Ledger</title>
<!-- initialize window.prerenderReady to false and then set to true in React app when app is ready for indexing -->
<script>
window.prerenderReady = false
</script>
<script type="module" crossorigin="" src="./static/js/index.dkY5s53S.js"></script>
<link rel="stylesheet" crossorigin="" href="./static/css/index.M0-f_CLq.css">
<style media=""></style><style data-emotion="st-emotion-cache-global" data-s=""></style><style data-emotion="st-emotion-cache" data-s=""></style><link rel="modulepreload" as="script" crossorigin="" href="http://127.0.0.1:18501/static/js/rehype-raw.CYCm9aNq.js"><link rel="modulepreload" as="script" crossorigin="" href="http://127.0.0.1:18501/static/js/hastscript.CdO75HTK.js"><link rel="modulepreload" as="script" crossorigin="" href="http://127.0.0.1:18501/static/js/web-namespaces.7WZk_TbE.js"><link rel="modulepreload" as="script" crossorigin="" href="http://127.0.0.1:18501/static/js/Button.D0kRCRsF.js"><link rel="modulepreload" as="script" crossorigin="" href="http://127.0.0.1:18501/static/js/iconPosition.CY47f4C7.js"><link rel="modulepreload" as="script" crossorigin="" href="http://127.0.0.1:18501/static/js/Metric.BruI98GJ.js"><link rel="modulepreload" as="script" crossorigin="" href="http://127.0.0.1:18501/static/js/embed.B-c_4G7P.js"><link rel="modulepreload" as="script" crossorigin="" href="http://127.0.0.1:18501/static/js/threshold.DgPyzOa1.js"><link rel="modulepreload" as="script" crossorigin="" href="http://127.0.0.1:18501/static/js/src.BJmgRfOQ.js"><link rel="modulepreload" as="script" crossorigin="" href="http://127.0.0.1:18501/static/js/timer.CZbQQOaD.js"><link rel="modulepreload" as="script" crossorigin="" href="http://127.0.0.1:18501/static/js/formatNumber.1VL8Csnc.js"><link rel="modulepreload" as="script" crossorigin="" href="http://127.0.0.1:18501/static/js/sprintfjs.BfFpychH.js"><link rel="modulepreload" as="script" crossorigin="" href="http://127.0.0.1:18501/static/js/numbro.CldGEqmS.js"><link rel="modulepreload" as="script" crossorigin="" href="http://127.0.0.1:18501/static/js/DataFrame.Dqn1eUs1.js"><link rel="modulepreload" as="script" crossorigin="" href="http://127.0.0.1:18501/static/js/withFullScreenWrapper.Cayfkf4W.js"><link rel="modulepreload" as="script" crossorigin="" href="http://127.0.0.1:18501/static/js/pandasStylerUtils.C4NWa-JG.js"><link rel="modulepreload" as="script" crossorigin="" href="http://127.0.0.1:18501/static/js/_baseIndexOf.BLRTnWan.js"><link rel="modulepreload" as="script" crossorigin="" href="http://127.0.0.1:18501/static/js/moment.CxUG5LjX.js"><link rel="modulepreload" as="script" crossorigin="" href="http://127.0.0.1:18501/static/js/createDownloadLinkElement.sTIOLR-H.js"><link rel="modulepreload" as="script" crossorigin="" href="http://127.0.0.1:18501/static/js/formatMoment.DuwA7md2.js"><link rel="modulepreload" as="script" crossorigin="" href="http://127.0.0.1:18501/static/js/reactJsonViewCompat.DeSSF5mf.js"><link rel="modulepreload" as="script" crossorigin="" href="http://127.0.0.1:18501/static/js/resolveDefaultExport.CsNBWkh8.js"><link rel="modulepreload" as="script" crossorigin="" href="http://127.0.0.1:18501/static/js/toConsumableArray.PDHxPGsP.js"><link rel="modulepreload" as="script" crossorigin="" href="http://127.0.0.1:18501/static/js/FileDownload.esm.Dvz4VOlO.js"><link rel="modulepreload" as="script" crossorigin="" href="http://127.0.0.1:18501/static/js/checkbox.UCpp4Z27.js"><link rel="modulepreload" as="script" crossorigin="" href="http://127.0.0.1:18501/static/js/dist.D8e_gvvD.js"><link rel="modulepreload" as="script" crossorigin="" href="http://127.0.0.1:18501/static/js/_arrayIncludesWith.MnaH2Ddz.js"><link rel="stylesheet" crossorigin="" href="http://127.0.0.1:18501/static/css/DataFrame.DUkanX9_.css"><link rel="modulepreload" as="script" crossorigin="" href="http://127.0.0.1:18501/static/js/PlotlyChart.DE72Bh5O.js"></head>
<body>
<noscript>You need to enable JavaScript to run this app.</noscript>
<div id="root"><div class=""><div class="withScreencast" data-testid="stScreencast"><div class="stApp stAppEmbeddingId-the7nsm9k2ln streamlit-wide st-emotion-cache-1r4qj8v e1vju3fw0" data-testid="stApp" data-test-script-state="running" data-test-connection-state="CONNECTED"><div class="stAppViewContainer appview-container st-emotion-cache-1yiq2ps eqt0gmo0" data-testid="stAppViewContainer" data-layout="wide"><section class="stSidebar st-emotion-cache-1kss9tm eelgd2m0" data-testid="stSidebar" aria-expanded="true" style="position: relative; user-select: auto; width: 300px; height: auto; box-sizing: border-box; flex-shrink: 0;"><div data-testid="stSidebarContent" class="st-emotion-cache-1csi29a eelgd2m2"><div data-testid="stSidebarHeader" class="st-emotion-cache-10p9htt eelgd2m4"><div data-testid="stLogoSpacer" class="st-emotion-cache-11ukie eelgd2m9"></div><div data-testid="stSidebarCollapseButton" class="st-emotion-cache-qmp9ai eelgd2m10"><button kind="headerNoPadding" data-testid="stBaseButton-headerNoPadding" aria-label="" class="st-emotion-cache-1aplgmp e12tamyi15"><span color="rgba(49, 51, 63, 0.6)" class="st-emotion-cache-2x5h05 ewh6kot2"><span color="rgba(49, 51, 63, 0.6)" data-testid="stIconMaterial" translate="no" class="st-emotion-cache-5r6ut5 ed4y4ls0">keyboard_double_arrow_left</span></span></button></div></div><div data-testid="stSidebarUserContent" class="st-emotion-cache-1r1cntt eelgd2m1"><div class="st-emotion-cache-8atqhb eqt0gmo5"><div direction="column" height="auto" class="stVerticalBlock st-emotion-cache-tn0cau e1rw0b1u3" data-testid="stVerticalBlock"><div class="stElementContainer element-container st-emotion-cache-3pwa5w e1rw0b1u1" data-testid="stElementContainer" data-stale="false" width="100%" height="auto" overflow="visible"><div class="stMarkdown" data-testid="stMarkdown"><div class="st-emotion-cache-6c7yup eqmt79k2"><div data-testid="stMarkdownContainer" class="st-emotion-cache-1ix68xf e1r33pru0"><h2>💰 Jarca Ledger</h2></div></div></div></div><div class="stElementContainer element-container st-emotion-cache-3pwa5w e1rw0b1u1" data-testid="stElementContainer" data-stale="false" width="100%" height="auto" overflow="visible"><div class="stMarkdown" data-testid="stMarkdown"><div class="st-emotion-cache-6c7yup eqmt79k2"><div data-testid="stCaptionContainer" class="st-emotion-cache-1fs00nt e1r33pru0"><p>가계부 · 분류 · Import 운영 콘솔</p></div></div></div></div><div class="stElementContainer element-container st-emotion-cache-3pwa5w e1rw0b1u1" data-testid="stElementContainer" data-stale="false" width="100%" height="auto" overflow="visible"><div class="stMarkdown" data-testid="stMarkdown"><div class="st-emotion-cache-6c7yup eqmt79k2"><div data-testid="stMarkdownContainer" class="st-emotion-cache-1ix68xf e1r33pru0"><div class="jarca-nav-title">메뉴</div></div></div></div></div><div class="stElementContainer element-container st-emotion-cache-3pwa5w e1rw0b1u1" data-testid="stElementContainer" data-stale="false" width="100%" height="auto" overflow="visible"><div class="stMarkdown" data-testid="stMarkdown"><div class="st-emotion-cache-6c7yup eqmt79k2"><div data-testid="stMarkdownContainer" class="st-emotion-cache-1ix68xf e1r33pru0"><div class="jarca-nav-list"><a href="?page=%EC%9A%94%EC%95%BD" target="_self" rel="noopener noreferrer" class="jarca-nav-item active">요약</a><a href="?page=%EA%B1%B0%EB%9E%98%EB%82%B4%EC%97%AD" target="_self" rel="noopener noreferrer" class="jarca-nav-item">거래내역</a><a href="?page=%ED%99%95%EC%9D%B8%ED%95%84%EC%9A%94%20%ED%81%90" target="_self" rel="noopener noreferrer" class="jarca-nav-item">확인필요 큐</a><a href="?page=%EB%AF%B8%EB%B6%84%EB%A5%98" target="_self" rel="noopener noreferrer" class="jarca-nav-item">미분류</a><a href="?page=%EB%B6%84%EB%A5%98%20%EA%B7%9C%EC%B9%99" target="_self" rel="noopener noreferrer" class="jarca-nav-item">분류 규칙</a><a href="?page=%EC%B9%B4%ED%85%8C%EA%B3%A0%EB%A6%AC" target="_self" rel="noopener noreferrer" class="jarca-nav-item">카테고리</a><a href="?page=%EA%B3%84%EC%A2%8C" target="_self" rel="noopener noreferrer" class="jarca-nav-item">계좌</a><a href="?page=Import" target="_self" rel="noopener noreferrer" class="jarca-nav-item">Import</a></div></div></div></div></div><div class="stElementContainer element-container st-key-refresh_button st-emotion-cache-1vo6xi6 e1rw0b1u1" data-testid="stElementContainer" data-stale="false" width="100%" height="auto" overflow="visible"><div class="stSkeleton st-emotion-cache-7cllse e2obbcf4" data-testid="stSkeleton"></div></div></div></div></div></div><div><div style="position: absolute; user-select: none; width: 8px; height: 100%; top: 0px; cursor: col-resize; right: -6px;"><div class="st-emotion-cache-m0hag0 eelgd2m3"></div></div></div></section><div class="st-emotion-cache-6px8kg eqt0gmo10"><header class="stAppHeader st-emotion-cache-1up3yna e1yxiy6j1" data-testid="stHeader"><div class="stAppToolbar st-emotion-cache-14vh5up e1yxiy6j2" data-testid="stToolbar"><div class="st-emotion-cache-1j22a0y e1yxiy6j4"><div class="st-emotion-cache-jma0kd e1yxiy6j5"></div><div class="st-emotion-cache-scp8yw e1yxiy6j6"><div class="stStatusWidget st-emotion-cache-19or5k2 e192nn06 StatusWidget-appear-done StatusWidget-enter-done" data-testid="stStatusWidget"><div class="st-emotion-cache-4z1n4l e192nn02"><div aria-label="Running..." role="img" data-testid="stStatusWidgetRunningIcon" class="st-emotion-cache-1p9jrve e192nn05"><svg viewBox="0 0 24 24" aria-hidden="true" focusable="false" fill="currentColor" xmlns="http://www.w3.org/2000/svg" color="rgba(49, 51, 63, 0.6)" data-testid="stStatusWidgetRunningManIcon" class="st-emotion-cache-1eamic5 ex0cdmw0" style="width: 1.6rem; height: 1.6rem;"><path fill="none" d="M0 0h24v24H0z"></path><path d="M8.5 14.5L4 19l1.5 1.5L9 17h2l-2.5-2.5zM15 1c-1.1 0-2 .9-2 2s.9 2 2 2 2-.9 2-2-.9-2-2-2zm6 20.01L18 24l-2.99-3.01V19.5l-7.1-7.09c-.31.05-.61.07-.91.07v-2.16c1.66.03 3.61-.87 4.67-2.04l1.4-1.55c.19-.21.43-.38.69-.5.29-.14.62-.23.96-.23h.03C15.99 6.01 17 7.02 17 8.26v5.75c0 .84-.35 1.61-.92 2.16l-3.58-3.58v-2.27c-.63.52-1.43 1.02-2.29 1.39L16.5 18H18l3 3.01z"></path></svg></div><span class="st-emotion-cache-lvs4k2 e192nn04"><button kind="header" data-testid="stBaseButton-header" aria-label="" class="st-emotion-cache-1gk7ll6 e12tamyi14">Stop</button></span></div></div><div class="stToolbarActions st-emotion-cache-1p1m4ay epm40z22" data-testid="stToolbarActions"></div><div class="stAppDeployButton" data-testid="stAppDeployButton"><button kind="header" data-testid="stBaseButton-header" aria-label="" class="st-emotion-cache-egm30d e12tamyi14"><div class="st-emotion-cache-1wbqy5l e19wr9s00"><span>Deploy</span></div></button></div><span id="MainMenu" class="stMainMenu st-emotion-cache-czk5ss eppsdfl4" data-testid="stMainMenu"><button kind="headerNoPadding" data-testid="stMainMenuButton" aria-label="Main menu" aria-haspopup="menu" aria-expanded="false" class="st-emotion-cache-1aplgmp e12tamyi15"><svg viewBox="0 0 24 24" aria-hidden="true" focusable="false" fill="currentColor" xmlns="http://www.w3.org/2000/svg" class="ewh6kot1 st-emotion-cache-nsoqg8 ex0cdmw0"><path fill="none" d="M0 0h24v24H0V0z"></path><path d="M12 8c1.1 0 2-.9 2-2s-.9-2-2-2-2 .9-2 2 .9 2 2 2zm0 2c-1.1 0-2 .9-2 2s.9 2 2 2 2-.9 2-2-.9-2-2-2zm0 6c-1.1 0-2 .9-2 2s.9 2 2 2 2-.9 2-2-.9-2-2-2z"></path></svg></button></span></div></div></div></header><section tabindex="0" class="stMain st-emotion-cache-4rsbii eqt0gmo1" data-testid="stMain"><div class="stMainBlockContainer block-container st-emotion-cache-zy6yx3 eqt0gmo4" data-testid="stMainBlockContainer"><div direction="column" height="auto" class="stVerticalBlock st-emotion-cache-tn0cau e1rw0b1u3" data-testid="stVerticalBlock"><div class="stElementContainer element-container st-emotion-cache-3pwa5w e1rw0b1u1" data-testid="stElementContainer" data-stale="false" width="100%" height="auto" overflow="visible"><div class="stMarkdown" data-testid="stMarkdown"><div class="st-emotion-cache-6c7yup eqmt79k2"><div data-testid="stMarkdownContainer" class="st-emotion-cache-yn44r9 e1r33pru0"><style>
@import url('https://fonts.googleapis.com/css2?family=Inter:wght@400;500;600;700;800&display=swap');
:root {
--jarca-navy: #0f172a;
--jarca-slate: #475569;
--jarca-muted: #64748b;
--jarca-border: #e2e8f0;
--jarca-soft: #f8fafc;
--jarca-blue: #2563eb;
--jarca-cyan: #06b6d4;
--jarca-emerald: #10b981;
--jarca-amber: #f59e0b;
--jarca-rose: #f43f5e;
}
html, body, [class*="css"] {
font-family: Inter, Pretendard, "Noto Sans KR", -apple-system, BlinkMacSystemFont, sans-serif;
}
[data-testid="stAppViewContainer"] {
background:
radial-gradient(circle at top left, rgba(37, 99, 235, 0.10), transparent 30rem),
radial-gradient(circle at top right, rgba(6, 182, 212, 0.10), transparent 28rem),
linear-gradient(180deg, #f8fafc 0%, #ffffff 45%, #f8fafc 100%);
}
[data-testid="stHeader"] {
background: rgba(248, 250, 252, 0.78);
backdrop-filter: blur(16px);
}
.block-container {
/* Streamlit's fixed top toolbar overlays the app body. Keep the first
custom hero safely below it so the title block is not clipped. */
padding-top: 4.75rem;
padding-bottom: 2.5rem;
}
[data-testid="stSidebar"] {
background: linear-gradient(180deg, #ffffff 0%, #f8fafc 100%);
border-right: 1px solid rgba(148, 163, 184, 0.22);
}
[data-testid="stSidebar"] h2 {
letter-spacing: -0.04em;
}
[data-testid="stSidebar"] .jarca-nav-title {
font-size: 0.82rem;
font-weight: 700;
color: var(--jarca-muted);
margin: 0.4rem 0 1.15rem 0.1rem;
text-transform: uppercase;
letter-spacing: 0.04em;
}
[data-testid="stAppViewContainer"] h1 {
font-size: 1.68rem;
line-height: 1.25;
margin-top: 0.2rem;
margin-bottom: 0.65rem;
letter-spacing: -0.045em;
}
[data-testid="stAppViewContainer"] h2 {
font-size: 1.16rem;
line-height: 1.3;
margin-top: 0.15rem;
margin-bottom: 0.5rem;
letter-spacing: -0.025em;
}
[data-testid="stAppViewContainer"] h3 {
font-size: 0.95rem;
line-height: 1.35;
margin-top: 0.1rem;
margin-bottom: 0.4rem;
}
[data-testid="stSidebar"] .jarca-nav-list {
display: flex;
flex-direction: column;
gap: 0.2rem;
}
[data-testid="stSidebar"] .jarca-nav-item {
display: block;
width: 100%;
border-radius: 14px;
padding: 0.62rem 0.88rem;
font-weight: 650;
font-size: 0.82rem;
line-height: 1.2;
color: var(--jarca-slate);
text-decoration: none;
background: transparent;
border: 1px solid transparent;
box-sizing: border-box;
transition: all 140ms ease;
}
[data-testid="stSidebar"] .jarca-nav-item:hover {
background: rgba(37, 99, 235, 0.07);
border-color: rgba(37, 99, 235, 0.12);
color: var(--jarca-blue);
}
[data-testid="stSidebar"] .jarca-nav-item.active {
background: linear-gradient(135deg, var(--jarca-blue), #0ea5e9);
color: white;
font-weight: 800;
box-shadow: 0 10px 24px rgba(37, 99, 235, 0.22);
}
div[data-testid="stMetric"] {
background: rgba(255,255,255,0.84);
border: 1px solid rgba(226, 232, 240, 0.92);
border-radius: 20px;
padding: 1rem 1.05rem;
box-shadow: 0 14px 32px rgba(15, 23, 42, 0.06);
}
div[data-testid="stMetric"] label {
color: var(--jarca-muted) !important;
font-weight: 700;
}
div[data-testid="stMetricValue"] {
color: var(--jarca-navy);
letter-spacing: -0.04em;
}
div[data-testid="stDataFrame"], div[data-testid="stDataFrameResizable"] {
border-radius: 18px;
overflow: hidden;
border: 1px solid rgba(226, 232, 240, 0.85);
box-shadow: 0 14px 28px rgba(15, 23, 42, 0.04);
}
div[data-testid="stPlotlyChart"] {
background: rgba(255,255,255,0.82);
border: 1px solid rgba(226, 232, 240, 0.82);
border-radius: 22px;
padding: 0.65rem 0.55rem 0.25rem;
box-shadow: 0 14px 32px rgba(15, 23, 42, 0.055);
}
.stButton > button {
border-radius: 14px;
font-weight: 750;
border-color: rgba(148, 163, 184, 0.32);
transition: transform 120ms ease, box-shadow 120ms ease, border-color 120ms ease;
}
.stButton > button:hover {
transform: translateY(-1px);
border-color: rgba(37, 99, 235, 0.48);
box-shadow: 0 10px 22px rgba(15, 23, 42, 0.10);
}
.jarca-hero {
position: relative;
padding: 1.25rem 1.35rem;
margin: 0 0 1rem 0;
border-radius: 28px;
color: white;
background:
radial-gradient(circle at 12% 18%, rgba(255,255,255,0.22), transparent 10rem),
linear-gradient(135deg, #0f172a 0%, #1d4ed8 54%, #06b6d4 100%);
box-shadow: 0 22px 48px rgba(15, 23, 42, 0.22);
overflow: hidden;
}
.jarca-hero::after {
content: "";
position: absolute;
inset: auto -5rem -8rem auto;
width: 18rem;
height: 18rem;
border-radius: 999px;
background: rgba(255,255,255,0.13);
}
.jarca-hero-kicker {
display: inline-flex;
align-items: center;
gap: 0.35rem;
padding: 0.26rem 0.68rem;
margin-bottom: 0.66rem;
border-radius: 999px;
background: rgba(255,255,255,0.16);
color: rgba(255,255,255,0.92);
font-size: 0.78rem;
font-weight: 750;
letter-spacing: 0.02em;
}
.jarca-hero h1 {
margin: 0 0 0.32rem 0 !important;
color: white !important;
font-size: 1.92rem !important;
}
.jarca-hero p {
margin: 0;
max-width: 56rem;
color: rgba(255,255,255,0.82);
font-size: 0.94rem;
line-height: 1.55;
}
.jarca-card {
border: 1px solid rgba(226, 232, 240, 0.86);
border-radius: 22px;
padding: 1rem 1.1rem;
background: rgba(255,255,255,0.82);
box-shadow: 0 16px 34px rgba(15, 23, 42, 0.055);
}
.jarca-section-label {
display: inline-flex;
align-items: center;
gap: 0.42rem;
margin: 1.1rem 0 0.5rem 0;
color: var(--jarca-navy);
font-size: 1.02rem;
font-weight: 850;
letter-spacing: -0.03em;
}
.jarca-pill-row {
display: flex;
flex-wrap: wrap;
gap: 0.42rem;
margin-top: 0.72rem;
}
.jarca-pill {
border-radius: 999px;
padding: 0.28rem 0.7rem;
background: rgba(255,255,255,0.18);
color: rgba(255,255,255,0.90);
font-size: 0.76rem;
font-weight: 700;
}
</style></div></div></div></div><div class="stElementContainer element-container st-emotion-cache-3pwa5w e1rw0b1u1" data-testid="stElementContainer" data-stale="false" width="100%" height="auto" overflow="visible"><div class="stMarkdown" data-testid="stMarkdown"><div class="st-emotion-cache-6c7yup eqmt79k2"><div data-testid="stMarkdownContainer" class="st-emotion-cache-yn44r9 e1r33pru0"><div class="jarca-hero">
<div class="jarca-hero-kicker">📊 요약</div>
<div data-testid="stHeadingWithActionElements" class="st-emotion-cache-1veyek5 e1r33pru2"><h1 id="69461c65" aria-labelledby=":r1:"><span id=":r1:">가계부 운영 대시보드</span><span data-testid="stHeaderActionElements" class="st-emotion-cache-gi0tri e1r33pru3"><a href="#69461c65" aria-label="Link to heading" class="st-emotion-cache-kwyva7 e1r33pru1"><svg xmlns="http://www.w3.org/2000/svg" width="16" height="16" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" aria-hidden="true"><path d="M15 7h3a5 5 0 0 1 5 5 5 5 0 0 1-5 5h-3m-6 0H6a5 5 0 0 1-5-5 5 5 0 0 1 5-5h3"></path><line x1="8" y1="12" x2="16" y2="12"></line></svg></a></span></h1></div>
<p>이번 달 실제 현금흐름, 자산 유동성, 운영 경고를 우선순위대로 확인합니다.</p>
<div class="jarca-pill-row"><span class="jarca-pill">schema v8</span><span class="jarca-pill">KST 이번 달</span><span class="jarca-pill">last_balance 기준 자산</span></div>
</div></div></div></div></div><div class="stElementContainer element-container st-emotion-cache-3pwa5w e1rw0b1u1" data-testid="stElementContainer" data-stale="false" width="100%" height="auto" overflow="visible"><div class="stMarkdown" data-testid="stMarkdown"><div class="st-emotion-cache-6c7yup eqmt79k2"><div data-testid="stCaptionContainer" class="st-emotion-cache-1rp5jhn e1r33pru0"><p>DB: <code class="st-emotion-cache-119tkyc e19xqh4f0">/root/projects/jarca-ledger-mcp/docs/batches/bat-005_20260629_dashboard-operations-hub-liquidity-monthly-cashflow/evidence/run-20260629-2111/fixture.sqlite3</code></p></div></div></div></div><div class="stElementContainer element-container st-emotion-cache-3pwa5w e1rw0b1u1" data-testid="stElementContainer" data-stale="false" width="100%" height="auto" overflow="visible"><div class="stMarkdown" data-testid="stMarkdown"><div class="st-emotion-cache-6c7yup eqmt79k2"><div data-testid="stMarkdownContainer" class="st-emotion-cache-yn44r9 e1r33pru0"><div class="jarca-section-label"><span>💎</span><span>이번 달 수입/지출 현황</span></div></div></div></div></div><div class="stElementContainer element-container st-emotion-cache-3pwa5w e1rw0b1u1" data-testid="stElementContainer" data-stale="false" width="100%" height="auto" overflow="visible"><div class="stMarkdown" data-testid="stMarkdown"><div class="st-emotion-cache-6c7yup eqmt79k2"><div data-testid="stCaptionContainer" class="st-emotion-cache-1rp5jhn e1r33pru0"><p>기준: KST 현재 월 2026-06, transactions.transaction_date, ledger_categories.cashflow_kind 실제 현금흐름</p></div></div></div></div><div data-testid="stLayoutWrapper" class="st-emotion-cache-18kf3ut e1rw0b1u4" width="100%" height="auto" overflow="visible"><div direction="row" overflow="visible" height="auto" class="stHorizontalBlock st-emotion-cache-1permvm e1rw0b1u3" data-testid="stHorizontalBlock" data-test-scroll-behavior="normal"><div class="stColumn st-emotion-cache-194zssa e1rw0b1u2" data-testid="stColumn"><div direction="column" height="100%" class="stVerticalBlock st-emotion-cache-wfksaw e1rw0b1u3" data-testid="stVerticalBlock"><div class="stElementContainer element-container st-emotion-cache-1vo6xi6 e1rw0b1u1" data-testid="stElementContainer" data-stale="false" width="100%" height="auto" overflow="visible"><div class="stSkeleton st-emotion-cache-7cllse e2obbcf4" data-testid="stSkeleton"></div></div></div></div><div class="stColumn st-emotion-cache-194zssa e1rw0b1u2" data-testid="stColumn"><div direction="column" height="100%" class="stVerticalBlock st-emotion-cache-wfksaw e1rw0b1u3" data-testid="stVerticalBlock"><div class="stElementContainer element-container st-emotion-cache-1vo6xi6 e1rw0b1u1" data-testid="stElementContainer" data-stale="false" width="100%" height="auto" overflow="visible"><div class="stSkeleton st-emotion-cache-7cllse e2obbcf4" data-testid="stSkeleton"></div></div></div></div><div class="stColumn st-emotion-cache-194zssa e1rw0b1u2" data-testid="stColumn"><div direction="column" height="100%" class="stVerticalBlock st-emotion-cache-wfksaw e1rw0b1u3" data-testid="stVerticalBlock"><div class="stElementContainer element-container st-emotion-cache-1vo6xi6 e1rw0b1u1" data-testid="stElementContainer" data-stale="false" width="100%" height="auto" overflow="visible"><div class="stSkeleton st-emotion-cache-7cllse e2obbcf4" data-testid="stSkeleton"></div></div></div></div><div class="stColumn st-emotion-cache-194zssa e1rw0b1u2" data-testid="stColumn"><div direction="column" height="100%" class="stVerticalBlock st-emotion-cache-wfksaw e1rw0b1u3" data-testid="stVerticalBlock"><div class="stElementContainer element-container st-emotion-cache-1vo6xi6 e1rw0b1u1" data-testid="stElementContainer" data-stale="false" width="100%" height="auto" overflow="visible"><div class="stSkeleton st-emotion-cache-7cllse e2obbcf4" data-testid="stSkeleton"></div></div></div></div></div></div><div class="stElementContainer element-container st-emotion-cache-3pwa5w e1rw0b1u1" data-testid="stElementContainer" data-stale="false" width="100%" height="auto" overflow="visible"><div class="stMarkdown" data-testid="stMarkdown"><div class="st-emotion-cache-6c7yup eqmt79k2"><div data-testid="stMarkdownContainer" class="st-emotion-cache-yn44r9 e1r33pru0"><div class="jarca-section-label"><span>🏦</span><span>자산 유동성 현황</span></div></div></div></div></div><div class="stElementContainer element-container st-emotion-cache-3pwa5w e1rw0b1u1" data-testid="stElementContainer" data-stale="false" width="100%" height="auto" overflow="visible"><div class="stMarkdown" data-testid="stMarkdown"><div class="st-emotion-cache-6c7yup eqmt79k2"><div data-testid="stCaptionContainer" class="st-emotion-cache-1rp5jhn e1r33pru0"><p>기준: accounts.liquidity_bucket + accounts.last_balance. 거래 합계로 비거래 자산을 추정하지 않습니다.</p></div></div></div></div><div data-testid="stLayoutWrapper" class="st-emotion-cache-18kf3ut e1rw0b1u4" width="100%" height="auto" overflow="visible"><div direction="row" overflow="visible" height="auto" class="stHorizontalBlock st-emotion-cache-1permvm e1rw0b1u3" data-testid="stHorizontalBlock" data-test-scroll-behavior="normal"><div class="stColumn st-emotion-cache-wt0xm9 e1rw0b1u2" data-testid="stColumn"><div direction="column" height="100%" class="stVerticalBlock st-emotion-cache-wfksaw e1rw0b1u3" data-testid="stVerticalBlock"><div class="stElementContainer element-container st-emotion-cache-1vo6xi6 e1rw0b1u1" data-testid="stElementContainer" data-stale="false" width="100%" height="auto" overflow="visible"><div class="stSkeleton st-emotion-cache-7cllse e2obbcf4" data-testid="stSkeleton"></div></div></div></div><div class="stColumn st-emotion-cache-wt0xm9 e1rw0b1u2" data-testid="stColumn"><div direction="column" height="100%" class="stVerticalBlock st-emotion-cache-wfksaw e1rw0b1u3" data-testid="stVerticalBlock"><div class="stElementContainer element-container st-emotion-cache-1vo6xi6 e1rw0b1u1" data-testid="stElementContainer" data-stale="false" width="100%" height="auto" overflow="visible"><div class="stSkeleton st-emotion-cache-7cllse e2obbcf4" data-testid="stSkeleton"></div></div></div></div><div class="stColumn st-emotion-cache-wt0xm9 e1rw0b1u2" data-testid="stColumn"><div direction="column" height="100%" class="stVerticalBlock st-emotion-cache-wfksaw e1rw0b1u3" data-testid="stVerticalBlock"><div class="stElementContainer element-container st-emotion-cache-1vo6xi6 e1rw0b1u1" data-testid="stElementContainer" data-stale="false" width="100%" height="auto" overflow="visible"><div class="stSkeleton st-emotion-cache-7cllse e2obbcf4" data-testid="stSkeleton"></div></div></div></div></div></div><div class="stElementContainer element-container st-emotion-cache-prsqw1 e1rw0b1u1" data-testid="stElementContainer" data-stale="false" width="100%" height="250px" overflow="visible"><div class="stSkeleton st-emotion-cache-7cllse e2obbcf4" data-testid="stSkeleton"></div></div><div class="stElementContainer element-container st-emotion-cache-16n0ond e1rw0b1u1" data-testid="stElementContainer" data-stale="false" width="100%" height="450px" overflow="auto"><div class="stSkeleton st-emotion-cache-7cllse e2obbcf4" data-testid="stSkeleton"></div></div><div class="stElementContainer element-container st-emotion-cache-3pwa5w e1rw0b1u1" data-testid="stElementContainer" data-stale="false" width="100%" height="auto" overflow="visible"><div class="stMarkdown" data-testid="stMarkdown"><div class="st-emotion-cache-6c7yup eqmt79k2"><div data-testid="stMarkdownContainer" class="st-emotion-cache-yn44r9 e1r33pru0"><div class="jarca-section-label"><span>🧭</span><span>자산 구성</span></div></div></div></div></div><div class="stElementContainer element-container st-emotion-cache-fmsvsf e1rw0b1u1" data-testid="stElementContainer" data-stale="false" width="100%" height="260px" overflow="visible"><div class="stSkeleton st-emotion-cache-7cllse e2obbcf4" data-testid="stSkeleton"></div></div><div class="stElementContainer element-container st-emotion-cache-3pwa5w e1rw0b1u1" data-testid="stElementContainer" data-stale="false" width="100%" height="auto" overflow="visible"><div class="stMarkdown" data-testid="stMarkdown"><div class="st-emotion-cache-6c7yup eqmt79k2"><div data-testid="stMarkdownContainer" class="st-emotion-cache-yn44r9 e1r33pru0"><div class="jarca-section-label"><span>📉</span><span>지출 구조/예산</span></div></div></div></div></div><div data-testid="stLayoutWrapper" class="st-emotion-cache-18kf3ut e1rw0b1u4" width="100%" height="auto" overflow="visible"><div direction="row" overflow="visible" height="auto" class="stHorizontalBlock st-emotion-cache-1permvm e1rw0b1u3" data-testid="stHorizontalBlock" data-test-scroll-behavior="normal"><div class="stColumn st-emotion-cache-wt0xm9 e1rw0b1u2" data-testid="stColumn"><div direction="column" height="100%" class="stVerticalBlock st-emotion-cache-wfksaw e1rw0b1u3" data-testid="stVerticalBlock"><div class="stElementContainer element-container st-emotion-cache-1vo6xi6 e1rw0b1u1" data-testid="stElementContainer" data-stale="false" width="100%" height="auto" overflow="visible"><div class="stSkeleton st-emotion-cache-7cllse e2obbcf4" data-testid="stSkeleton"></div></div></div></div><div class="stColumn st-emotion-cache-wt0xm9 e1rw0b1u2" data-testid="stColumn"><div direction="column" height="100%" class="stVerticalBlock st-emotion-cache-wfksaw e1rw0b1u3" data-testid="stVerticalBlock"><div class="stElementContainer element-container st-emotion-cache-1vo6xi6 e1rw0b1u1" data-testid="stElementContainer" data-stale="false" width="100%" height="auto" overflow="visible"><div class="stSkeleton st-emotion-cache-7cllse e2obbcf4" data-testid="stSkeleton"></div></div></div></div><div class="stColumn st-emotion-cache-wt0xm9 e1rw0b1u2" data-testid="stColumn"><div direction="column" height="100%" class="stVerticalBlock st-emotion-cache-wfksaw e1rw0b1u3" data-testid="stVerticalBlock"><div class="stElementContainer element-container st-emotion-cache-1vo6xi6 e1rw0b1u1" data-testid="stElementContainer" data-stale="false" width="100%" height="auto" overflow="visible"><div class="stSkeleton st-emotion-cache-7cllse e2obbcf4" data-testid="stSkeleton"></div></div></div></div></div></div></div></div><div data-testid="stAppIframeResizerAnchor" data-iframe-height="true" class="st-emotion-cache-1dumvfu eqt0gmo9"></div></section></div></div></div></div><div data-testid="portal" id="portal" class="st-emotion-cache-1q6lfs0 egah9gy0"></div></div><div class=""></div></div>
</body></html>