Files
jsahn 4e943700fc feat: add common utilities and feedback handling scripts
- Introduced common.js for shared functions including API calls, error reporting, and UI helpers.
- Implemented feedback.js for the feedback reporting page, including form handling and displaying feedback status.
- Added layout.js for managing galaxy and section layouts in the visualization.
- Created login.js for user authentication with session management.
- Developed search.js for term searching based on user input and synonyms.
- Implemented signup.js for user registration with validation and immediate login.
2026-10-06 23:14:45 +09:00

143 lines
5.3 KiB
Python

"""교재 PDF 목록과 은하(대단원) 구성.
은하는 2026 지역사회간호학 목차의 9개 장을 기준으로 삼고,
나머지 교재의 장은 아래 매핑표로 가장 가까운 은하에 연결한다.
"""
from pathlib import Path
import fnmatch
import unicodedata
ROOT = Path(__file__).resolve().parent.parent
DATA_DIR = ROOT / "data"
def _find(pattern: str) -> str:
nfc = lambda x: unicodedata.normalize("NFC", x)
hits = sorted(str(p) for p in ROOT.iterdir() if fnmatch.fnmatch(nfc(p.name), nfc(pattern)))
if not hits:
raise FileNotFoundError(pattern)
return hits[0]
# toc_pages / index_pages: 0부터 시작하는 PDF 파일상 페이지 번호
BOOKS = [
{
"book_id": "cn26a",
"title": "지역사회간호학 1권",
"short": "지간 2026-1",
"edition": "2026",
"year": 2026,
"primary": True,
"file": lambda: _find("2026 지역사회간호학 1권.pdf"),
"toc_style": "cn2026",
"toc_pages": range(6, 17),
"index_pages": range(402, 408),
},
{
"book_id": "cn26b",
"title": "지역사회간호학 2권",
"short": "지간 2026-2",
"edition": "2026",
"year": 2026,
"primary": True,
"file": lambda: _find("2026 지역사회간호학 2권.pdf"),
"toc_style": "cn2026",
"toc_pages": range(6, 14),
"index_pages": range(312, 317),
},
{
"book_id": "pac23a",
"title": "지역사회간호학 1 (5판, 퍼시픽북스)",
"short": "퍼시픽 5판-1",
"edition": "5판",
"year": 2023,
"primary": False,
"file": lambda: _find("*pacific*-1_*.pdf"),
"toc_style": "pacific",
"toc_pages": range(9, 17),
"index_pages": None, # 자동 탐지
},
{
"book_id": "pac23b",
"title": "지역사회간호학 2 (5판, 퍼시픽북스)",
"short": "퍼시픽 5판-2",
"edition": "5판",
"year": 2023,
"primary": False,
"file": lambda: _find("*pacific*-2_*.pdf"),
"toc_style": "pacific",
"toc_pages": range(9, 17),
"index_pages": None,
},
{
"book_id": "he23",
"title": "보건교육학",
"short": "보건교육학 2023",
"edition": "2023",
"year": 2023,
"primary": False,
"file": lambda: _find("2023 보건교육학*.pdf"),
"toc_style": "healthedu",
"toc_pages": range(5, 12),
"index_pages": range(305, 309),
},
]
# 은하 = 2026 교재의 장. sub(쉬운 보조 설명)는 교수자 검수 대상 초안.
GALAXIES = [
{"id": "g1", "chapter_no": 1, "name": "지역사회간호개론", "sub": "지역사회와 간호의 기본 생각", "color": "#9de0cc"},
{"id": "g2", "chapter_no": 2, "name": "지역사회보건행정", "sub": "제도·정책·조직으로 건강 지키기", "color": "#e5a7c5"},
{"id": "g3", "chapter_no": 3, "name": "지역사회 간호과정", "sub": "문제를 찾고, 해결하고, 돌아보기", "color": "#c4a5ff"},
{"id": "g4", "chapter_no": 4, "name": "건강증진", "sub": "건강하게 살아갈 힘 기르기", "color": "#8fd694"},
{"id": "g5", "chapter_no": 5, "name": "보건교육", "sub": "건강을 배우고 실천하도록 돕기", "color": "#f2d17c"},
{"id": "g6", "chapter_no": 6, "name": "역학", "sub": "질병은 얼마나, 누구에게, 왜 생길까", "color": "#93c8f3"},
{"id": "g7", "chapter_no": 7, "name": "생애주기별 인구집단 간호", "sub": "아기부터 노인까지 나이에 맞는 돌봄", "color": "#f0a98a"},
{"id": "g8", "chapter_no": 8, "name": "건강문제별 인구집단 간호", "sub": "감염병·만성질환 등 문제별 관리", "color": "#ef8f9f"},
{"id": "g9", "chapter_no": 9, "name": "생활터별 인구집단 간호", "sub": "가정·학교·일터·환경에서의 돌봄", "color": "#e5bd8a"},
]
# 보조 교재 장 번호 → 은하. (book_id, 장 번호) 기준, 절 제목 키워드로 덮어쓸 수 있음.
SECONDARY_CHAPTER_MAP = {
("pac23a", 1): "g1",
("pac23a", 2): "g2",
("pac23a", 3): "g3",
("pac23a", 4): "g3",
("pac23a", 5): "g4",
("pac23b", 6): "g9",
("pac23b", 7): "g7",
("pac23b", 8): "g6",
("pac23b", 9): "g8",
("pac23b", 10): "g9",
("pac23b", 11): "g8",
("he23", None): "g5",
}
# 절/항 제목에 이 키워드가 있으면 해당 은하로 보냄 (보조 교재에만 적용)
SECONDARY_KEYWORD_MAP = [
("보건교육", "g5"),
("건강증진", "g4"),
("역학", "g6"),
("가족", "g9"),
("학교", "g9"),
("산업", "g9"),
("환경", "g9"),
("재난", "g8"),
("감염", "g8"),
("만성질환", "g8"),
]
# 보조 교재 목차 경로에 키워드가 있으면 2026 교재의 해당 제목 절로 우선 배정
SECONDARY_SECTION_OVERRIDES = [
("산업", "직업건강간호"),
("작업환경", "직업건강간호"),
("근로자", "직업건강간호"),
("재난", "재난관리"),
("학교", "학교보건"),
("학생", "학교보건"),
("가족", "가족간호"),
("보건통계", "역학적 측정지표"),
("모자보건", "모자보건사업"),
("영유아", "모자보건사업"),
("노인", "노인보건사업"),
("재활", "재활간호사업"),
]