올스틸 새 OS — 시스템 구조
아키텍처 (계층 의존)
graph TD API[api 어댑터] --> SVC[services] SVC --> CORE[core 앵커·파이프라인] SVC --> DOM[domain/steel 철강지식] SVC --> PERS[persistence DB] DOM --> CORE PERS --> CORE
계층
apiHTTP 어댑터 (얇음, services 만 호출)
routes · schemas · structureservices서비스-우선 — 비즈니스 로직 경계
spec · price · material · party · order · storescore철강 모르는 일반 앵커·파이프라인 (내구 자산)
spec · material · registry · pricing · party · orderdomain/steel철강 지식 도메인 팩 (코어 수정 없이 추가)
shapes · ops · standard_tables · config · materialspersistenceDB 저장소 — SQLAlchemy sync only
models · mappers · db_stores데이터 모델 (앵커 관계)
graph LR PARTY[Party 고객·거래처] SPEC[SpecObject 사양] ORDER[Order 견적=주문] MAT[Material 재질] BRK[Breakdown 가격분해] PROJ[Project 철골공사] NOTE[ProjectNote 협의기록] ORDER -->|party_id| PARTY ORDER -->|lines spec_id+수량| SPEC SPEC -->|material_code| MAT SPEC -->|price.compute| BRK PROJ -->|발주처 party_id| PARTY NOTE -->|project_id| PROJ
주문 상태머신 (견적=주문)
stateDiagram-v2 [*] --> draft draft --> cancelled draft --> quoted quoted --> cancelled quoted --> draft quoted --> ordered ordered --> cancelled ordered --> completed
엔티티 (코어 dataclass)
Party core
고객·거래처 통합 앵커 (tail-8 매칭)
id : str
name : str
kind : str
phone : Optional[str]
email : Optional[str]
tier : str
memo : Optional[str]
created_at : Optional[str]
updated_at : Optional[str]
SpecObject core
4분야 통합 사양객체 앵커
id : str
category : str
kind : Optional[str]
name : str
geometry : Geometry
material_code : str
process_chain : list[ProcessStep]
attachments : list[Component]
sku_code : Optional[str]
lineage : Lineage
status : str
promoted : bool
derived : Optional[Derived]
Order core
견적=주문 한 엔티티 + 상태머신
id : str
party_id : str
status : str
channel : str
lines : list[OrderLine]
memo : Optional[str]
created_at : Optional[str]
updated_at : Optional[str]
OrderLine core
주문 라인 — 척추 가격 스냅샷
spec_id : str
quantity : int
channel : str
breakdown : Breakdown
Material core
재질 마스터 (비중·소재단가)
code : str
name : str
category : str
density : float
base_cost : float
props : Optional[dict]
Breakdown core
가격 분해 — 단계별 감사 로그
unit_weight : float
total_weight : float
material_cost : float
process_cost : float
cost : float
price : dict[str, float]
weight_source : str
lines : list[dict]
Project core
철골 공사 — 협의~시공 라이프사이클 추적
id : str
name : str
party_id : Optional[str]
client_name : Optional[str]
location : Optional[str]
tonnage : Optional[float]
contract_amount : Optional[float]
period_from : Optional[str]
period_to : Optional[str]
stage : str
status : str
summary : Optional[str]
created_at : Optional[str]
updated_at : Optional[str]
ProjectNote core
공사 협의/요구사항/이슈 기록
id : str
project_id : str
kind : str
title : str
body : str
verdict : str
status : str
counterpart : Optional[str]
occurred_at : Optional[str]
created_at : Optional[str]
API 엔드포인트 (openapi)
| METHOD | PATH | 도메인 |
|---|---|---|
| GET | / | |
| GET | /assets/ui.css | |
| GET | /assets/ui.js | |
| GET | /health | |
| GET | /material | material |
| GET | /material/{code} | material |
| POST | /order | order |
| GET | /order | order |
| GET | /order/{order_id} | order |
| POST | /order/{order_id}/lines | order |
| POST | /order/{order_id}/transition | order |
| GET | /party | party |
| POST | /party | party |
| POST | /party/merge | party |
| POST | /party/upsert | party |
| GET | /party/{party_id} | party |
| POST | /price/compute | price |
| GET | /project | project |
| POST | /project | project |
| PATCH | /project/notes/{note_id} | project |
| GET | /project/stages | project |
| GET | /project/{project_id} | project |
| PATCH | /project/{project_id} | project |
| POST | /project/{project_id}/notes | project |
| GET | /project/{project_id}/notes | project |
| POST | /project/{project_id}/stage | project |
| GET | /projects | web |
| GET | /quote | web |
| GET | /spec | spec |
| POST | /spec | spec |
| GET | /spec/{spec_id} | spec |
| POST | /spec/{spec_id}/promote | spec |
| GET | /structure | structure |
| GET | /structure.json | structure |
빌드 상태
✓ 척추 가격엔진(결정론)✓ 상거래 Party·Order✓ API 어댑터✓ DB 영속화(PostgreSQL)✓ TLS/HTTPS✓ 간단 프론트(/quote)✓ 철골 공사(/projects 협의추적)
○ 견적 가격 실값(ERP 포팅)○ 인증○ MCP 어댑터○ 도메인 placeholder 실데이터○ Alembic 마이그레이션○ 고객 워크스페이스(채널 인입)