사용자 추가 (DB)
Entra ID 계정 생성
Entra
표시 이름
UPN
알림 이메일
전화번호
상태
웹관리자
덕원관리자
농장관리자
농장주
열람자
농장 접근
메모
접속
최종접속
작업
로딩 중...
미연결 관리자 / 농장주
계정(users) 미등록
전체 등록
아래 관리자/농장주는 농장 관리에는 등록되어 있지만 계정(users) 테이블에 없습니다.
시스템 구조 다이어그램
최종 업데이트 기준 — 변경 시 docs/architecture/overview.md 와 본 화면 동시 수정
프로세스 (업무 흐름)
비즈니스 (기능 단위)
서비스 (SaaS / PaaS)
컴포넌트 (리소스 상세)
덕원농장 시스템이 제공하는 8개 비즈니스 기능 을 한눈에 정리한 그림입니다.
왼쪽이 사용자, 중앙이 우리가 제공하는 서비스, 오른쪽이 데이터/외부 시스템.
현행본 (2026-05-16 갱신 — Databricks 폐기 반영)
flowchart LR
subgraph U["사용자"]
U1["본사 운영팀 ops_manager system_admin"]
U2["농장 사용자 farm_manager farm_owner"]
end
subgraph SVC["fss 서비스"]
direction TB
S_AUTH["인증 계정관리"]
S_FARM["농장 운영"]
S_SETTLE["정산"]
S_GRADE["등판정 데이터"]
S_BI["데이터 분석 Postgres ETL"]
S_AI["AI 어시스턴트 Claude"]
S_NOTIFY["알림 일정 email kakao"]
S_OPS["운영 관리"]
end
subgraph DATA["데이터"]
D_PG[("운영 DB Postgres")]
D_BLOB[("파일 스토리지 ADLS Gen2")]
end
subgraph EXT["외부 시스템"]
E_ENTRA["Entra ID"]
E_EKAPE["축산물원패스 EKAPE"]
E_GCAL["Google Calendar"]
E_AI["Anthropic 법제처"]
E_KAKAO["카카오 알림톡 솔라피 검수중"]
end
U1 ==> SVC
U2 ==> SVC
S_AUTH --- E_ENTRA
S_GRADE --- E_EKAPE
S_NOTIFY --- E_GCAL
S_NOTIFY -.-> E_KAKAO
S_AI --- E_AI
S_AUTH --> D_PG
S_FARM --> D_PG
S_SETTLE --> D_PG
S_GRADE --> D_PG
S_OPS --> D_PG
S_SETTLE --> D_BLOB
S_GRADE --> D_BLOB
S_BI --> D_PG
D_PG --> S_BI
classDef pending stroke-dasharray: 5 5,stroke:#999,color:#999
class E_KAKAO pending
이전 버전 보기 (~ 2026-05-04, Databricks 포함)
2026-05-04 시점 — Databricks Genie / gold layer 기반 BI 시절
flowchart LR
subgraph U["사용자"]
U1["본사 운영팀 ops_manager system_admin"]
U2["농장 사용자 farm_manager farm_owner"]
end
subgraph SVC["fss 서비스"]
direction TB
S_AUTH["인증 계정관리"]
S_FARM["농장 운영"]
S_SETTLE["정산"]
S_GRADE["등판정 데이터"]
S_BI["데이터 분석"]
S_AI["AI 어시스턴트"]
S_NOTIFY["알림 일정"]
S_OPS["운영 관리"]
end
subgraph DATA["데이터"]
D_PG[("운영 DB Postgres")]
D_LAKE[("데이터 레이크 Databricks gold")]
D_BLOB[("파일 스토리지")]
end
subgraph EXT["외부 시스템"]
E_ENTRA["Entra ID"]
E_EKAPE["축산물원패스 EKAPE"]
E_GCAL["Google Calendar"]
E_AI["Anthropic 법제처"]
E_KAKAO["카카오 알림톡 보류"]
end
U1 ==> SVC
U2 ==> SVC
S_AUTH --- E_ENTRA
S_GRADE --- E_EKAPE
S_NOTIFY --- E_GCAL
S_NOTIFY -.-> E_KAKAO
S_AI --- E_AI
S_AUTH --> D_PG
S_FARM --> D_PG
S_SETTLE --> D_PG
S_GRADE --> D_PG
S_OPS --> D_PG
S_SETTLE --> D_BLOB
S_BI --> D_PG
D_PG --> S_BI
S_BI --> D_LAKE
D_LAKE --> S_BI
classDef pending stroke-dasharray: 5 5,stroke:#999,color:#999
class E_KAKAO pending
덕원농장 시스템이 사용 중인 클라우드 서비스 (Azure · 외부 SaaS) 와 연계 방식 을 정리한 그림입니다.
굵은선 = 사용자 트래픽, 점선 = 비동기/스케줄, 실선 = 동기 호출. 인증·통신 방식은 아래 표 참조.
현행본 (2026-06-24 — 크롤러 VM → Container App Job 이관 / VM·Bastion·Automation·VNet 폐기 반영)
flowchart LR
subgraph CLIENT["클라이언트"]
BROWSER["웹 브라우저"]
GCAL_APP["Google Calendar 앱"]
end
subgraph AZURE["Azure Korea Central"]
direction TB
subgraph FRONT_AZ["사용자 접점"]
APPSVC["Azure App Service P0v3 컨테이너"]
ACR["Azure Container Registry fsswebappacr"]
end
subgraph SEC["인증 보안"]
ENTRA["Microsoft Entra ID"]
GRAPH["Microsoft Graph API"]
KV["Azure Key Vault"]
end
subgraph DATA_AZ["데이터 저장"]
PG["Azure Postgres Flexible Entra-only"]
ADLS["Azure Data Lake Storage Gen2"]
end
subgraph INFRA["크롤러 컴퓨트 (Container Apps Job)"]
CRAWLER["Container App Jobs 크롤러 ekape · court · mainfarm (Schedule cron)"]
end
subgraph COMM["커뮤니케이션"]
ACS["Azure Communication Services 메일"]
end
end
subgraph CICD["CI CD"]
GHA["GitHub Actions OIDC federated"]
end
subgraph EXT_SVC["외부 SaaS"]
ANTH["Anthropic API Claude"]
GCAL_SVC["Google Calendar"]
EKAPE["EKAPE 축산물원패스"]
COURT["대법원 나의사건검색"]
LAW["법제처 API"]
NOTION["Notion API"]
GMAIL["Gmail SMTP fallback"]
KAKAO["카카오 알림톡 Solapi 검수중"]
end
BROWSER ==> APPSVC
GCAL_APP -.-> GCAL_SVC
GCAL_SVC -.-> APPSVC
APPSVC --> ENTRA
ENTRA --> APPSVC
APPSVC --> GRAPH
APPSVC --> KV
APPSVC --> PG
APPSVC --> ADLS
APPSVC --> ANTH
APPSVC --> LAW
APPSVC --> NOTION
APPSVC --> ACS
APPSVC --> GMAIL
APPSVC -.-> KAKAO
APPSVC -.-> CRAWLER
CRAWLER --> KV
CRAWLER --> EKAPE
CRAWLER --> COURT
CRAWLER --> ADLS
CRAWLER --> APPSVC
GHA --> ACR
ACR --> APPSVC
ACR --> CRAWLER
classDef pending stroke-dasharray: 5 5,stroke:#999,color:#999
class KAKAO pending
서비스별 책임 / 인증 방식 표 보기
서비스
역할
인증 방식
Azure App Service 웹앱 호스팅 (사용자 진입점) Entra SSO + MI
Microsoft Entra ID 사용자 SSO + App Registration MSAL OAuth2 + PKCE
Microsoft Graph 계정 자동 생성·삭제 client credentials
Azure Postgres Flexible 운영 데이터 (트랜잭션) Entra-only (passwordAuth Disabled)
Azure Container Registry App Service 컨테이너 이미지 (fsswebappacr) MI + GitHub OIDC push
Azure Data Lake Storage 파일 (정산서 / 등판정 원본 / 출하 PNG) SAS / access connector
Azure Key Vault 시크릿 (EKAPE 자격증명, DB pwd 등) RBAC (MI)
Azure Communication Services 트랜잭션 메일 발송 REST API (MI)
Azure Container App Jobs 크롤러 (ekape 등판정 · court 소송 · mainfarm 본장) — Schedule cron, webapp 수동 트리거 UserAssigned MI (id-fss-crawler)
GitHub Actions CI/CD OIDC federated (PAT 없음)
Anthropic API Claude (AI 챗 / 기능 문의) API key
Google Calendar 농장 사용자 캘린더 구독 URL 토큰 (ICS)
EKAPE 등판정 데이터 원천 (등판정·본장 크롤러) 로그인 (Key Vault 자격증명)
대법원 나의사건검색 소송 사건진행 원천 (court 크롤러) 크롤링 (webapp push)
법제처 (law.go.kr) 법률 검색 API key
Notion API 작업 메모 동기화 API token
Gmail SMTP 메일 fallback App password
카카오 알림톡 (Solapi) 정보성 알림 발송 (검수 진행 중) Solapi v4 HMAC-SHA256
이전 버전 보기 (~ 2026-05-04, Databricks 포함)
2026-05-04 시점 — Databricks workspace + Genie + 양방향 sync 시절. App Service: B2 (코드 배포)
flowchart LR
subgraph CLIENT["클라이언트"]
BROWSER["웹 브라우저"]
GCAL_APP["Google Calendar 앱"]
end
subgraph AZURE["Azure Korea Central"]
direction TB
subgraph FRONT_AZ["사용자 접점"]
APPSVC["Azure App Service B2"]
end
subgraph SEC["인증 보안"]
ENTRA["Microsoft Entra ID"]
GRAPH["Microsoft Graph API"]
KV["Azure Key Vault"]
end
subgraph DATA_AZ["데이터 분석"]
PG["Azure Postgres Flexible"]
DBX["Azure Databricks"]
ADLS["Azure Data Lake Storage"]
end
subgraph INFRA["컴퓨트 운영"]
VM["Azure VM"]
BAST["Azure Bastion"]
AUTOMATE["Azure Automation"]
end
subgraph COMM["커뮤니케이션"]
ACS["Azure Communication Services"]
end
end
subgraph CICD["CI CD"]
GHA["GitHub Actions"]
end
subgraph EXT_SVC["외부 SaaS"]
ANTH["Anthropic API"]
GCAL_SVC["Google Calendar"]
EKAPE["EKAPE"]
LAW["법제처 API"]
NOTION["Notion API"]
GMAIL["Gmail SMTP"]
KAKAO["카카오 알림톡"]
end
BROWSER ==> APPSVC
GCAL_APP -.-> GCAL_SVC
GCAL_SVC -.-> APPSVC
APPSVC --> ENTRA
ENTRA --> APPSVC
APPSVC --> GRAPH
APPSVC --> KV
APPSVC --> PG
APPSVC --> DBX
DBX --> APPSVC
APPSVC --> ANTH
APPSVC --> LAW
APPSVC --> NOTION
APPSVC --> ACS
APPSVC --> GMAIL
APPSVC -.-> KAKAO
DBX --> PG
PG --> DBX
DBX --> ADLS
ADLS --> DBX
VM --> KV
VM --> EKAPE
VM --> APPSVC
BAST -.-> VM
AUTOMATE -.-> VM
GHA --> APPSVC
classDef pending stroke-dasharray: 5 5,stroke:#999,color:#999
class KAKAO pending
실제 Azure 리소스 인스턴스 단위 상세 구조 입니다. 운영자 / IT 트러블슈팅용.
리소스명·SKU·서브넷·인증 방식까지 표기. 일반 사용자에게는 너무 기술적이므로 비즈니스/서비스 탭을 사용하세요.
현행본 (2026-06-24 az 직접 조회 — 크롤러 VM → Container App Job 3개 이관 / VM·Bastion·NSG·공인IP·Automation·VNet 폐기)
flowchart LR
subgraph USERS["사용자"]
U_OPS["ops_manager system_admin"]
U_FARM["farm_manager farm_owner"]
end
subgraph AZURE["Azure rg_dukwon Korea Central"]
direction TB
subgraph APPSVC_GRP["App Service Plan P0v3 Linux ASP-rgdukwon-af6c"]
WEB_DEV["fss-webapp-dev fss-dev.dukwonfarm.com"]
WEB_PRD["fss-webapp-prd fss.dukwonfarm.com"]
SLOT_DEV["dev staging slot"]
SLOT_PRD["prd staging slot"]
end
ACR["fsswebappacr Basic"]
subgraph IDENT["Managed Identity"]
ID_DEV["id-webapp-dev"]
ID_PRD["id-webapp-prd"]
ID_CRAWLER["id-fss-crawler 크롤러 Job용"]
OIDC1["oidc-msi-a8be GH OIDC"]
OIDC2["oidc-msi-a7c2 GH OIDC"]
end
PG[("fss-db Postgres Flexible Standard_B2s Entra-only")]
KV[("key-for-fssgradeuploader Key Vault")]
subgraph CAE_GRP["cae-fss-crawler Container Apps Environment"]
CR_EKAPE["fss-crawler-ekape Schedule 10,14,23 UTC"]
CR_COURT["fss-crawler-court Schedule 04,09,23 UTC"]
CR_MAIN["fss-crawler-mainfarm Schedule 10,14,23 UTC"]
end
STORAGE[("externaladlsdukwon ADLS Gen2 Standard_LRS")]
ADLS_CONN["access_xls-uploader ADLS access connector"]
subgraph COMM["Azure Communication Services Global"]
ACS_COMM["fss-communication"]
ACS_EMAIL["fss-email"]
end
end
subgraph ENTRA_BOX["Microsoft Entra ID"]
ENTRA["App Registration"]
GRAPH["Microsoft Graph"]
end
subgraph EXT["외부 시스템"]
EKAPE["축산물원패스 EKAPE"]
COURT["대법원 나의사건검색"]
GCAL["Google Calendar"]
GMAIL["Gmail SMTP fallback"]
KAKAO_C["솔라피 카카오 알림톡 검수중"]
ANTH["Anthropic API"]
LAW["법제처 API"]
NOTION["Notion API"]
end
subgraph GH["GitHub"]
REPO["fss-webapp repo"]
GA_DEV["dev_fss-webapp-dev.yml"]
GA_PRD["main_fss-webapp-prd.yml"]
end
U_OPS ==> WEB_DEV
U_OPS ==> WEB_PRD
U_FARM ==> WEB_PRD
GCAL -.-> WEB_PRD
WEB_DEV --> PG
WEB_PRD --> PG
WEB_DEV -.-> ID_DEV
WEB_PRD -.-> ID_PRD
WEB_DEV --> ENTRA
WEB_PRD --> ENTRA
ENTRA --> WEB_DEV
ENTRA --> WEB_PRD
WEB_PRD --> GRAPH
WEB_PRD --> KV
WEB_PRD --> ANTH
WEB_PRD --> LAW
WEB_PRD --> NOTION
WEB_PRD --> ACS_COMM
ACS_COMM --> ACS_EMAIL
WEB_DEV --> STORAGE
WEB_PRD --> STORAGE
ADLS_CONN -.-> STORAGE
WEB_PRD -.->|ARM 수동 트리거 MI| CR_EKAPE
WEB_PRD -.->|ARM 수동 트리거 MI| CR_COURT
WEB_PRD -.->|ARM 수동 트리거 MI| CR_MAIN
CR_EKAPE -.-> ID_CRAWLER
CR_COURT -.-> ID_CRAWLER
CR_MAIN -.-> ID_CRAWLER
CR_EKAPE --> KV
CR_COURT --> KV
CR_MAIN --> KV
CR_EKAPE --> EKAPE
CR_MAIN --> EKAPE
CR_COURT --> COURT
CR_EKAPE --> STORAGE
CR_MAIN --> STORAGE
CR_EKAPE -->|x-api-key| WEB_PRD
CR_COURT -->|x-api-key| WEB_PRD
CR_MAIN -->|x-api-key| WEB_PRD
WEB_PRD -.-> KAKAO_C
WEB_PRD -.-> GMAIL
REPO --> GA_DEV
REPO --> GA_PRD
GA_DEV --> OIDC1
GA_PRD --> OIDC2
OIDC1 --> ACR
OIDC2 --> ACR
ACR --> WEB_DEV
ACR --> WEB_PRD
ACR --> CR_EKAPE
ACR --> CR_COURT
ACR --> CR_MAIN
WEB_DEV -.- SLOT_DEV
WEB_PRD -.- SLOT_PRD
classDef pending stroke-dasharray: 5 5,stroke:#999,color:#999
class KAKAO_C pending
이전 버전 보기 (~ 2026-05-04, Databricks Workspace + SCIM 포함)
2026-05-04 이전 — dbx_dukwon workspace + Unity Catalog + Genie + 양방향 sync (JOB1 pg_to_databricks_merge / JOB2 gold_to_pg_grading_sync). SP_DUKWON 노트북 인증 SP. App Service: B2 (코드 배포)
flowchart LR
subgraph USERS["사용자"]
U_OPS["ops_manager system_admin"]
U_FARM["farm_manager farm_owner"]
end
subgraph AZURE["Azure rg_dukwon Korea Central"]
direction TB
subgraph APPSVC_GRP["App Service Plan B2 Linux"]
WEB_DEV["fss-webapp-dev"]
WEB_PRD["fss-webapp-prd"]
end
subgraph IDENT["Managed Identity"]
ID_DEV["id-webapp-dev"]
ID_PRD["id-webapp-prd"]
OIDC1["oidc-msi-a8be"]
OIDC2["oidc-msi-a7c2"]
end
PG[("fss-db Postgres Flexible")]
KV[("key-for-fssgradeuploader Key Vault")]
subgraph NET["VNet vnet_dukwon"]
SUBNET_DEF["subnet default"]
SUBNET_DBX["subnet dbxhost"]
SUBNET_VM["subnet dbxcontainer"]
BAST["vnet_dukwon-bastion"]
end
subgraph VM_GRP["fss-gradeuploader VM"]
VM_HOST["Standard_B2s Ubuntu 24.04"]
AUTOSTART["vm-auto-start Automation"]
AUTOSTOP["DevTestLab schedule"]
end
STORAGE[("externaladlsdukwon ADLS Gen2")]
subgraph COMM["Azure Communication Services"]
ACS_COMM["fss-communication"]
ACS_EMAIL["fss-email"]
end
end
subgraph DBX_BOX["Databricks Workspace dbx_dukwon"]
direction TB
DBX_URL["adb-3997551919284009 azuredatabricks net"]
UC[("Unity Catalog")]
GOLD[("gold layer delta")]
JOB1["pg_to_databricks_merge"]
JOB2["gold_to_pg_grading_sync"]
GENIE["Genie SQL Warehouse"]
SCIM["SCIM API"]
DBX_AC["unity-catalog-access-connector"]
DBX_MI["dbmanagedidentity"]
end
subgraph ENTRA_BOX["Microsoft Entra ID"]
ENTRA["App Registration"]
GRAPH["Microsoft Graph"]
SP_DUKWON["Service Principal dukwon"]
end
subgraph EXT["외부 시스템"]
EKAPE["축산물원패스 EKAPE"]
GCAL["Google Calendar"]
GMAIL["Gmail SMTP"]
KAKAO_C["카카오 알림톡 보류"]
ANTH["Anthropic API"]
LAW["법제처 API"]
NOTION["Notion API"]
end
subgraph GH["GitHub"]
REPO["fss-webapp"]
GA_DEV["dev_fss-webapp-dev.yml"]
GA_PRD["main_fss-webapp-prd.yml"]
end
U_OPS ==> WEB_DEV
U_OPS ==> WEB_PRD
U_FARM ==> WEB_PRD
GCAL -.-> WEB_PRD
WEB_DEV --> PG
WEB_PRD --> PG
WEB_DEV -.-> ID_DEV
WEB_PRD -.-> ID_PRD
WEB_DEV --> ENTRA
WEB_PRD --> ENTRA
ENTRA --> WEB_DEV
ENTRA --> WEB_PRD
WEB_PRD --> GRAPH
WEB_PRD --> KV
VM_HOST --> KV
WEB_PRD --> GENIE
GENIE --> WEB_PRD
WEB_PRD --> SCIM
WEB_PRD --> ANTH
WEB_PRD --> LAW
WEB_PRD --> NOTION
WEB_PRD --> ACS_COMM
ACS_COMM --> ACS_EMAIL
JOB1 -.-> PG
JOB2 -.-> PG
JOB1 -.-> SP_DUKWON
JOB2 -.-> SP_DUKWON
SP_DUKWON -.-> PG
DBX_AC --> STORAGE
UC --- DBX_AC
GOLD --- UC
VM_HOST --> EKAPE
VM_HOST --> WEB_PRD
VM_HOST -.- SUBNET_VM
BAST -.-> VM_HOST
WEB_PRD -.-> KAKAO_C
WEB_PRD -.-> GMAIL
REPO --> GA_DEV
REPO --> GA_PRD
GA_DEV --> OIDC1
GA_PRD --> OIDC2
OIDC1 --> WEB_DEV
OIDC2 --> WEB_PRD
WEB_PRD -.-> PG
classDef pending stroke-dasharray: 5 5,stroke:#999,color:#999
class KAKAO_C pending
업무 프로세스 BPMN 스윔레인 — bpmn-js(BPMN 2.0) 뷰어로 렌더합니다.
가로 풀(Pool)=프로세스, 가로 레인(Lane)=액터(시스템/사용자 그룹), 흐름은 BPMN 표기(시작/종료 이벤트·태스크·게이트웨이·시퀀스 플로우)를 따릅니다.
휠로 확대/축소, 드래그로 이동할 수 있습니다.
현행본 2026-05-24 · 구현 기능 기준
A. 자동 데이터 파이프라인 (사람 개입 없음)
P1. 등판정 수집 → 적재·가공 → 출하분석
B. 사람 개입 프로세스
P2. 일별 사육 입력 → 폐사율 알림
P3. 출하 정산서 처리
P4. 계정 · 권한(RBAC) 관리
이전 버전 보기 — Mermaid 로 그린 버전 (~ 2026-05-24)
bpmn-js 도입 전 — Mermaid subgraph 로 액터를 묶던 버전(가로 레인 정렬은 미지원). 프로세스 6종.
P1. 등판정 수집 · ETL · 매칭
flowchart LR
subgraph VM["크롤링 VM (fss-gradeuploader)"]
direction TB
v1["축평원 등판정 다운로드"]
v2["등판정 파일 업로드 API"]
v3["업로드 로그 기록 API"]
v1 --> v2 --> v3
end
subgraph WEB1["웹시스템 (fss-webapp)"]
direction TB
w1["파일 수신/저장"]
w2["ETL 적재 bronze/silver/gold"]
w3["농장 귀속/단가 매칭"]
w4["실패 또는 미매핑 시 알림"]
w1 --> w2 --> w3 --> w4
end
subgraph OPS1["덕원관리자"]
o1["이상 알림 확인"]
end
v2 --> w1
v3 --> w1
w4 -->|"email/kakao"| o1
P2. 출하분석 리포트 자동 발송
flowchart LR
subgraph WEB2["웹시스템 (fss-webapp)"]
direction TB
a1["출하 ETL 완료 트리거"]
a2["리포트 HTML 렌더 후 PNG 캡처"]
a3["수신자 결정 통합 리스트"]
a4["메일 발송 SMTP"]
a1 --> a2 --> a3 --> a4
end
subgraph RCP2["수신자 (구독자)"]
r1["출하분석 메일 수신"]
end
a4 --> r1
P3. 정기 알림 (폐사율 · 일정)
flowchart LR
subgraph SCH["웹시스템 스케줄러"]
direction TB
s1["cron 발화 폐사율/일정"]
s2["주말/공휴일 게이트 체크"]
s3["수신자/변수 구성"]
s1 --> s2 --> s3
end
subgraph DSP["웹시스템 디스패처"]
direction TB
d1["email 발송"]
d2["kakao 알림톡 발송"]
end
subgraph RCP3["수신자 (농장주/운영팀)"]
r1["알림 수신"]
end
s3 --> d1
s3 --> d2
d1 --> r1
d2 --> r1
P4. 계정 · 권한(RBAC) 관리
flowchart LR
subgraph ADM["웹관리자 system_admin"]
direction TB
a1["계정 생성/삭제 요청"]
a2["RBAC 권한 부여/회수"]
a1 --> a2
end
subgraph WEB4["웹시스템 (fss-webapp)"]
direction TB
w1["Graph API 계정 처리"]
w2["users/user_roles 갱신"]
end
subgraph EXT4["Entra ID, Graph"]
e1["계정 생성/삭제 반영"]
end
a1 --> w1
a2 --> w2
w1 --> e1
P5. 일별 사육 이벤트 입력
flowchart LR
subgraph FM["농장관리자 (담당 농장)"]
direction TB
f1["일별 이벤트 입력 입식/폐사/출하/전출"]
f2["벌크 저장"]
f1 --> f2
end
subgraph WEB5["웹시스템 (fss-webapp)"]
direction TB
w1["이벤트 검증/저장"]
w2["사육두수/폐사율 집계"]
w1 --> w2
end
subgraph VIEW5["농장주/운영팀 조회"]
v1["현황/폐사율 리포트 조회"]
end
f2 --> w1
w2 --> v1
P6. 출하 정산서 처리
flowchart LR
subgraph OPS6["덕원관리자"]
direction TB
o1["정산서 파일 업로드 위탁/출하"]
o2["파싱 결과 검증/확정"]
o1 --> o2
end
subgraph WEB6["웹시스템 (fss-webapp)"]
direction TB
w1["정산서 결정론 파싱"]
w2["정산 데이터 저장"]
w1 --> w2
end
subgraph OWN6["농장주 (담당 농장)"]
n1["본인 정산서 조회"]
end
o1 --> w1
o2 --> w2
w2 --> n1