@jjlmoya/utils-forensic-science 1.12.0 → 1.14.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/package.json +2 -1
- package/src/category/index.ts +63 -59
- package/src/category/seo.astro +1 -1
- package/src/components/PreviewNavSidebar.astro +1 -1
- package/src/components/PreviewToolbar.astro +1 -1
- package/src/data.ts +1 -1
- package/src/entries.ts +74 -68
- package/src/env.d.ts +1 -1
- package/src/index.ts +33 -31
- package/src/pages/[locale]/[slug].astro +161 -159
- package/src/pages/[locale].astro +8 -5
- package/src/pages/index.astro +1 -1
- package/src/tests/bibliography_wellformed_export.test.ts +46 -0
- package/src/tests/diacritics_density.test.ts +1 -1
- package/src/tests/faq_count.test.ts +19 -19
- package/src/tests/i18n_coverage.test.ts +36 -36
- package/src/tests/inverted_punctuation.test.ts +1 -1
- package/src/tests/locale_completeness.test.ts +2 -2
- package/src/tests/mocks/astro_mock.js +1 -1
- package/src/tests/no_h1_in_components.test.ts +1 -1
- package/src/tests/script_density.test.ts +94 -94
- package/src/tests/seo_length.test.ts +46 -46
- package/src/tests/seo_parity.test.ts +2 -7
- package/src/tests/seo_translation_completeness.test.ts +68 -0
- package/src/tests/seo_wellformed_export.test.ts +65 -0
- package/src/tests/tool_validation.test.ts +2 -2
- package/src/tests/translation_copy.test.ts +23 -24
- package/src/tool/bloodstain-pattern-origin-analyzer/component.astro +9 -9
- package/src/tool/bloodstain-pattern-origin-analyzer/i18n/zh.ts +1 -1
- package/src/tool/dna-profile-match-probability-lab/bibliography.astro +14 -0
- package/src/tool/dna-profile-match-probability-lab/bibliography.ts +16 -0
- package/src/tool/dna-profile-match-probability-lab/component.astro +121 -0
- package/src/tool/dna-profile-match-probability-lab/controller.ts +159 -0
- package/src/tool/dna-profile-match-probability-lab/dna-profile-match-probability-lab.css +485 -0
- package/src/tool/dna-profile-match-probability-lab/dom-views.ts +93 -0
- package/src/tool/dna-profile-match-probability-lab/entry.ts +29 -0
- package/src/tool/dna-profile-match-probability-lab/evaluator.ts +19 -0
- package/src/tool/dna-profile-match-probability-lab/i18n/de.ts +43 -0
- package/src/tool/dna-profile-match-probability-lab/i18n/en.ts +196 -0
- package/src/tool/dna-profile-match-probability-lab/i18n/es.ts +40 -0
- package/src/tool/dna-profile-match-probability-lab/i18n/fr.ts +10 -0
- package/src/tool/dna-profile-match-probability-lab/i18n/id.ts +41 -0
- package/src/tool/dna-profile-match-probability-lab/i18n/it.ts +10 -0
- package/src/tool/dna-profile-match-probability-lab/i18n/ja.ts +40 -0
- package/src/tool/dna-profile-match-probability-lab/i18n/ko.ts +40 -0
- package/src/tool/dna-profile-match-probability-lab/i18n/nl.ts +29 -0
- package/src/tool/dna-profile-match-probability-lab/i18n/pl.ts +10 -0
- package/src/tool/dna-profile-match-probability-lab/i18n/pt.ts +41 -0
- package/src/tool/dna-profile-match-probability-lab/i18n/ru.ts +29 -0
- package/src/tool/dna-profile-match-probability-lab/i18n/sv.ts +41 -0
- package/src/tool/dna-profile-match-probability-lab/i18n/tr.ts +10 -0
- package/src/tool/dna-profile-match-probability-lab/i18n/zh.ts +29 -0
- package/src/tool/dna-profile-match-probability-lab/index.ts +11 -0
- package/src/tool/dna-profile-match-probability-lab/localize.ts +107 -0
- package/src/tool/dna-profile-match-probability-lab/logic.test.ts +56 -0
- package/src/tool/dna-profile-match-probability-lab/logic.ts +139 -0
- package/src/tool/dna-profile-match-probability-lab/seo.astro +15 -0
- package/src/tool/dna-profile-match-probability-lab/storage.ts +26 -0
- package/src/tool/dna-profile-match-probability-lab/ui.ts +3 -0
- package/src/tool/fire-pattern-origin-analyzer/component.astro +1 -1
- package/src/tool/fire-pattern-origin-analyzer/i18n/zh.ts +5 -1
- package/src/tool/fire-pattern-origin-analyzer/logic.ts +9 -2
- package/src/tool/fire-pattern-origin-analyzer/view-bindings.ts +8 -4
- package/src/tool/fire-pattern-origin-analyzer/view-model.ts +6 -2
- package/src/tool/forensic-age-estimator/bibliography.astro +1 -1
- package/src/tool/forensic-age-estimator/component.astro +1 -1
- package/src/tool/forensic-age-estimator/entry.ts +17 -17
- package/src/tool/forensic-age-estimator/i18n/de.ts +244 -244
- package/src/tool/forensic-age-estimator/i18n/en.ts +244 -244
- package/src/tool/forensic-age-estimator/i18n/es.ts +244 -244
- package/src/tool/forensic-age-estimator/i18n/fr.ts +244 -244
- package/src/tool/forensic-age-estimator/i18n/id.ts +244 -244
- package/src/tool/forensic-age-estimator/i18n/it.ts +244 -244
- package/src/tool/forensic-age-estimator/i18n/nl.ts +244 -244
- package/src/tool/forensic-age-estimator/i18n/pl.ts +244 -244
- package/src/tool/forensic-age-estimator/i18n/pt.ts +244 -244
- package/src/tool/forensic-age-estimator/i18n/ru.ts +244 -244
- package/src/tool/forensic-age-estimator/i18n/sv.ts +244 -244
- package/src/tool/forensic-age-estimator/i18n/tr.ts +244 -244
- package/src/tool/forensic-age-estimator/i18n/zh.ts +245 -245
- package/src/tool/forensic-age-estimator/index.ts +1 -1
- package/src/tool/forensic-age-estimator/seo.astro +1 -1
- package/src/tool/forensic-blood-test-simulator/component.astro +1 -1
- package/src/tool/forensic-fiber-comparison-microscope/component.astro +1 -1
- package/src/tool/forensic-fiber-comparison-microscope/render.ts +1 -1
- package/src/tool/forensic-fiber-comparison-microscope/view.ts +1 -1
- package/src/tool/forensic-fingerprint-minutiae-identifier/component.astro +2 -2
- package/src/tool/forensic-fingerprint-minutiae-identifier/i18n/ja.ts +2 -1
- package/src/tool/forensic-fingerprint-minutiae-identifier/i18n/zh.ts +2 -0
- package/src/tool/forensic-fingerprint-minutiae-identifier/renderer.ts +9 -8
- package/src/tool/forensic-glass-becke-line-simulator/component.astro +1 -1
- package/src/tool/forensic-glass-becke-line-simulator/view.ts +8 -6
- package/src/tool/forensic-image-authenticity-analyzer/component.astro +1 -1
- package/src/tool/forensic-image-authenticity-analyzer/i18n/de.ts +105 -105
- package/src/tool/forensic-image-authenticity-analyzer/i18n/en.ts +105 -105
- package/src/tool/forensic-image-authenticity-analyzer/i18n/es.ts +105 -105
- package/src/tool/forensic-image-authenticity-analyzer/i18n/fr.ts +105 -105
- package/src/tool/forensic-image-authenticity-analyzer/i18n/id.ts +95 -90
- package/src/tool/forensic-image-authenticity-analyzer/i18n/it.ts +105 -105
- package/src/tool/forensic-image-authenticity-analyzer/i18n/ja.ts +7 -2
- package/src/tool/forensic-image-authenticity-analyzer/i18n/ko.ts +4 -1
- package/src/tool/forensic-image-authenticity-analyzer/i18n/nl.ts +95 -92
- package/src/tool/forensic-image-authenticity-analyzer/i18n/pl.ts +95 -92
- package/src/tool/forensic-image-authenticity-analyzer/i18n/pt.ts +105 -105
- package/src/tool/forensic-image-authenticity-analyzer/i18n/ru.ts +97 -92
- package/src/tool/forensic-image-authenticity-analyzer/i18n/sv.ts +97 -93
- package/src/tool/forensic-image-authenticity-analyzer/i18n/tr.ts +98 -93
- package/src/tool/forensic-image-authenticity-analyzer/i18n/zh.ts +11 -0
- package/src/tool/forensic-microcrystal-drug-simulator/component.astro +1 -1
- package/src/tool/forensic-sex-determinator/component.astro +3 -2
- package/src/tool/forensic-stature-estimator/component.astro +1 -1
- package/src/tool/forensic-stature-estimator/i18n/id.ts +4 -0
- package/src/tool/forensic-stature-estimator/i18n/nl.ts +4 -0
- package/src/tool/forensic-stature-estimator/i18n/ru.ts +4 -0
- package/src/tool/forensic-tlc-ink-simulator/component.astro +1 -1
- package/src/tool/forensic-tlc-ink-simulator/i18n/zh.ts +1 -0
- package/src/tool/forensic-toolmark-striation-matcher/component.astro +1 -1
- package/src/tool/forensic-toolmark-striation-matcher/logic.ts +1 -1
- package/src/tool/forensic-toolmark-striation-matcher/renderer.ts +7 -6
- package/src/tool/forensic-toolmark-striation-matcher/view.ts +19 -20
- package/src/tool/gsr-dispersion-calculator/component.astro +1 -1
- package/src/tool/gsr-dispersion-calculator/logic.ts +1 -1
- package/src/tool/time-of-death-algor-mortis-calculator/entry.ts +2 -0
- package/src/tool/voice-spectrogram-analyzer/audio-runtime.ts +75 -0
- package/src/tool/voice-spectrogram-analyzer/bibliography.astro +14 -0
- package/src/tool/voice-spectrogram-analyzer/bibliography.ts +16 -0
- package/src/tool/voice-spectrogram-analyzer/component.astro +116 -0
- package/src/tool/voice-spectrogram-analyzer/controller.ts +219 -0
- package/src/tool/voice-spectrogram-analyzer/dom-views.ts +204 -0
- package/src/tool/voice-spectrogram-analyzer/entry.ts +31 -0
- package/src/tool/voice-spectrogram-analyzer/evaluator.ts +13 -0
- package/src/tool/voice-spectrogram-analyzer/fft.ts +64 -0
- package/src/tool/voice-spectrogram-analyzer/i18n/de.ts +135 -0
- package/src/tool/voice-spectrogram-analyzer/i18n/en.ts +122 -0
- package/src/tool/voice-spectrogram-analyzer/i18n/es.ts +122 -0
- package/src/tool/voice-spectrogram-analyzer/i18n/fr.ts +135 -0
- package/src/tool/voice-spectrogram-analyzer/i18n/id.ts +136 -0
- package/src/tool/voice-spectrogram-analyzer/i18n/it.ts +135 -0
- package/src/tool/voice-spectrogram-analyzer/i18n/ja.ts +135 -0
- package/src/tool/voice-spectrogram-analyzer/i18n/ko.ts +135 -0
- package/src/tool/voice-spectrogram-analyzer/i18n/nl.ts +136 -0
- package/src/tool/voice-spectrogram-analyzer/i18n/pl.ts +136 -0
- package/src/tool/voice-spectrogram-analyzer/i18n/pt.ts +135 -0
- package/src/tool/voice-spectrogram-analyzer/i18n/ru.ts +136 -0
- package/src/tool/voice-spectrogram-analyzer/i18n/sv.ts +136 -0
- package/src/tool/voice-spectrogram-analyzer/i18n/tr.ts +136 -0
- package/src/tool/voice-spectrogram-analyzer/i18n/zh.ts +135 -0
- package/src/tool/voice-spectrogram-analyzer/index.ts +11 -0
- package/src/tool/voice-spectrogram-analyzer/logic.test.ts +46 -0
- package/src/tool/voice-spectrogram-analyzer/logic.ts +163 -0
- package/src/tool/voice-spectrogram-analyzer/seo.astro +15 -0
- package/src/tool/voice-spectrogram-analyzer/storage.ts +33 -0
- package/src/tool/voice-spectrogram-analyzer/ui.ts +49 -0
- package/src/tool/voice-spectrogram-analyzer/voice-spectrogram-analyzer.css +547 -0
- package/src/tool/widmark-alcohol-simulator/component.astro +1 -1
- package/src/tool/widmark-alcohol-simulator/i18n/de.ts +5 -0
- package/src/tool/widmark-alcohol-simulator/i18n/fr.ts +2 -1
- package/src/tool/widmark-alcohol-simulator/i18n/id.ts +1 -0
- package/src/tool/widmark-alcohol-simulator/i18n/it.ts +4 -1
- package/src/tool/widmark-alcohol-simulator/i18n/ja.ts +4 -1
- package/src/tool/widmark-alcohol-simulator/i18n/nl.ts +5 -1
- package/src/tool/widmark-alcohol-simulator/i18n/pl.ts +5 -1
- package/src/tool/widmark-alcohol-simulator/i18n/pt.ts +5 -1
- package/src/tool/widmark-alcohol-simulator/i18n/ru.ts +4 -1
- package/src/tool/widmark-alcohol-simulator/i18n/sv.ts +5 -1
- package/src/tool/widmark-alcohol-simulator/i18n/tr.ts +4 -1
- package/src/tool/widmark-alcohol-simulator/i18n/zh.ts +4 -1
- package/src/tools.ts +39 -35
- package/src/types.ts +4 -4
|
@@ -1,246 +1,246 @@
|
|
|
1
|
-
import { bibliography } from '../bibliography';
|
|
2
|
-
import type { ToolLocaleContent } from '../../../types';
|
|
3
|
-
|
|
4
|
-
const slug = 'dental-skeletal-third-molar-age-estimator';
|
|
5
|
-
const title = '牙齿、骨骼与第三磨牙年龄估算器';
|
|
6
|
-
const description = '基于牙齿发育、骨骼成熟度和第三磨牙指标进行法医年龄区间估算,辅助案件筛查与分诊。';
|
|
7
|
-
|
|
8
|
-
const howTo = [
|
|
9
|
-
{
|
|
10
|
-
name: '选择证据侧重点',
|
|
11
|
-
text: '选择"混合证据"以进行综合分诊;若牙齿证据更为详实,请选择"牙齿优先";若骨骼X射线指标更为可靠,请选择"骨骼优先"。',
|
|
12
|
-
},
|
|
13
|
-
{
|
|
14
|
-
name: '评估各成熟度指标',
|
|
15
|
-
text: '将每个指标设定在0到8的阶段。较低阶段代表发育早期,中间阶段代表青少年期成熟,较高阶段则代表成熟或接近成熟。',
|
|
16
|
-
},
|
|
17
|
-
{
|
|
18
|
-
name: '参考区间而非单一年龄',
|
|
19
|
-
text: '应综合考量最小值、可能值和最大值。由于生物发育存在个体差异,法医年龄评估应始终以区间形式呈现。',
|
|
20
|
-
},
|
|
21
|
-
{
|
|
22
|
-
name: '核实各指标间的一致性',
|
|
23
|
-
text: '若牙齿、骨骼和第三磨牙阶段指向不同的年龄范围,请将结果视为"探索性",并在做出最终判断前收集更多证据。',
|
|
24
|
-
},
|
|
25
|
-
];
|
|
26
|
-
|
|
27
|
-
const faq = [
|
|
28
|
-
{
|
|
29
|
-
question: '该法医年龄估算器能否判定法定成年年龄?',
|
|
30
|
-
answer: '不能。本工具仅用于教学和分诊筛查。法定年龄判定必须遵循当地经认可的规程,并由具备资质的专家结合身份档案及司法管辖区特定标准进行评估。',
|
|
31
|
-
},
|
|
32
|
-
{
|
|
33
|
-
question: '为什么结果显示的是一个年龄区间?',
|
|
34
|
-
answer: '牙齿萌出、骨骼融合及第三磨牙发育受血统、营养、健康状况、性别、参照人群及影像检查方法等多种因素影响。以区间形式呈现比单一精确年龄更符合科学严谨性。',
|
|
35
|
-
},
|
|
36
|
-
{
|
|
37
|
-
question: '"混合证据"是什么意思?',
|
|
38
|
-
answer: '"混合证据"模式综合考量了牙齿发育、骨骼成熟度和第三磨牙阶段。当没有单一指标在特定案件中表现出显著的可靠性优势时,建议使用此模式。',
|
|
39
|
-
},
|
|
40
|
-
{
|
|
41
|
-
question: '第三磨牙在所有案例中都可靠吗?',
|
|
42
|
-
answer: '第三磨牙对于青少年后期和青年期的评估很有价值,但其个体变异很大。牙齿先天缺失、病理变化、人口学差异以及影像质量都会限制其诊断价值。',
|
|
43
|
-
},
|
|
44
|
-
{
|
|
45
|
-
question: '该工具能否直接用于实际法律案件?',
|
|
46
|
-
answer: '仅可作为初步辅助参考。实际案件评估必须使用经同行评审的方法、校准后的参照数据,并由独立专家进行审查,同时需透明地报告结果的不确定性和局限性。',
|
|
47
|
-
},
|
|
48
|
-
];
|
|
49
|
-
|
|
50
|
-
export const content: ToolLocaleContent = {
|
|
51
|
-
slug,
|
|
52
|
-
title,
|
|
53
|
-
description,
|
|
54
|
-
ui: {
|
|
55
|
-
caseBoard: '法医案件面板',
|
|
56
|
-
controls: '法医年龄估算控制',
|
|
57
|
-
results: '法医年龄估算结果',
|
|
58
|
-
maturityProfile: '动态成熟度概况',
|
|
59
|
-
screeningOnly: '筛查估算',
|
|
60
|
-
evidenceType: '证据侧重点',
|
|
61
|
-
mixedEvidence: '混合证据',
|
|
62
|
-
dentalPriority: '牙齿优先',
|
|
63
|
-
skeletalPriority: '骨骼优先',
|
|
64
|
-
dentalStage: '牙齿发育阶段',
|
|
65
|
-
epiphysealStage: '骨骺融合阶段',
|
|
66
|
-
thirdMolarStage: '第三磨牙阶段',
|
|
67
|
-
minimumAge: '最小值',
|
|
68
|
-
likelyAge: '可能值',
|
|
69
|
-
maximumAge: '最大值',
|
|
70
|
-
maturityScore: '成熟度评分',
|
|
71
|
-
stageLabel: '阶段',
|
|
72
|
-
ageUnit: '岁',
|
|
73
|
-
dentalShort: '牙齿',
|
|
74
|
-
boneShort: '骨骼',
|
|
75
|
-
molarShort: '磨牙',
|
|
76
|
-
dentalStageHelp: '牙冠、牙根及根尖形成情况。',
|
|
77
|
-
epiphysealStageHelp: '生长板闭合与骨融合进度。',
|
|
78
|
-
molarStageHelp: '第三磨牙矿化与根尖闭合情况。',
|
|
79
|
-
dentalStage0: '缺失',
|
|
80
|
-
dentalStage1: '牙尖形成',
|
|
81
|
-
dentalStage2: '牙冠形成',
|
|
82
|
-
dentalStage3: '牙根起始',
|
|
83
|
-
dentalStage4: '牙根达一半',
|
|
84
|
-
dentalStage5: '牙根长成',
|
|
85
|
-
dentalStage6: '根尖狭窄',
|
|
86
|
-
dentalStage7: '根尖闭合中',
|
|
87
|
-
dentalStage8: '发育完成',
|
|
88
|
-
epiphysealStage0: '开放',
|
|
89
|
-
epiphysealStage1: '边缘模糊',
|
|
90
|
-
epiphysealStage2: '变窄',
|
|
91
|
-
epiphysealStage3: '桥接形成',
|
|
92
|
-
epiphysealStage4: '一半融合',
|
|
93
|
-
epiphysealStage5: '大部分融合',
|
|
94
|
-
epiphysealStage6: '仅剩痕迹',
|
|
95
|
-
epiphysealStage7: '接近闭合',
|
|
96
|
-
epiphysealStage8: '闭合',
|
|
97
|
-
molarStage0: '缺失',
|
|
98
|
-
molarStage1: '牙尖形成',
|
|
99
|
-
molarStage2: '牙冠起始',
|
|
100
|
-
molarStage3: '牙冠完整',
|
|
101
|
-
molarStage4: '牙根起始',
|
|
102
|
-
molarStage5: '牙根达一半',
|
|
103
|
-
molarStage6: '牙根长成',
|
|
104
|
-
molarStage7: '根尖闭合中',
|
|
105
|
-
molarStage8: '发育完成',
|
|
106
|
-
confidenceexploratory: '探索性',
|
|
107
|
-
confidencemoderate: '中等',
|
|
108
|
-
confidencestrong: '高度可靠',
|
|
109
|
-
noteTriage: '仅作筛查估算参考,不可替代法定年龄判定。',
|
|
110
|
-
noteFinalAssessment: '最终法医评估需结合影像学检查、临床牙科评估、病史记录及司法辖区特定标准。',
|
|
111
|
-
noteWideInterval: '各指标间存在超过四年的偏差,区间已自动放大。',
|
|
112
|
-
},
|
|
113
|
-
seo: [
|
|
114
|
-
{
|
|
115
|
-
type: 'title',
|
|
116
|
-
text: '法医年龄估算器:牙齿、骨骼与第三磨牙筛查计算工具',
|
|
117
|
-
level: 2,
|
|
118
|
-
},
|
|
119
|
-
{
|
|
120
|
-
type: 'paragraph',
|
|
121
|
-
html: '当您需要在正式评估前快速、透明地整理生物成熟度证据时,请使用本法医年龄估算器。该工具整合了牙齿发育、骨骺融合及第三磨牙发育阶段,为您提供估算的年龄区间。它旨在响应<strong>法医年龄估算计算器</strong>、<strong>牙科年龄评估</strong>、<strong>骨骼成熟度年龄估算</strong>以及<strong>第三磨牙年龄估算</strong>等专业查询需求。用户可借此深入了解各项指标的含义、组合方式及结果的不确定性度量。',
|
|
122
|
-
},
|
|
123
|
-
{
|
|
124
|
-
type: 'paragraph',
|
|
125
|
-
html: '估算结果被明确表述为<strong>最小年龄、可能年龄和最大年龄</strong>。由于个体发育速度的差异,单一的精确数字往往具有误导性。营养、健康、血统、参照人群、成像质量及观察者差异均会影响结果的准确性。本计算器旨在提供结构化的筛查支持,不应视作司法裁判依据。',
|
|
126
|
-
},
|
|
127
|
-
{
|
|
128
|
-
type: 'title',
|
|
129
|
-
text: '三大成熟度指标解析',
|
|
130
|
-
level: 3,
|
|
131
|
-
},
|
|
132
|
-
{
|
|
133
|
-
type: 'paragraph',
|
|
134
|
-
html: '0至8阶段的滑块设定将复杂的发育过程抽象为标准化数值。阶段0代表成熟度极低或缺失,阶段8代表发育成熟。这种抽象化处理不仅能够辅助初学者快速上手,还能让专家直观对比牙齿、骨骼及第三磨牙指标在区间估算中的权重表现。',
|
|
135
|
-
},
|
|
136
|
-
|
|
137
|
-
{
|
|
138
|
-
type: 'table',
|
|
139
|
-
headers: ['指标', '描述', '应用场景', '注意事项'],
|
|
140
|
-
rows: [
|
|
141
|
-
['牙齿发育', '除第三磨牙外牙齿的形成与萌出。', '儿童及青少年的主要评估指标。', '牙病、拔牙及种族差异可能引入偏差。'],
|
|
142
|
-
['骨骺融合', '骨骼系统中生长板的进行性闭合。', '针对青少年及青年期的重要指标。', '受特定骨骼部位、性别及内分泌水平影响。'],
|
|
143
|
-
['第三磨牙', '智齿的形成与矿化进程。', '其他牙齿发育完成后的补充评估指标。', '个体变异极大,需评估有无先天缺失及阻生。'],
|
|
144
|
-
],
|
|
145
|
-
},
|
|
146
|
-
{
|
|
147
|
-
type: 'title',
|
|
148
|
-
text: '如何解读年龄区间',
|
|
149
|
-
level: 3,
|
|
150
|
-
},
|
|
151
|
-
{
|
|
152
|
-
type: 'paragraph',
|
|
153
|
-
html: '请综合考量三个年龄数值。<strong>可能年龄</strong>是基于您选择的证据侧重点计算出的加权中心点。<strong>最小值</strong>和<strong>最大值</strong>展示了实际操作中的不确定性范围。当各项指标趋于一致时,范围会收窄;而当牙齿、骨骼及第三磨牙结论不一,范围会扩大,此时置信度标签将相应降低。',
|
|
154
|
-
},
|
|
155
|
-
{
|
|
156
|
-
type: 'table',
|
|
157
|
-
headers: ['结果状态', '含义', '建议操作'],
|
|
158
|
-
rows: [
|
|
159
|
-
['窄区间/置信度高', '各项指标吻合,发育阶段一致。', '记录原始数据,评估是否需要更高级别的司法验证。'],
|
|
160
|
-
['中等区间', '存在轻微分歧或权重设置影响了中心点。', '校准影像质量及阶段评估标准。'],
|
|
161
|
-
['宽区间/探索性', '指标冲突明显,指向不同的生理阶段。', '切勿仅凭该估算下结论;请参考补充文档或请求专家会诊。'],
|
|
162
|
-
],
|
|
163
|
-
},
|
|
164
|
-
{
|
|
165
|
-
type: 'title',
|
|
166
|
-
text: '证据模式选择指南',
|
|
167
|
-
level: 3,
|
|
168
|
-
},
|
|
169
|
-
{
|
|
170
|
-
type: 'paragraph',
|
|
171
|
-
html: '<strong>混合证据</strong>模式是筛查的默认设置,适用于综合评估。若牙齿记录详尽且无可争议,建议选择<strong>牙齿优先</strong>;若骨骼放射学检查更为全面权威,则建议选择<strong>骨骼优先</strong>。这些模式仅调整数学权重,并不能提升原数据本身的基础质量。',
|
|
172
|
-
},
|
|
173
|
-
{
|
|
174
|
-
type: 'list',
|
|
175
|
-
items: [
|
|
176
|
-
'<strong>牙齿优先:</strong>牙齿分期清晰且第三磨牙数据完整时使用。',
|
|
177
|
-
'<strong>骨骼优先:</strong>当骨骺融合提供了最详尽的成熟度证据时使用。',
|
|
178
|
-
'<strong>混合证据:</strong>理想的初步快速评估模式。',
|
|
179
|
-
'<strong>置信度标签:</strong>请密切关注,以在做出判断前警惕数据间的冲突。',
|
|
180
|
-
],
|
|
181
|
-
},
|
|
182
|
-
{
|
|
183
|
-
type: 'title',
|
|
184
|
-
text: '法医年龄评估的局限性',
|
|
185
|
-
level: 3,
|
|
186
|
-
},
|
|
187
|
-
{
|
|
188
|
-
type: 'paragraph',
|
|
189
|
-
html: '年龄评估仅能作为辅助支持材料,不能等同于身份确定。在法律保护、刑事责任判定、灾难识别及移民身份等领域,必须采用多学科综合评估。规范的报告应当详尽陈述使用的方法学、参照人群、影像来源、专家资质及已知的边界限制。',
|
|
190
|
-
},
|
|
191
|
-
{
|
|
192
|
-
type: 'paragraph',
|
|
193
|
-
html: '本工具定位于<strong>教育培训、临床分诊及透明化沟通</strong>。我们强调:在面对法律意义重大的年龄阈值判定(例如18周岁)时,不应仅依赖任何简化的计算工具。',
|
|
194
|
-
},
|
|
195
|
-
{
|
|
196
|
-
type: 'title',
|
|
197
|
-
text: '法医报告自检清单',
|
|
198
|
-
level: 3,
|
|
199
|
-
},
|
|
200
|
-
{
|
|
201
|
-
type: 'list',
|
|
202
|
-
items: [
|
|
203
|
-
'<strong>证据溯源:</strong>注明影像类型(如口内牙科片、全景片、手腕骨骨龄片或锁骨CT等)。',
|
|
204
|
-
'<strong>缺失/非典型数据:</strong>明确标注先天缺失、低画质或解剖发育变异情况。',
|
|
205
|
-
'<strong>方法论合法性:</strong>确保所用评估方法在当前司法管辖区内是被认可的。',
|
|
206
|
-
'<strong>不确定性呈现:</strong>始终提供范围区间,避免使用暗示"绝对年龄"的表述。',
|
|
207
|
-
'<strong>专家复核:</strong>涉及重大法律影响的案件,必须交由专业法医牙科专家、放射科医生或人类学家复核。',
|
|
208
|
-
],
|
|
209
|
-
},
|
|
210
|
-
],
|
|
211
|
-
faq,
|
|
212
|
-
bibliography,
|
|
213
|
-
howTo,
|
|
214
|
-
schemas: [
|
|
215
|
-
{
|
|
216
|
-
'@context': 'https://schema.org',
|
|
217
|
-
'@type': 'SoftwareApplication',
|
|
218
|
-
name: title,
|
|
219
|
-
description,
|
|
220
|
-
applicationCategory: 'ForensicApplication',
|
|
221
|
-
operatingSystem: 'Any',
|
|
222
|
-
},
|
|
223
|
-
{
|
|
224
|
-
'@context': 'https://schema.org',
|
|
225
|
-
'@type': 'FAQPage',
|
|
226
|
-
mainEntity: faq.map((item) => ({
|
|
227
|
-
'@type': 'Question',
|
|
228
|
-
name: item.question,
|
|
229
|
-
acceptedAnswer: {
|
|
230
|
-
'@type': 'Answer',
|
|
231
|
-
text: item.answer,
|
|
232
|
-
},
|
|
233
|
-
})),
|
|
234
|
-
},
|
|
235
|
-
{
|
|
236
|
-
'@context': 'https://schema.org',
|
|
237
|
-
'@type': 'HowTo',
|
|
238
|
-
name: title,
|
|
239
|
-
step: howTo.map((step) => ({
|
|
240
|
-
'@type': 'HowToStep',
|
|
241
|
-
name: step.name,
|
|
242
|
-
text: step.text,
|
|
243
|
-
})),
|
|
244
|
-
},
|
|
245
|
-
],
|
|
1
|
+
import { bibliography } from '../bibliography';
|
|
2
|
+
import type { ToolLocaleContent } from '../../../types';
|
|
3
|
+
|
|
4
|
+
const slug = 'dental-skeletal-third-molar-age-estimator';
|
|
5
|
+
const title = '牙齿、骨骼与第三磨牙年龄估算器';
|
|
6
|
+
const description = '基于牙齿发育、骨骼成熟度和第三磨牙指标进行法医年龄区间估算,辅助案件筛查与分诊。';
|
|
7
|
+
|
|
8
|
+
const howTo = [
|
|
9
|
+
{
|
|
10
|
+
name: '选择证据侧重点',
|
|
11
|
+
text: '选择"混合证据"以进行综合分诊;若牙齿证据更为详实,请选择"牙齿优先";若骨骼X射线指标更为可靠,请选择"骨骼优先"。',
|
|
12
|
+
},
|
|
13
|
+
{
|
|
14
|
+
name: '评估各成熟度指标',
|
|
15
|
+
text: '将每个指标设定在0到8的阶段。较低阶段代表发育早期,中间阶段代表青少年期成熟,较高阶段则代表成熟或接近成熟。',
|
|
16
|
+
},
|
|
17
|
+
{
|
|
18
|
+
name: '参考区间而非单一年龄',
|
|
19
|
+
text: '应综合考量最小值、可能值和最大值。由于生物发育存在个体差异,法医年龄评估应始终以区间形式呈现。',
|
|
20
|
+
},
|
|
21
|
+
{
|
|
22
|
+
name: '核实各指标间的一致性',
|
|
23
|
+
text: '若牙齿、骨骼和第三磨牙阶段指向不同的年龄范围,请将结果视为"探索性",并在做出最终判断前收集更多证据。',
|
|
24
|
+
},
|
|
25
|
+
];
|
|
26
|
+
|
|
27
|
+
const faq = [
|
|
28
|
+
{
|
|
29
|
+
question: '该法医年龄估算器能否判定法定成年年龄?',
|
|
30
|
+
answer: '不能。本工具仅用于教学和分诊筛查。法定年龄判定必须遵循当地经认可的规程,并由具备资质的专家结合身份档案及司法管辖区特定标准进行评估。',
|
|
31
|
+
},
|
|
32
|
+
{
|
|
33
|
+
question: '为什么结果显示的是一个年龄区间?',
|
|
34
|
+
answer: '牙齿萌出、骨骼融合及第三磨牙发育受血统、营养、健康状况、性别、参照人群及影像检查方法等多种因素影响。以区间形式呈现比单一精确年龄更符合科学严谨性。',
|
|
35
|
+
},
|
|
36
|
+
{
|
|
37
|
+
question: '"混合证据"是什么意思?',
|
|
38
|
+
answer: '"混合证据"模式综合考量了牙齿发育、骨骼成熟度和第三磨牙阶段。当没有单一指标在特定案件中表现出显著的可靠性优势时,建议使用此模式。',
|
|
39
|
+
},
|
|
40
|
+
{
|
|
41
|
+
question: '第三磨牙在所有案例中都可靠吗?',
|
|
42
|
+
answer: '第三磨牙对于青少年后期和青年期的评估很有价值,但其个体变异很大。牙齿先天缺失、病理变化、人口学差异以及影像质量都会限制其诊断价值。',
|
|
43
|
+
},
|
|
44
|
+
{
|
|
45
|
+
question: '该工具能否直接用于实际法律案件?',
|
|
46
|
+
answer: '仅可作为初步辅助参考。实际案件评估必须使用经同行评审的方法、校准后的参照数据,并由独立专家进行审查,同时需透明地报告结果的不确定性和局限性。',
|
|
47
|
+
},
|
|
48
|
+
];
|
|
49
|
+
|
|
50
|
+
export const content: ToolLocaleContent = {
|
|
51
|
+
slug,
|
|
52
|
+
title,
|
|
53
|
+
description,
|
|
54
|
+
ui: {
|
|
55
|
+
caseBoard: '法医案件面板',
|
|
56
|
+
controls: '法医年龄估算控制',
|
|
57
|
+
results: '法医年龄估算结果',
|
|
58
|
+
maturityProfile: '动态成熟度概况',
|
|
59
|
+
screeningOnly: '筛查估算',
|
|
60
|
+
evidenceType: '证据侧重点',
|
|
61
|
+
mixedEvidence: '混合证据',
|
|
62
|
+
dentalPriority: '牙齿优先',
|
|
63
|
+
skeletalPriority: '骨骼优先',
|
|
64
|
+
dentalStage: '牙齿发育阶段',
|
|
65
|
+
epiphysealStage: '骨骺融合阶段',
|
|
66
|
+
thirdMolarStage: '第三磨牙阶段',
|
|
67
|
+
minimumAge: '最小值',
|
|
68
|
+
likelyAge: '可能值',
|
|
69
|
+
maximumAge: '最大值',
|
|
70
|
+
maturityScore: '成熟度评分',
|
|
71
|
+
stageLabel: '阶段',
|
|
72
|
+
ageUnit: '岁',
|
|
73
|
+
dentalShort: '牙齿',
|
|
74
|
+
boneShort: '骨骼',
|
|
75
|
+
molarShort: '磨牙',
|
|
76
|
+
dentalStageHelp: '牙冠、牙根及根尖形成情况。',
|
|
77
|
+
epiphysealStageHelp: '生长板闭合与骨融合进度。',
|
|
78
|
+
molarStageHelp: '第三磨牙矿化与根尖闭合情况。',
|
|
79
|
+
dentalStage0: '缺失',
|
|
80
|
+
dentalStage1: '牙尖形成',
|
|
81
|
+
dentalStage2: '牙冠形成',
|
|
82
|
+
dentalStage3: '牙根起始',
|
|
83
|
+
dentalStage4: '牙根达一半',
|
|
84
|
+
dentalStage5: '牙根长成',
|
|
85
|
+
dentalStage6: '根尖狭窄',
|
|
86
|
+
dentalStage7: '根尖闭合中',
|
|
87
|
+
dentalStage8: '发育完成',
|
|
88
|
+
epiphysealStage0: '开放',
|
|
89
|
+
epiphysealStage1: '边缘模糊',
|
|
90
|
+
epiphysealStage2: '变窄',
|
|
91
|
+
epiphysealStage3: '桥接形成',
|
|
92
|
+
epiphysealStage4: '一半融合',
|
|
93
|
+
epiphysealStage5: '大部分融合',
|
|
94
|
+
epiphysealStage6: '仅剩痕迹',
|
|
95
|
+
epiphysealStage7: '接近闭合',
|
|
96
|
+
epiphysealStage8: '闭合',
|
|
97
|
+
molarStage0: '缺失',
|
|
98
|
+
molarStage1: '牙尖形成',
|
|
99
|
+
molarStage2: '牙冠起始',
|
|
100
|
+
molarStage3: '牙冠完整',
|
|
101
|
+
molarStage4: '牙根起始',
|
|
102
|
+
molarStage5: '牙根达一半',
|
|
103
|
+
molarStage6: '牙根长成',
|
|
104
|
+
molarStage7: '根尖闭合中',
|
|
105
|
+
molarStage8: '发育完成',
|
|
106
|
+
confidenceexploratory: '探索性',
|
|
107
|
+
confidencemoderate: '中等',
|
|
108
|
+
confidencestrong: '高度可靠',
|
|
109
|
+
noteTriage: '仅作筛查估算参考,不可替代法定年龄判定。',
|
|
110
|
+
noteFinalAssessment: '最终法医评估需结合影像学检查、临床牙科评估、病史记录及司法辖区特定标准。',
|
|
111
|
+
noteWideInterval: '各指标间存在超过四年的偏差,区间已自动放大。',
|
|
112
|
+
},
|
|
113
|
+
seo: [
|
|
114
|
+
{
|
|
115
|
+
type: 'title',
|
|
116
|
+
text: '法医年龄估算器:牙齿、骨骼与第三磨牙筛查计算工具',
|
|
117
|
+
level: 2,
|
|
118
|
+
},
|
|
119
|
+
{
|
|
120
|
+
type: 'paragraph',
|
|
121
|
+
html: '当您需要在正式评估前快速、透明地整理生物成熟度证据时,请使用本法医年龄估算器。该工具整合了牙齿发育、骨骺融合及第三磨牙发育阶段,为您提供估算的年龄区间。它旨在响应<strong>法医年龄估算计算器</strong>、<strong>牙科年龄评估</strong>、<strong>骨骼成熟度年龄估算</strong>以及<strong>第三磨牙年龄估算</strong>等专业查询需求。用户可借此深入了解各项指标的含义、组合方式及结果的不确定性度量。',
|
|
122
|
+
},
|
|
123
|
+
{
|
|
124
|
+
type: 'paragraph',
|
|
125
|
+
html: '估算结果被明确表述为<strong>最小年龄、可能年龄和最大年龄</strong>。由于个体发育速度的差异,单一的精确数字往往具有误导性。营养、健康、血统、参照人群、成像质量及观察者差异均会影响结果的准确性。本计算器旨在提供结构化的筛查支持,不应视作司法裁判依据。',
|
|
126
|
+
},
|
|
127
|
+
{
|
|
128
|
+
type: 'title',
|
|
129
|
+
text: '三大成熟度指标解析',
|
|
130
|
+
level: 3,
|
|
131
|
+
},
|
|
132
|
+
{
|
|
133
|
+
type: 'paragraph',
|
|
134
|
+
html: '0至8阶段的滑块设定将复杂的发育过程抽象为标准化数值。阶段0代表成熟度极低或缺失,阶段8代表发育成熟。这种抽象化处理不仅能够辅助初学者快速上手,还能让专家直观对比牙齿、骨骼及第三磨牙指标在区间估算中的权重表现。',
|
|
135
|
+
},
|
|
136
|
+
|
|
137
|
+
{
|
|
138
|
+
type: 'table',
|
|
139
|
+
headers: ['指标', '描述', '应用场景', '注意事项'],
|
|
140
|
+
rows: [
|
|
141
|
+
['牙齿发育', '除第三磨牙外牙齿的形成与萌出。', '儿童及青少年的主要评估指标。', '牙病、拔牙及种族差异可能引入偏差。'],
|
|
142
|
+
['骨骺融合', '骨骼系统中生长板的进行性闭合。', '针对青少年及青年期的重要指标。', '受特定骨骼部位、性别及内分泌水平影响。'],
|
|
143
|
+
['第三磨牙', '智齿的形成与矿化进程。', '其他牙齿发育完成后的补充评估指标。', '个体变异极大,需评估有无先天缺失及阻生。'],
|
|
144
|
+
],
|
|
145
|
+
},
|
|
146
|
+
{
|
|
147
|
+
type: 'title',
|
|
148
|
+
text: '如何解读年龄区间',
|
|
149
|
+
level: 3,
|
|
150
|
+
},
|
|
151
|
+
{
|
|
152
|
+
type: 'paragraph',
|
|
153
|
+
html: '请综合考量三个年龄数值。<strong>可能年龄</strong>是基于您选择的证据侧重点计算出的加权中心点。<strong>最小值</strong>和<strong>最大值</strong>展示了实际操作中的不确定性范围。当各项指标趋于一致时,范围会收窄;而当牙齿、骨骼及第三磨牙结论不一,范围会扩大,此时置信度标签将相应降低。',
|
|
154
|
+
},
|
|
155
|
+
{
|
|
156
|
+
type: 'table',
|
|
157
|
+
headers: ['结果状态', '含义', '建议操作'],
|
|
158
|
+
rows: [
|
|
159
|
+
['窄区间/置信度高', '各项指标吻合,发育阶段一致。', '记录原始数据,评估是否需要更高级别的司法验证。'],
|
|
160
|
+
['中等区间', '存在轻微分歧或权重设置影响了中心点。', '校准影像质量及阶段评估标准。'],
|
|
161
|
+
['宽区间/探索性', '指标冲突明显,指向不同的生理阶段。', '切勿仅凭该估算下结论;请参考补充文档或请求专家会诊。'],
|
|
162
|
+
],
|
|
163
|
+
},
|
|
164
|
+
{
|
|
165
|
+
type: 'title',
|
|
166
|
+
text: '证据模式选择指南',
|
|
167
|
+
level: 3,
|
|
168
|
+
},
|
|
169
|
+
{
|
|
170
|
+
type: 'paragraph',
|
|
171
|
+
html: '<strong>混合证据</strong>模式是筛查的默认设置,适用于综合评估。若牙齿记录详尽且无可争议,建议选择<strong>牙齿优先</strong>;若骨骼放射学检查更为全面权威,则建议选择<strong>骨骼优先</strong>。这些模式仅调整数学权重,并不能提升原数据本身的基础质量。',
|
|
172
|
+
},
|
|
173
|
+
{
|
|
174
|
+
type: 'list',
|
|
175
|
+
items: [
|
|
176
|
+
'<strong>牙齿优先:</strong>牙齿分期清晰且第三磨牙数据完整时使用。',
|
|
177
|
+
'<strong>骨骼优先:</strong>当骨骺融合提供了最详尽的成熟度证据时使用。',
|
|
178
|
+
'<strong>混合证据:</strong>理想的初步快速评估模式。',
|
|
179
|
+
'<strong>置信度标签:</strong>请密切关注,以在做出判断前警惕数据间的冲突。',
|
|
180
|
+
],
|
|
181
|
+
},
|
|
182
|
+
{
|
|
183
|
+
type: 'title',
|
|
184
|
+
text: '法医年龄评估的局限性',
|
|
185
|
+
level: 3,
|
|
186
|
+
},
|
|
187
|
+
{
|
|
188
|
+
type: 'paragraph',
|
|
189
|
+
html: '年龄评估仅能作为辅助支持材料,不能等同于身份确定。在法律保护、刑事责任判定、灾难识别及移民身份等领域,必须采用多学科综合评估。规范的报告应当详尽陈述使用的方法学、参照人群、影像来源、专家资质及已知的边界限制。',
|
|
190
|
+
},
|
|
191
|
+
{
|
|
192
|
+
type: 'paragraph',
|
|
193
|
+
html: '本工具定位于<strong>教育培训、临床分诊及透明化沟通</strong>。我们强调:在面对法律意义重大的年龄阈值判定(例如18周岁)时,不应仅依赖任何简化的计算工具。',
|
|
194
|
+
},
|
|
195
|
+
{
|
|
196
|
+
type: 'title',
|
|
197
|
+
text: '法医报告自检清单',
|
|
198
|
+
level: 3,
|
|
199
|
+
},
|
|
200
|
+
{
|
|
201
|
+
type: 'list',
|
|
202
|
+
items: [
|
|
203
|
+
'<strong>证据溯源:</strong>注明影像类型(如口内牙科片、全景片、手腕骨骨龄片或锁骨CT等)。',
|
|
204
|
+
'<strong>缺失/非典型数据:</strong>明确标注先天缺失、低画质或解剖发育变异情况。',
|
|
205
|
+
'<strong>方法论合法性:</strong>确保所用评估方法在当前司法管辖区内是被认可的。',
|
|
206
|
+
'<strong>不确定性呈现:</strong>始终提供范围区间,避免使用暗示"绝对年龄"的表述。',
|
|
207
|
+
'<strong>专家复核:</strong>涉及重大法律影响的案件,必须交由专业法医牙科专家、放射科医生或人类学家复核。',
|
|
208
|
+
],
|
|
209
|
+
},
|
|
210
|
+
],
|
|
211
|
+
faq,
|
|
212
|
+
bibliography,
|
|
213
|
+
howTo,
|
|
214
|
+
schemas: [
|
|
215
|
+
{
|
|
216
|
+
'@context': 'https://schema.org',
|
|
217
|
+
'@type': 'SoftwareApplication',
|
|
218
|
+
name: title,
|
|
219
|
+
description,
|
|
220
|
+
applicationCategory: 'ForensicApplication',
|
|
221
|
+
operatingSystem: 'Any',
|
|
222
|
+
},
|
|
223
|
+
{
|
|
224
|
+
'@context': 'https://schema.org',
|
|
225
|
+
'@type': 'FAQPage',
|
|
226
|
+
mainEntity: faq.map((item) => ({
|
|
227
|
+
'@type': 'Question',
|
|
228
|
+
name: item.question,
|
|
229
|
+
acceptedAnswer: {
|
|
230
|
+
'@type': 'Answer',
|
|
231
|
+
text: item.answer,
|
|
232
|
+
},
|
|
233
|
+
})),
|
|
234
|
+
},
|
|
235
|
+
{
|
|
236
|
+
'@context': 'https://schema.org',
|
|
237
|
+
'@type': 'HowTo',
|
|
238
|
+
name: title,
|
|
239
|
+
step: howTo.map((step) => ({
|
|
240
|
+
'@type': 'HowToStep',
|
|
241
|
+
name: step.name,
|
|
242
|
+
text: step.text,
|
|
243
|
+
})),
|
|
244
|
+
},
|
|
245
|
+
],
|
|
246
246
|
};
|
|
@@ -12,4 +12,4 @@ const content = await forensicAgeEstimator.i18n[locale]?.();
|
|
|
12
12
|
if (!content) return null;
|
|
13
13
|
---
|
|
14
14
|
|
|
15
|
-
{content.seo?.length > 0 && <SEORenderer content={{ locale, sections: content.seo }} />}
|
|
15
|
+
{content.seo?.length > 0 && <SEORenderer content={{ locale, sections: content.seo }} />}
|
|
@@ -161,7 +161,7 @@ const { ui } = Astro.props;
|
|
|
161
161
|
</div>
|
|
162
162
|
</div>
|
|
163
163
|
|
|
164
|
-
<script id="blood-test-ui-data" type="application/json" set:html={JSON.stringify(ui)}></script>
|
|
164
|
+
<script is:inline id="blood-test-ui-data" type="application/json" set:html={JSON.stringify(ui)}></script>
|
|
165
165
|
|
|
166
166
|
<script>
|
|
167
167
|
import './script';
|
|
@@ -138,7 +138,7 @@ const { ui } = Astro.props;
|
|
|
138
138
|
</div>
|
|
139
139
|
</section>
|
|
140
140
|
|
|
141
|
-
<script id="fiber-ui" type="application/json" set:html={JSON.stringify(ui)}></script>
|
|
141
|
+
<script is:inline id="fiber-ui" type="application/json" set:html={JSON.stringify(ui)}></script>
|
|
142
142
|
<script>
|
|
143
143
|
import { initFiberComparisonMicroscope } from './view';
|
|
144
144
|
|
|
@@ -212,7 +212,7 @@ export function buildSpectrumChartMarkup(ui: Record<string, string>, left: Fiber
|
|
|
212
212
|
return `${chartDefs(leftColor, rightColor)}
|
|
213
213
|
<rect x="0" y="0" width="720" height="270" rx="8" fill="transparent"></rect>
|
|
214
214
|
<g stroke="${theme.grid}" stroke-width="1">${gridLines}</g>
|
|
215
|
-
${chartLabels(ui.uvVisTitle, theme.text)}
|
|
215
|
+
${chartLabels(ui.uvVisTitle ?? '', theme.text)}
|
|
216
216
|
<path d="${leftArea}" fill="url(#fiber-left-area)"></path>
|
|
217
217
|
<path d="${rightArea}" fill="url(#fiber-right-area)"></path>
|
|
218
218
|
<path d="${leftPath}" fill="none" stroke="${leftColor}" stroke-width="5" stroke-linecap="round" stroke-linejoin="round"></path>
|
|
@@ -12,7 +12,7 @@ const TWIST_VALUES: FiberTwist[] = ['S', 'Z', 'irregular'];
|
|
|
12
12
|
const DYE_VALUES: DyePreset[] = ['indigo', 'crimson', 'navy', 'violet'];
|
|
13
13
|
const DEFAULT_BUILDER: QuestionedFiberInput = { material: 'cotton', diameterMicrons: 18, twist: 'irregular', birefringence: 0.032, dyePreset: 'indigo' };
|
|
14
14
|
|
|
15
|
-
function byId<T extends
|
|
15
|
+
function byId<T extends Element>(id: string): T | null {
|
|
16
16
|
return document.getElementById(id) as T | null;
|
|
17
17
|
}
|
|
18
18
|
|
|
@@ -176,7 +176,7 @@ const { ui } = Astro.props;
|
|
|
176
176
|
<template id="fp-trash-icon">
|
|
177
177
|
<Icon name="mdi:trash-can-outline" aria-hidden="true" />
|
|
178
178
|
</template>
|
|
179
|
-
<script id="fp-ui" type="application/json" set:html={JSON.stringify(ui)}></script>
|
|
179
|
+
<script is:inline id="fp-ui" type="application/json" set:html={JSON.stringify(ui)}></script>
|
|
180
180
|
<script>
|
|
181
181
|
import { FingerprintClassifier, MinutiaeState, colors, limits } from './logic';
|
|
182
182
|
import type { FingerprintPattern, MinutiaType } from './logic';
|
|
@@ -252,7 +252,7 @@ const { ui } = Astro.props;
|
|
|
252
252
|
const classification = classifier.classify(activePattern, coreVal, deltaVal);
|
|
253
253
|
const summary = state.summarize();
|
|
254
254
|
const selectedMark = state.list().find((mark) => mark.id === selectedMarkId);
|
|
255
|
-
updateUIStates(activeMinutia(), activePattern,
|
|
255
|
+
updateUIStates(activeMinutia(), activePattern, (type) => state.canAdd(type));
|
|
256
256
|
updateActionButtons(selectedMark, ui, state.lastMark() !== null);
|
|
257
257
|
updateClassifierLabels(classification, String(coreVal), String(deltaVal), ui);
|
|
258
258
|
updateMinutiaeLabels(summary, activeMinutia(), ui, limits);
|
|
@@ -244,7 +244,8 @@ export const content: ToolLocaleContent = {
|
|
|
244
244
|
},
|
|
245
245
|
|
|
246
246
|
{ type: 'paragraph', html: "入力値、単位、丸め、日付、地域を確認してください。どれも推定結果を変える可能性があります。" },
|
|
247
|
-
{ type: 'paragraph', html: "結果は計画や条件比較に使えますが、公式計算や専門家の助言の代わりにはなりません。" },
|
|
247
|
+
{ type: 'paragraph', html: "結果は計画や条件比較に使えますが、公式計算や専門家の助言の代わりにはなりません。" },
|
|
248
|
+
{ type: 'paragraph', html: 'マークを付ける前に隆線の連続性、局所的な鮮明さ、特徴点の周囲を確認してください。単独の端点や分岐だけで判断せず、全体の流れと画像品質を記録し、教育用シミュレーションと正式鑑定の結論を明確に区別します。' },],
|
|
248
249
|
faq,
|
|
249
250
|
bibliography,
|
|
250
251
|
howTo,
|
|
@@ -242,6 +242,8 @@ export const content: ToolLocaleContent = {
|
|
|
242
242
|
title: '仅供学术教学研究使用',
|
|
243
243
|
html: '本模拟器完全面向教学与技能培训,不得将其用作司法案件中人身同一认定的最终依据。',
|
|
244
244
|
},
|
|
245
|
+
{ type: 'paragraph', html: '标记特征时应先确认脊线连续性、局部图像清晰度和特征点所在区域。孤立的端点或分叉不能脱离整体纹型、方向关系和图像质量进行判断;正式鉴定还需要经过训练的检验人员、合适的采集流程和可追溯的质量控制。' },
|
|
246
|
+
{ type: 'paragraph', html: '练习时请保存原始图像和标记过程,并注明图像来源、分辨率与处理步骤。这样可以复核标记是否由图像细节支持,也能清楚区分教学模拟结果与正式鉴定结论。' },
|
|
245
247
|
|
|
246
248
|
{ type: 'paragraph', html: "请检查输入值、单位、四舍五入方式、日期和司法辖区,因为每项都可能改变估算。" },
|
|
247
249
|
{ type: 'paragraph', html: "结果可用于规划和比较方案,但不能替代官方计算或专业建议。" },],
|