@jjlmoya/utils-forensic-science 1.1.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.
Files changed (316) hide show
  1. package/package.json +69 -0
  2. package/scripts/crystal-lattice-catalog-translations.mjs +459 -0
  3. package/scripts/postinstall.mjs +27 -0
  4. package/scripts/sync-crystal-lattice-i18n.mjs +50 -0
  5. package/src/category/i18n/de.ts +55 -0
  6. package/src/category/i18n/en.ts +55 -0
  7. package/src/category/i18n/es.ts +55 -0
  8. package/src/category/i18n/fr.ts +55 -0
  9. package/src/category/i18n/id.ts +55 -0
  10. package/src/category/i18n/it.ts +55 -0
  11. package/src/category/i18n/ja.ts +56 -0
  12. package/src/category/i18n/ko.ts +56 -0
  13. package/src/category/i18n/nl.ts +55 -0
  14. package/src/category/i18n/pl.ts +55 -0
  15. package/src/category/i18n/pt.ts +55 -0
  16. package/src/category/i18n/ru.ts +55 -0
  17. package/src/category/i18n/sv.ts +55 -0
  18. package/src/category/i18n/tr.ts +55 -0
  19. package/src/category/i18n/zh.ts +56 -0
  20. package/src/category/index.ts +48 -0
  21. package/src/category/seo.astro +15 -0
  22. package/src/components/PreviewNavSidebar.astro +116 -0
  23. package/src/components/PreviewToolbar.astro +143 -0
  24. package/src/data.ts +10 -0
  25. package/src/entries.ts +48 -0
  26. package/src/env.d.ts +5 -0
  27. package/src/index.ts +29 -0
  28. package/src/layouts/PreviewLayout.astro +117 -0
  29. package/src/pages/[locale]/[slug].astro +162 -0
  30. package/src/pages/[locale].astro +261 -0
  31. package/src/pages/index.astro +3 -0
  32. package/src/tests/diacritics_density.test.ts +140 -0
  33. package/src/tests/faq_count.test.ts +19 -0
  34. package/src/tests/i18n_coverage.test.ts +36 -0
  35. package/src/tests/inverted_punctuation.test.ts +84 -0
  36. package/src/tests/locale_completeness.test.ts +24 -0
  37. package/src/tests/mocks/astro_mock.js +2 -0
  38. package/src/tests/no_en_dash.test.ts +70 -0
  39. package/src/tests/no_h1_in_components.test.ts +48 -0
  40. package/src/tests/schemas_fulfillment.test.ts +23 -0
  41. package/src/tests/script_density.test.ts +94 -0
  42. package/src/tests/seo_length.test.ts +46 -0
  43. package/src/tests/shared-test-helpers.ts +56 -0
  44. package/src/tests/slug_language_code_format.test.ts +23 -0
  45. package/src/tests/slug_uniqueness.test.ts +81 -0
  46. package/src/tests/title_quality.test.ts +55 -0
  47. package/src/tests/tool_exports.test.ts +34 -0
  48. package/src/tests/tool_validation.test.ts +16 -0
  49. package/src/tests/widmark.test.ts +28 -0
  50. package/src/tool/forensic-age-estimator/bibliography.astro +14 -0
  51. package/src/tool/forensic-age-estimator/bibliography.ts +16 -0
  52. package/src/tool/forensic-age-estimator/component.astro +321 -0
  53. package/src/tool/forensic-age-estimator/dental-skeletal-third-molar-age-estimator.css +634 -0
  54. package/src/tool/forensic-age-estimator/entry.ts +32 -0
  55. package/src/tool/forensic-age-estimator/i18n/de.ts +245 -0
  56. package/src/tool/forensic-age-estimator/i18n/en.ts +245 -0
  57. package/src/tool/forensic-age-estimator/i18n/es.ts +245 -0
  58. package/src/tool/forensic-age-estimator/i18n/fr.ts +245 -0
  59. package/src/tool/forensic-age-estimator/i18n/id.ts +245 -0
  60. package/src/tool/forensic-age-estimator/i18n/it.ts +245 -0
  61. package/src/tool/forensic-age-estimator/i18n/ja.ts +245 -0
  62. package/src/tool/forensic-age-estimator/i18n/ko.ts +245 -0
  63. package/src/tool/forensic-age-estimator/i18n/nl.ts +245 -0
  64. package/src/tool/forensic-age-estimator/i18n/pl.ts +245 -0
  65. package/src/tool/forensic-age-estimator/i18n/pt.ts +245 -0
  66. package/src/tool/forensic-age-estimator/i18n/ru.ts +245 -0
  67. package/src/tool/forensic-age-estimator/i18n/sv.ts +245 -0
  68. package/src/tool/forensic-age-estimator/i18n/tr.ts +245 -0
  69. package/src/tool/forensic-age-estimator/i18n/zh.ts +246 -0
  70. package/src/tool/forensic-age-estimator/index.ts +11 -0
  71. package/src/tool/forensic-age-estimator/logic.ts +81 -0
  72. package/src/tool/forensic-age-estimator/seo.astro +15 -0
  73. package/src/tool/forensic-blood-test-simulator/bibliography.astro +6 -0
  74. package/src/tool/forensic-blood-test-simulator/bibliography.ts +12 -0
  75. package/src/tool/forensic-blood-test-simulator/component.astro +168 -0
  76. package/src/tool/forensic-blood-test-simulator/dom-utils.ts +40 -0
  77. package/src/tool/forensic-blood-test-simulator/entry.ts +32 -0
  78. package/src/tool/forensic-blood-test-simulator/forensic-presumptive-blood-testing-luminol-kastle-meyer-simulator.css +532 -0
  79. package/src/tool/forensic-blood-test-simulator/helpers.ts +16 -0
  80. package/src/tool/forensic-blood-test-simulator/i18n/de.ts +185 -0
  81. package/src/tool/forensic-blood-test-simulator/i18n/en.ts +185 -0
  82. package/src/tool/forensic-blood-test-simulator/i18n/es.ts +185 -0
  83. package/src/tool/forensic-blood-test-simulator/i18n/fr.ts +220 -0
  84. package/src/tool/forensic-blood-test-simulator/i18n/id.ts +220 -0
  85. package/src/tool/forensic-blood-test-simulator/i18n/it.ts +220 -0
  86. package/src/tool/forensic-blood-test-simulator/i18n/ja.ts +220 -0
  87. package/src/tool/forensic-blood-test-simulator/i18n/ko.ts +220 -0
  88. package/src/tool/forensic-blood-test-simulator/i18n/nl.ts +220 -0
  89. package/src/tool/forensic-blood-test-simulator/i18n/pl.ts +220 -0
  90. package/src/tool/forensic-blood-test-simulator/i18n/pt.ts +220 -0
  91. package/src/tool/forensic-blood-test-simulator/i18n/ru.ts +220 -0
  92. package/src/tool/forensic-blood-test-simulator/i18n/sv.ts +220 -0
  93. package/src/tool/forensic-blood-test-simulator/i18n/tr.ts +220 -0
  94. package/src/tool/forensic-blood-test-simulator/i18n/zh.ts +220 -0
  95. package/src/tool/forensic-blood-test-simulator/index.ts +11 -0
  96. package/src/tool/forensic-blood-test-simulator/logic.ts +174 -0
  97. package/src/tool/forensic-blood-test-simulator/script.ts +192 -0
  98. package/src/tool/forensic-blood-test-simulator/seo.astro +15 -0
  99. package/src/tool/forensic-fiber-comparison-microscope/bibliography.astro +6 -0
  100. package/src/tool/forensic-fiber-comparison-microscope/bibliography.ts +16 -0
  101. package/src/tool/forensic-fiber-comparison-microscope/component.astro +146 -0
  102. package/src/tool/forensic-fiber-comparison-microscope/entry.ts +32 -0
  103. package/src/tool/forensic-fiber-comparison-microscope/forensic-fiber-comparison-microscope.css +629 -0
  104. package/src/tool/forensic-fiber-comparison-microscope/i18n/de.ts +250 -0
  105. package/src/tool/forensic-fiber-comparison-microscope/i18n/en.ts +246 -0
  106. package/src/tool/forensic-fiber-comparison-microscope/i18n/es.ts +246 -0
  107. package/src/tool/forensic-fiber-comparison-microscope/i18n/fr.ts +246 -0
  108. package/src/tool/forensic-fiber-comparison-microscope/i18n/id.ts +250 -0
  109. package/src/tool/forensic-fiber-comparison-microscope/i18n/it.ts +246 -0
  110. package/src/tool/forensic-fiber-comparison-microscope/i18n/ja.ts +250 -0
  111. package/src/tool/forensic-fiber-comparison-microscope/i18n/ko.ts +246 -0
  112. package/src/tool/forensic-fiber-comparison-microscope/i18n/nl.ts +246 -0
  113. package/src/tool/forensic-fiber-comparison-microscope/i18n/pl.ts +250 -0
  114. package/src/tool/forensic-fiber-comparison-microscope/i18n/pt.ts +250 -0
  115. package/src/tool/forensic-fiber-comparison-microscope/i18n/ru.ts +250 -0
  116. package/src/tool/forensic-fiber-comparison-microscope/i18n/sv.ts +250 -0
  117. package/src/tool/forensic-fiber-comparison-microscope/i18n/tr.ts +246 -0
  118. package/src/tool/forensic-fiber-comparison-microscope/i18n/zh.ts +250 -0
  119. package/src/tool/forensic-fiber-comparison-microscope/index.ts +11 -0
  120. package/src/tool/forensic-fiber-comparison-microscope/logic.ts +244 -0
  121. package/src/tool/forensic-fiber-comparison-microscope/render.ts +265 -0
  122. package/src/tool/forensic-fiber-comparison-microscope/seo.astro +15 -0
  123. package/src/tool/forensic-fiber-comparison-microscope/view.ts +267 -0
  124. package/src/tool/forensic-glass-becke-line-simulator/bibliography.astro +6 -0
  125. package/src/tool/forensic-glass-becke-line-simulator/bibliography.ts +16 -0
  126. package/src/tool/forensic-glass-becke-line-simulator/component.astro +81 -0
  127. package/src/tool/forensic-glass-becke-line-simulator/entry.ts +32 -0
  128. package/src/tool/forensic-glass-becke-line-simulator/forensic-glass-becke-line-simulator.css +392 -0
  129. package/src/tool/forensic-glass-becke-line-simulator/i18n/de.ts +231 -0
  130. package/src/tool/forensic-glass-becke-line-simulator/i18n/en.ts +231 -0
  131. package/src/tool/forensic-glass-becke-line-simulator/i18n/es.ts +231 -0
  132. package/src/tool/forensic-glass-becke-line-simulator/i18n/fr.ts +231 -0
  133. package/src/tool/forensic-glass-becke-line-simulator/i18n/id.ts +231 -0
  134. package/src/tool/forensic-glass-becke-line-simulator/i18n/it.ts +231 -0
  135. package/src/tool/forensic-glass-becke-line-simulator/i18n/ja.ts +231 -0
  136. package/src/tool/forensic-glass-becke-line-simulator/i18n/ko.ts +231 -0
  137. package/src/tool/forensic-glass-becke-line-simulator/i18n/nl.ts +231 -0
  138. package/src/tool/forensic-glass-becke-line-simulator/i18n/pl.ts +231 -0
  139. package/src/tool/forensic-glass-becke-line-simulator/i18n/pt.ts +231 -0
  140. package/src/tool/forensic-glass-becke-line-simulator/i18n/ru.ts +231 -0
  141. package/src/tool/forensic-glass-becke-line-simulator/i18n/sv.ts +231 -0
  142. package/src/tool/forensic-glass-becke-line-simulator/i18n/tr.ts +231 -0
  143. package/src/tool/forensic-glass-becke-line-simulator/i18n/zh.ts +231 -0
  144. package/src/tool/forensic-glass-becke-line-simulator/index.ts +11 -0
  145. package/src/tool/forensic-glass-becke-line-simulator/logic.ts +100 -0
  146. package/src/tool/forensic-glass-becke-line-simulator/seo.astro +15 -0
  147. package/src/tool/forensic-glass-becke-line-simulator/view.ts +281 -0
  148. package/src/tool/forensic-image-authenticity-analyzer/bibliography.astro +9 -0
  149. package/src/tool/forensic-image-authenticity-analyzer/bibliography.ts +7 -0
  150. package/src/tool/forensic-image-authenticity-analyzer/component.astro +250 -0
  151. package/src/tool/forensic-image-authenticity-analyzer/entry.ts +29 -0
  152. package/src/tool/forensic-image-authenticity-analyzer/forensic-image-metadata-authenticity-analyzer.css +679 -0
  153. package/src/tool/forensic-image-authenticity-analyzer/i18n/de.ts +105 -0
  154. package/src/tool/forensic-image-authenticity-analyzer/i18n/en.ts +105 -0
  155. package/src/tool/forensic-image-authenticity-analyzer/i18n/es.ts +105 -0
  156. package/src/tool/forensic-image-authenticity-analyzer/i18n/fr.ts +105 -0
  157. package/src/tool/forensic-image-authenticity-analyzer/i18n/id.ts +76 -0
  158. package/src/tool/forensic-image-authenticity-analyzer/i18n/it.ts +105 -0
  159. package/src/tool/forensic-image-authenticity-analyzer/i18n/ja.ts +72 -0
  160. package/src/tool/forensic-image-authenticity-analyzer/i18n/ko.ts +72 -0
  161. package/src/tool/forensic-image-authenticity-analyzer/i18n/nl.ts +75 -0
  162. package/src/tool/forensic-image-authenticity-analyzer/i18n/pl.ts +75 -0
  163. package/src/tool/forensic-image-authenticity-analyzer/i18n/pt.ts +105 -0
  164. package/src/tool/forensic-image-authenticity-analyzer/i18n/ru.ts +75 -0
  165. package/src/tool/forensic-image-authenticity-analyzer/i18n/sv.ts +76 -0
  166. package/src/tool/forensic-image-authenticity-analyzer/i18n/tr.ts +76 -0
  167. package/src/tool/forensic-image-authenticity-analyzer/i18n/zh.ts +71 -0
  168. package/src/tool/forensic-image-authenticity-analyzer/index.ts +11 -0
  169. package/src/tool/forensic-image-authenticity-analyzer/logic.ts +283 -0
  170. package/src/tool/forensic-image-authenticity-analyzer/seo.astro +10 -0
  171. package/src/tool/forensic-microcrystal-drug-simulator/bibliography.astro +6 -0
  172. package/src/tool/forensic-microcrystal-drug-simulator/bibliography.ts +12 -0
  173. package/src/tool/forensic-microcrystal-drug-simulator/component.astro +240 -0
  174. package/src/tool/forensic-microcrystal-drug-simulator/entry.ts +32 -0
  175. package/src/tool/forensic-microcrystal-drug-simulator/forensic-microcrystal-drug-simulator.css +430 -0
  176. package/src/tool/forensic-microcrystal-drug-simulator/i18n/de.ts +244 -0
  177. package/src/tool/forensic-microcrystal-drug-simulator/i18n/en.ts +244 -0
  178. package/src/tool/forensic-microcrystal-drug-simulator/i18n/es.ts +244 -0
  179. package/src/tool/forensic-microcrystal-drug-simulator/i18n/fr.ts +244 -0
  180. package/src/tool/forensic-microcrystal-drug-simulator/i18n/id.ts +244 -0
  181. package/src/tool/forensic-microcrystal-drug-simulator/i18n/it.ts +244 -0
  182. package/src/tool/forensic-microcrystal-drug-simulator/i18n/ja.ts +244 -0
  183. package/src/tool/forensic-microcrystal-drug-simulator/i18n/ko.ts +244 -0
  184. package/src/tool/forensic-microcrystal-drug-simulator/i18n/nl.ts +244 -0
  185. package/src/tool/forensic-microcrystal-drug-simulator/i18n/pl.ts +244 -0
  186. package/src/tool/forensic-microcrystal-drug-simulator/i18n/pt.ts +244 -0
  187. package/src/tool/forensic-microcrystal-drug-simulator/i18n/ru.ts +244 -0
  188. package/src/tool/forensic-microcrystal-drug-simulator/i18n/sv.ts +244 -0
  189. package/src/tool/forensic-microcrystal-drug-simulator/i18n/tr.ts +244 -0
  190. package/src/tool/forensic-microcrystal-drug-simulator/i18n/zh.ts +244 -0
  191. package/src/tool/forensic-microcrystal-drug-simulator/index.ts +11 -0
  192. package/src/tool/forensic-microcrystal-drug-simulator/logic.ts +189 -0
  193. package/src/tool/forensic-microcrystal-drug-simulator/seo.astro +15 -0
  194. package/src/tool/forensic-sex-determinator/bibliography.astro +14 -0
  195. package/src/tool/forensic-sex-determinator/bibliography.ts +12 -0
  196. package/src/tool/forensic-sex-determinator/component.astro +463 -0
  197. package/src/tool/forensic-sex-determinator/entry.ts +32 -0
  198. package/src/tool/forensic-sex-determinator/forensic-sex-determinator.css +413 -0
  199. package/src/tool/forensic-sex-determinator/i18n/de.ts +211 -0
  200. package/src/tool/forensic-sex-determinator/i18n/en.ts +211 -0
  201. package/src/tool/forensic-sex-determinator/i18n/es.ts +211 -0
  202. package/src/tool/forensic-sex-determinator/i18n/fr.ts +211 -0
  203. package/src/tool/forensic-sex-determinator/i18n/id.ts +211 -0
  204. package/src/tool/forensic-sex-determinator/i18n/it.ts +211 -0
  205. package/src/tool/forensic-sex-determinator/i18n/ja.ts +211 -0
  206. package/src/tool/forensic-sex-determinator/i18n/ko.ts +211 -0
  207. package/src/tool/forensic-sex-determinator/i18n/nl.ts +211 -0
  208. package/src/tool/forensic-sex-determinator/i18n/pl.ts +211 -0
  209. package/src/tool/forensic-sex-determinator/i18n/pt.ts +211 -0
  210. package/src/tool/forensic-sex-determinator/i18n/ru.ts +211 -0
  211. package/src/tool/forensic-sex-determinator/i18n/sv.ts +211 -0
  212. package/src/tool/forensic-sex-determinator/i18n/tr.ts +211 -0
  213. package/src/tool/forensic-sex-determinator/i18n/zh.ts +211 -0
  214. package/src/tool/forensic-sex-determinator/index.ts +11 -0
  215. package/src/tool/forensic-sex-determinator/logic.ts +89 -0
  216. package/src/tool/forensic-sex-determinator/seo.astro +15 -0
  217. package/src/tool/forensic-stature-estimator/bibliography.astro +14 -0
  218. package/src/tool/forensic-stature-estimator/bibliography.ts +12 -0
  219. package/src/tool/forensic-stature-estimator/component.astro +49 -0
  220. package/src/tool/forensic-stature-estimator/components/EstimationPanel.astro +65 -0
  221. package/src/tool/forensic-stature-estimator/components/OsteometricBoard.astro +39 -0
  222. package/src/tool/forensic-stature-estimator/components/OsteometricSelector.astro +109 -0
  223. package/src/tool/forensic-stature-estimator/dom-utils.ts +71 -0
  224. package/src/tool/forensic-stature-estimator/entry.ts +32 -0
  225. package/src/tool/forensic-stature-estimator/forensic-stature-estimator.css +689 -0
  226. package/src/tool/forensic-stature-estimator/helpers.ts +51 -0
  227. package/src/tool/forensic-stature-estimator/i18n/de.ts +196 -0
  228. package/src/tool/forensic-stature-estimator/i18n/en.ts +196 -0
  229. package/src/tool/forensic-stature-estimator/i18n/es.ts +196 -0
  230. package/src/tool/forensic-stature-estimator/i18n/fr.ts +196 -0
  231. package/src/tool/forensic-stature-estimator/i18n/id.ts +196 -0
  232. package/src/tool/forensic-stature-estimator/i18n/it.ts +196 -0
  233. package/src/tool/forensic-stature-estimator/i18n/ja.ts +196 -0
  234. package/src/tool/forensic-stature-estimator/i18n/ko.ts +196 -0
  235. package/src/tool/forensic-stature-estimator/i18n/nl.ts +196 -0
  236. package/src/tool/forensic-stature-estimator/i18n/pl.ts +196 -0
  237. package/src/tool/forensic-stature-estimator/i18n/pt.ts +196 -0
  238. package/src/tool/forensic-stature-estimator/i18n/ru.ts +196 -0
  239. package/src/tool/forensic-stature-estimator/i18n/sv.ts +196 -0
  240. package/src/tool/forensic-stature-estimator/i18n/tr.ts +196 -0
  241. package/src/tool/forensic-stature-estimator/i18n/zh.ts +196 -0
  242. package/src/tool/forensic-stature-estimator/index.ts +11 -0
  243. package/src/tool/forensic-stature-estimator/logic.ts +119 -0
  244. package/src/tool/forensic-stature-estimator/script.ts +288 -0
  245. package/src/tool/forensic-stature-estimator/seo.astro +15 -0
  246. package/src/tool/forensic-tlc-ink-simulator/bibliography.astro +6 -0
  247. package/src/tool/forensic-tlc-ink-simulator/bibliography.ts +16 -0
  248. package/src/tool/forensic-tlc-ink-simulator/component.astro +245 -0
  249. package/src/tool/forensic-tlc-ink-simulator/entry.ts +32 -0
  250. package/src/tool/forensic-tlc-ink-simulator/forensic-tlc-ink-simulator.css +462 -0
  251. package/src/tool/forensic-tlc-ink-simulator/i18n/de.ts +243 -0
  252. package/src/tool/forensic-tlc-ink-simulator/i18n/en.ts +243 -0
  253. package/src/tool/forensic-tlc-ink-simulator/i18n/es.ts +243 -0
  254. package/src/tool/forensic-tlc-ink-simulator/i18n/fr.ts +243 -0
  255. package/src/tool/forensic-tlc-ink-simulator/i18n/id.ts +243 -0
  256. package/src/tool/forensic-tlc-ink-simulator/i18n/it.ts +243 -0
  257. package/src/tool/forensic-tlc-ink-simulator/i18n/ja.ts +235 -0
  258. package/src/tool/forensic-tlc-ink-simulator/i18n/ko.ts +235 -0
  259. package/src/tool/forensic-tlc-ink-simulator/i18n/nl.ts +243 -0
  260. package/src/tool/forensic-tlc-ink-simulator/i18n/pl.ts +243 -0
  261. package/src/tool/forensic-tlc-ink-simulator/i18n/pt.ts +243 -0
  262. package/src/tool/forensic-tlc-ink-simulator/i18n/ru.ts +243 -0
  263. package/src/tool/forensic-tlc-ink-simulator/i18n/sv.ts +243 -0
  264. package/src/tool/forensic-tlc-ink-simulator/i18n/tr.ts +243 -0
  265. package/src/tool/forensic-tlc-ink-simulator/i18n/zh.ts +235 -0
  266. package/src/tool/forensic-tlc-ink-simulator/index.ts +11 -0
  267. package/src/tool/forensic-tlc-ink-simulator/logic.ts +152 -0
  268. package/src/tool/forensic-tlc-ink-simulator/seo.astro +15 -0
  269. package/src/tool/gsr-dispersion-calculator/bibliography.astro +6 -0
  270. package/src/tool/gsr-dispersion-calculator/bibliography.ts +16 -0
  271. package/src/tool/gsr-dispersion-calculator/component.astro +294 -0
  272. package/src/tool/gsr-dispersion-calculator/entry.ts +32 -0
  273. package/src/tool/gsr-dispersion-calculator/gsr-dispersion-calculator.css +305 -0
  274. package/src/tool/gsr-dispersion-calculator/i18n/de.ts +272 -0
  275. package/src/tool/gsr-dispersion-calculator/i18n/en.ts +272 -0
  276. package/src/tool/gsr-dispersion-calculator/i18n/es.ts +272 -0
  277. package/src/tool/gsr-dispersion-calculator/i18n/fr.ts +272 -0
  278. package/src/tool/gsr-dispersion-calculator/i18n/id.ts +272 -0
  279. package/src/tool/gsr-dispersion-calculator/i18n/it.ts +272 -0
  280. package/src/tool/gsr-dispersion-calculator/i18n/ja.ts +272 -0
  281. package/src/tool/gsr-dispersion-calculator/i18n/ko.ts +272 -0
  282. package/src/tool/gsr-dispersion-calculator/i18n/nl.ts +272 -0
  283. package/src/tool/gsr-dispersion-calculator/i18n/pl.ts +272 -0
  284. package/src/tool/gsr-dispersion-calculator/i18n/pt.ts +272 -0
  285. package/src/tool/gsr-dispersion-calculator/i18n/ru.ts +272 -0
  286. package/src/tool/gsr-dispersion-calculator/i18n/sv.ts +272 -0
  287. package/src/tool/gsr-dispersion-calculator/i18n/tr.ts +272 -0
  288. package/src/tool/gsr-dispersion-calculator/i18n/zh.ts +272 -0
  289. package/src/tool/gsr-dispersion-calculator/index.ts +11 -0
  290. package/src/tool/gsr-dispersion-calculator/logic.ts +148 -0
  291. package/src/tool/gsr-dispersion-calculator/seo.astro +15 -0
  292. package/src/tool/widmark-alcohol-simulator/bibliography.astro +14 -0
  293. package/src/tool/widmark-alcohol-simulator/bibliography.ts +12 -0
  294. package/src/tool/widmark-alcohol-simulator/component.astro +453 -0
  295. package/src/tool/widmark-alcohol-simulator/entry.ts +32 -0
  296. package/src/tool/widmark-alcohol-simulator/i18n/de.ts +193 -0
  297. package/src/tool/widmark-alcohol-simulator/i18n/en.ts +206 -0
  298. package/src/tool/widmark-alcohol-simulator/i18n/es.ts +193 -0
  299. package/src/tool/widmark-alcohol-simulator/i18n/fr.ts +193 -0
  300. package/src/tool/widmark-alcohol-simulator/i18n/id.ts +193 -0
  301. package/src/tool/widmark-alcohol-simulator/i18n/it.ts +193 -0
  302. package/src/tool/widmark-alcohol-simulator/i18n/ja.ts +193 -0
  303. package/src/tool/widmark-alcohol-simulator/i18n/ko.ts +193 -0
  304. package/src/tool/widmark-alcohol-simulator/i18n/nl.ts +193 -0
  305. package/src/tool/widmark-alcohol-simulator/i18n/pl.ts +193 -0
  306. package/src/tool/widmark-alcohol-simulator/i18n/pt.ts +193 -0
  307. package/src/tool/widmark-alcohol-simulator/i18n/ru.ts +193 -0
  308. package/src/tool/widmark-alcohol-simulator/i18n/sv.ts +193 -0
  309. package/src/tool/widmark-alcohol-simulator/i18n/tr.ts +193 -0
  310. package/src/tool/widmark-alcohol-simulator/i18n/zh.ts +193 -0
  311. package/src/tool/widmark-alcohol-simulator/index.ts +11 -0
  312. package/src/tool/widmark-alcohol-simulator/logic.ts +97 -0
  313. package/src/tool/widmark-alcohol-simulator/seo.astro +15 -0
  314. package/src/tool/widmark-alcohol-simulator/widmark-alcohol-simulator.css +386 -0
  315. package/src/tools.ts +27 -0
  316. package/src/types.ts +70 -0
@@ -0,0 +1,245 @@
1
+ import { bibliography } from '../bibliography';
2
+ import type { ToolLocaleContent } from '../../../types';
3
+
4
+ const slug = 'altersschatzung-zahn-skelett-weisheitszahn';
5
+ const title = 'Altersschätzer für Zahnentwicklung, Skelettreife und Weisheitszähne';
6
+ const description = 'Schätzen Sie ein forensisches Altersintervall anhand der Zahnentwicklung, der Skelettreife und der Weisheitszahn-Indikatoren für Screening und Falltriage.';
7
+
8
+ const howTo = [
9
+ {
10
+ name: 'Wählen Sie den Beweisschwerpunkt',
11
+ text: 'Wählen Sie gemischte Evidenz für eine ausgewogene Triage, zahnärztliche Priorität, wenn Zahnbefunde aussagekräftiger sind, oder skelettale Priorität, wenn radiografische Skelettindikatoren die Hauptquelle darstellen.',
12
+ },
13
+ {
14
+ name: 'Bewerten Sie jeden Reifeindikator',
15
+ text: 'Stufen Sie jedes Stadium von 0 bis 8 ein. Niedrigere Stadien stehen für eine frühe Entwicklung, mittlere für die adoleszente Reifung und höhere für reife oder nahezu reife Befunde.',
16
+ },
17
+ {
18
+ name: 'Betrachten Sie das Intervall, nicht nur das zentrale Alter',
19
+ text: 'Verwenden Sie die Mindest-, Wahrscheinlichkeits- und Höchstalterswerte gemeinsam. Die forensische Altersschätzung muss als Intervall ausgedrückt werden, da die biologische Entwicklung individuell stark variiert.',
20
+ },
21
+ {
22
+ name: 'Prüfen Sie Diskrepanzen zwischen den Indikatoren',
23
+ text: 'Sollten zahnärztliche, skelettale und Weisheitszahn-Stadien auf unterschiedliche Altersbereiche hinweisen, behandeln Sie das Ergebnis als explorativ und ziehen Sie weitere Beweise heran, bevor Sie Schlussfolgerungen treffen.',
24
+ },
25
+ ];
26
+
27
+ const faq = [
28
+ {
29
+ question: 'Kann dieser forensische Altersschätzer die rechtliche Volljährigkeit bestimmen?',
30
+ answer: 'Nein. Dies ist ein Screening-Rechner für Bildungs- und Triagezwecke. Die rechtliche Altersbestimmung erfordert validierte lokale Protokolle, qualifizierte Sachverständige, eine sorgfältige Identitätsdokumentation und die Einhaltung gerichtsspezifischer Standards.',
31
+ },
32
+ {
33
+ question: 'Warum zeigt das Ergebnis ein Altersintervall an?',
34
+ answer: 'Zahndurchbruch, Skelettfusion und Weisheitszahnentwicklung variieren je nach Abstammung, Ernährung, Gesundheitszustand, Geschlecht, Referenzpopulation und Bildgebungsmethode. Ein Intervall ist wesentlich präziser und ehrlicher als ein einzelnes exaktes Alter.',
35
+ },
36
+ {
37
+ question: 'Was bedeutet gemischte Evidenz?',
38
+ answer: 'Gemischte Evidenz gleicht Zahnentwicklung, Skelettreife und Weisheitszahnstadium aus. Verwenden Sie diesen Modus, wenn kein einzelner Indikator für den Fall eindeutig zuverlässiger ist.',
39
+ },
40
+ {
41
+ question: 'Sind Weisheitszähne in jedem Fall zuverlässig?',
42
+ answer: 'Weisheitszähne sind in der späten Adoleszenz und im jungen Erwachsenenalter nützlich, weisen aber eine hohe Variabilität auf. Agenesie, Pathologien, Populationsunterschiede und die radiografische Bildqualität können ihren forensischen Wert einschränken.',
43
+ },
44
+ {
45
+ question: 'Sollte dieses Tool bei echten Fällen verwendet werden?',
46
+ answer: 'Nur als vorläufige Orientierungshilfe. Bei echten Fällen müssen validierte Methoden, kalibrierte Referenzdaten, eine unabhängige Überprüfung sowie eine transparente Dokumentation der Unsicherheiten und Einschränkungen erfolgen.',
47
+ },
48
+ ];
49
+
50
+ export const content: ToolLocaleContent = {
51
+ slug,
52
+ title,
53
+ description,
54
+ ui: {
55
+ caseBoard: 'Forensische Falltafel',
56
+ controls: 'Forensische Alterskontrollen',
57
+ results: 'Forensische Altersergebnisse',
58
+ maturityProfile: 'Dynamisches Reifeprofil',
59
+ screeningOnly: 'Screening-Schätzung',
60
+ evidenceType: 'Beweisschwerpunkt',
61
+ mixedEvidence: 'Gemischte Evidenz',
62
+ dentalPriority: 'Zahnärztliche Priorität',
63
+ skeletalPriority: 'Skelettale Priorität',
64
+ dentalStage: 'Zahnentwicklungsstadium',
65
+ epiphysealStage: 'Epiphysenfugenstadium',
66
+ thirdMolarStage: 'Weisheitszahnstadium',
67
+ minimumAge: 'Minimum',
68
+ likelyAge: 'Wahrscheinlich',
69
+ maximumAge: 'Maximum',
70
+ maturityScore: 'Reifepunktzahl',
71
+ stageLabel: 'Stadium',
72
+ ageUnit: 'Jahre',
73
+ dentalShort: 'Zahn',
74
+ boneShort: 'Knochen',
75
+ molarShort: 'Molar',
76
+ dentalStageHelp: 'Kronen-, Wurzel- und Apexbildung.',
77
+ epiphysealStageHelp: 'Wachstumsfugenschluss und Skelettfusion.',
78
+ molarStageHelp: 'Weisheitszahn-Mineralisation und Apexschluss.',
79
+ dentalStage0: 'Fehlend',
80
+ dentalStage1: 'Höcker',
81
+ dentalStage2: 'Krone',
82
+ dentalStage3: 'Wurzelbeginn',
83
+ dentalStage4: 'Wurzelhälfte',
84
+ dentalStage5: 'Wurzel lang',
85
+ dentalStage6: 'Apex eng',
86
+ dentalStage7: 'Apex schließt',
87
+ dentalStage8: 'Vollständig',
88
+ epiphysealStage0: 'Offen',
89
+ epiphysealStage1: 'Rand',
90
+ epiphysealStage2: 'Verengung',
91
+ epiphysealStage3: 'Brücke',
92
+ epiphysealStage4: 'Halb fusioniert',
93
+ epiphysealStage5: 'Größtenteils fusioniert',
94
+ epiphysealStage6: 'Nur Linie',
95
+ epiphysealStage7: 'Fast geschlossen',
96
+ epiphysealStage8: 'Geschlossen',
97
+ molarStage0: 'Fehlend',
98
+ molarStage1: 'Höcker',
99
+ molarStage2: 'Kronenbeginn',
100
+ molarStage3: 'Krone vollständig',
101
+ molarStage4: 'Wurzelbeginn',
102
+ molarStage5: 'Wurzelhälfte',
103
+ molarStage6: 'Wurzel lang',
104
+ molarStage7: 'Apex schließt',
105
+ molarStage8: 'Vollständig',
106
+ confidenceexploratory: 'Explorativ',
107
+ confidencemoderate: 'Moderat',
108
+ confidencestrong: 'Stark',
109
+ noteTriage: 'Als Triage-Schätzung verwenden, nicht als rechtliche Altersbestimmung.',
110
+ noteFinalAssessment: 'Die endgültige forensische Altersbeurteilung sollte Radiologie, zahnärztliche Untersuchung, Anamnese und gerichtsspezifische Standards kombinieren.',
111
+ noteWideInterval: 'Die Indikatoren weichen um mehr als vier Jahre voneinander ab, daher wurde das Intervall erweitert.',
112
+ },
113
+ seo: [
114
+ {
115
+ type: 'title',
116
+ text: 'Forensischer Altersschätzer: Zahn-, Skelett- und Weisheitszahn-Screening-Rechner',
117
+ level: 2,
118
+ },
119
+ {
120
+ type: 'paragraph',
121
+ html: 'Verwenden Sie diesen forensischen Altersschätzer für eine schnelle und transparente Organisation biologischer Reifebelege vor einer formellen Beurteilung. Der Rechner kombiniert Zahnentwicklung, Epiphysenfusion und das Weisheitszahnstadium zu einem geschätzten Altersintervall. Er adressiert Suchanfragen wie <strong>forensischer Altersschätzungsrechner</strong>, <strong>Zahnaltersbestimmung</strong>, <strong>Skelettreife-Altersschätzung</strong> und <strong>Weisheitszahn-Altersschätzung</strong>: Benutzer erfahren, was die Indikatoren bedeuten, wie sie kombiniert werden und wie mit Unsicherheiten umzugehen ist.',
122
+ },
123
+ {
124
+ type: 'paragraph',
125
+ html: 'Das Ergebnis wird explizit als <strong>Mindestalter, wahrscheinliches Alter und Höchstalter</strong> dargestellt. Ein einzelnes exaktes Alter wäre irreführend, da die biologische Entwicklung interindividuell variiert. Faktoren wie Ernährung, Gesundheit, Abstammung, Geschlecht, Referenzpopulation, Bildqualität, Pathologien und Beobachterunterschiede beeinflussen die Interpretation. Behandeln Sie den Rechner als strukturierte Screening-Hilfe, nicht als rechtliche Schlussfolgerung.',
126
+ },
127
+ {
128
+ type: 'title',
129
+ text: 'Bedeutung der drei Reifeindikatoren',
130
+ level: 3,
131
+ },
132
+ {
133
+ type: 'paragraph',
134
+ html: 'Die drei Schieberegler repräsentieren allgemeine Entwicklungsstadien von 0 bis 8. Stadium 0 signalisiert eine sehr frühe oder fehlende Reife; Stadium 8 eine vollständige oder nahezu vollständige Reife. Die Stadien sind nicht an eine einzelne klinische Methode gebunden, sondern bieten eine praktische Abstraktion für einen direkten Vergleich der Indikatoren innerhalb einer Intervallschätzung.',
135
+ },
136
+ {
137
+ type: 'table',
138
+ headers: ['Indikator', 'Repräsentation', 'Nützlichkeit', 'Wichtige Vorsicht'],
139
+ rows: [
140
+ ['Zahnentwicklung', 'Bildung, Durchbruch und Reife der Zähne (exkl. Weisheitszähne).', 'Altersschätzung bei Kindern und Jugendlichen anhand der Zahnreife.', 'Zahnerkrankungen, fehlende Zähne, Restaurationen und populationsspezifische Unterschiede können die Interpretation verzerren.'],
141
+ ['Epiphysenfusion', 'Progressiver Verschluss der Wachstumsfugen im Skelett.', 'Altersschätzung bei Jugendlichen oder jungen Erwachsenen anhand der Skelettreife.', 'Der Fusionszeitpunkt variiert je nach beobachtetem Knochen, Geschlecht, endokriner Gesundheit und Bildgebungsverfahren.'],
142
+ ['Weisheitszahnstadium', 'Entwicklung und Reifung der Weisheitszähne.', 'Beurteilung des Alters im späten Jugend- oder jungen Erwachsenenalter, wenn andere Zähne bereits reif sind.', 'Hohe Variabilität; Agenesie, Extraktion, Retention und Bildqualität sind kritische Faktoren.'],
143
+ ],
144
+ },
145
+ {
146
+ type: 'title',
147
+ text: 'Interpretation des Altersintervalls',
148
+ level: 3,
149
+ },
150
+ {
151
+ type: 'paragraph',
152
+ html: 'Betrachten Sie alle drei Werte gemeinsam. Das <strong>wahrscheinliche Alter</strong> ist die gewichtete zentrale Schätzung basierend auf dem gewählten Beweisschwerpunkt. Die <strong>Mindest-</strong> und <strong>Höchstwerte</strong> definieren den praktischen Unsicherheitsbereich. Bei Übereinstimmung der Indikatoren wird das Band enger; bei widersprüchlichen Signalen aus Zahn-, Skelett- und Weisheitszahn-Befunden erweitert sich das Band und der Konfidenzgrad sinkt.',
153
+ },
154
+ {
155
+ type: 'table',
156
+ headers: ['Ergebnismuster', 'Interpretation', 'Empfohlener nächster Schritt'],
157
+ rows: [
158
+ ['Enges Intervall, hohe Konfidenz', 'Indikatoren stimmen überein und weisen auf eine ähnliche Entwicklungsphase hin.', 'Quellindikatoren dokumentieren und prüfen, ob eine formal validierte Methode erforderlich ist.'],
159
+ ['Moderates Intervall', 'Diskrepanzen vorhanden oder der Beweisschwerpunkt beeinflusst das zentrale Alter.', 'Bildqualität und Stadienzuweisung prüfen; gegebenenfalls Priorisierung zwischen Zahn- und Skelettbefunden abwägen.'],
160
+ ['Weites exploratives Intervall', 'Reifeindikatoren widersprechen sich oder deuten auf unterschiedliche Entwicklungsperioden hin.', 'Nicht allein auf die Schätzung verlassen; weitere Unterlagen, zusätzliche Bildgebung oder fachärztliche Prüfung einholen.'],
161
+ ],
162
+ },
163
+ {
164
+ type: 'title',
165
+ text: 'Wahl des Evidenzmodus (Zahn-, Skelett- oder gemischt)',
166
+ level: 3,
167
+ },
168
+ {
169
+ type: 'paragraph',
170
+ html: '<strong>Gemischte Evidenz</strong> ist der Standardmodus für allgemeines Screening, da sie alle Indikatoren ausbalanciert. Wählen Sie <strong>zahnärztliche Priorität</strong> bei vollständigen und gut dokumentierten Zahnbefunden. Wählen Sie <strong>Skelettpriorität</strong>, wenn radiografische Skelettbefunde die stärkste Datenbasis bilden. Der Modus wertet schwache Beweise nicht auf, er gewichtet lediglich die verfügbaren Indikatoren entsprechend.',
171
+ },
172
+ {
173
+ type: 'list',
174
+ items: [
175
+ '<strong>Zahnärztliche Priorität:</strong> wenn Zahnentwicklung klar eingestuft und Weisheitszahn-Daten verfügbar sind.',
176
+ '<strong>Skelettpriorität:</strong> wenn die Epiphysenfusion das am besten dokumentierte Reifesignal darstellt.',
177
+ '<strong>Gemischte Evidenz:</strong> für eine erste ausgewogene Übersicht.',
178
+ '<strong>Konfidenzmarkierung:</strong> nutzen, um Diskrepanzen zu erkennen, bevor eine Überinterpretation erfolgt.',
179
+ ],
180
+ },
181
+ {
182
+ type: 'title',
183
+ text: 'Forensische Altersschätzung ist kein Identitätsnachweis',
184
+ level: 3,
185
+ },
186
+ {
187
+ type: 'paragraph',
188
+ html: 'Eine Altersschätzung kann eine Fallakte stützen, ersetzt jedoch keine dokumentarische Identitätsprüfung. In Kontexten wie Migration, Schutzbedarf, Strafrecht oder Vermisstenfällen muss die Beurteilung multidisziplinär erfolgen. Ein verantwortungsvoller Bericht muss Methode, Referenzpopulation, Bildquelle, Qualifikation des Beobachters sowie Konfidenzintervalle und Limitationen explizit ausweisen.',
189
+ },
190
+ {
191
+ type: 'paragraph',
192
+ html: 'Dieses Tool dient primär der <strong>Bildung, Triage, Protokollplanung und transparenten Kommunikation</strong>. Es verdeutlicht, warum Altersschlussfolgerungen vorsichtig zu ziehen sind und warum rechtlich relevante Schwellenwerte (wie das 18. Lebensjahr) niemals allein auf Basis eines vereinfachten Rechners entschieden werden dürfen.',
193
+ },
194
+ {
195
+ type: 'title',
196
+ text: 'Checkliste für den forensischen Bericht',
197
+ level: 3,
198
+ },
199
+ {
200
+ type: 'list',
201
+ items: [
202
+ '<strong>Beweisquelle bestätigen:</strong> Dokumentieren Sie, ob die Stadien aus Zahn- oder Röntgenaufnahmen (Panoramaröntgen, Hand-Handgelenk, Schlüsselbein etc.) stammen.',
203
+ '<strong>Fehlende/schwache Daten vermerken:</strong> Fehlende Weisheitszähne, schlechte Bildqualität oder Anomalien müssen im Bericht klar benannt werden.',
204
+ '<strong>Validierte Methoden nutzen:</strong> Nutzen Sie für rechtliche Entscheidungen spezifisch validierte Zahn- oder Skelettmethoden.',
205
+ '<strong>Unsicherheit klar kommunizieren:</strong> Geben Sie Spannen an und vermeiden Sie sprachliche Formulierungen, die ein exaktes chronologisches Alter suggerieren.',
206
+ '<strong>Fachärztliche Überprüfung:</strong> Hochrisikofälle sollten zwingend durch qualifizierte forensische Odontologen, Radiologen oder Anthropologen geprüft werden.',
207
+ ],
208
+ },
209
+ ],
210
+ faq,
211
+ bibliography,
212
+ howTo,
213
+ schemas: [
214
+ {
215
+ '@context': 'https://schema.org',
216
+ '@type': 'SoftwareApplication',
217
+ name: title,
218
+ description,
219
+ applicationCategory: 'ForensicApplication',
220
+ operatingSystem: 'Any',
221
+ },
222
+ {
223
+ '@context': 'https://schema.org',
224
+ '@type': 'FAQPage',
225
+ mainEntity: faq.map((item) => ({
226
+ '@type': 'Question',
227
+ name: item.question,
228
+ acceptedAnswer: {
229
+ '@type': 'Answer',
230
+ text: item.answer,
231
+ },
232
+ })),
233
+ },
234
+ {
235
+ '@context': 'https://schema.org',
236
+ '@type': 'HowTo',
237
+ name: title,
238
+ step: howTo.map((step) => ({
239
+ '@type': 'HowToStep',
240
+ name: step.name,
241
+ text: step.text,
242
+ })),
243
+ },
244
+ ],
245
+ };
@@ -0,0 +1,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 = 'Dental, Skeletal, and Third Molar Age Estimator';
6
+ const description = 'Estimate a forensic age interval from dental development, skeletal maturity, and third molar indicators for screening and case triage.';
7
+
8
+ const howTo = [
9
+ {
10
+ name: 'Select the evidence emphasis',
11
+ text: 'Choose mixed evidence for balanced triage, dental priority when dental findings are more robust, or skeletal priority when radiographic skeletal indicators provide the primary evidence.',
12
+ },
13
+ {
14
+ name: 'Score each maturity indicator',
15
+ text: 'Assign each indicator a stage from 0 to 8. Lower stages represent early development, middle stages reflect adolescent maturation, and higher stages indicate mature or near-mature findings.',
16
+ },
17
+ {
18
+ name: 'Interpret the interval, not just the central age',
19
+ text: 'Consider the minimum, likely, and maximum age values together. Forensic age assessment should always be expressed as an interval, as biological development varies significantly between individuals.',
20
+ },
21
+ {
22
+ name: 'Check for disagreement between indicators',
23
+ text: 'If dental, skeletal, and third molar stages point to conflicting age ranges, treat the output as exploratory and seek further corroborating evidence before forming conclusions.',
24
+ },
25
+ ];
26
+
27
+ const faq = [
28
+ {
29
+ question: 'Can this forensic age estimator determine legal adulthood?',
30
+ answer: 'No. This is a screening tool for educational and triage purposes. Legal age determination requires validated local protocols, qualified forensic experts, comprehensive identity documentation, and adherence to jurisdiction-specific standards.',
31
+ },
32
+ {
33
+ question: 'Why does the result display an age interval?',
34
+ answer: 'Dental eruption, skeletal fusion, and third molar development are influenced by ancestry, nutrition, health status, sex, reference population, and imaging modality. An interval provides a more accurate and transparent representation of biological variability than a single point estimate.',
35
+ },
36
+ {
37
+ question: 'What does "mixed evidence" mean?',
38
+ answer: 'Mixed evidence mode balances the inputs from dental development, skeletal maturity, and third molar stages. Use this setting when no single indicator is clearly more reliable or complete for the specific case.',
39
+ },
40
+ {
41
+ question: 'Are third molars reliable for every case?',
42
+ answer: 'Third molars are valuable in late adolescence and young adulthood, but they are highly variable. Factors such as agenesis, pathology, population-specific traits, and radiographic quality can significantly limit their utility.',
43
+ },
44
+ {
45
+ question: 'Should this tool be used for formal casework?',
46
+ answer: 'It should serve only as a preliminary aid. Formal forensic casework must utilize validated methods, calibrated reference data, independent peer review, and transparent reporting of all uncertainties and limitations.',
47
+ },
48
+ ];
49
+
50
+ export const content: ToolLocaleContent = {
51
+ slug,
52
+ title,
53
+ description,
54
+ ui: {
55
+ caseBoard: 'Forensic case board',
56
+ controls: 'Forensic age controls',
57
+ results: 'Forensic age results',
58
+ maturityProfile: 'Dynamic maturity profile',
59
+ screeningOnly: 'Screening estimate',
60
+ evidenceType: 'Evidence emphasis',
61
+ mixedEvidence: 'Mixed evidence',
62
+ dentalPriority: 'Dental priority',
63
+ skeletalPriority: 'Skeletal priority',
64
+ dentalStage: 'Dental development stage',
65
+ epiphysealStage: 'Epiphyseal fusion stage',
66
+ thirdMolarStage: 'Third molar stage',
67
+ minimumAge: 'Minimum',
68
+ likelyAge: 'Likely',
69
+ maximumAge: 'Maximum',
70
+ maturityScore: 'Maturity score',
71
+ stageLabel: 'Stage',
72
+ ageUnit: 'years',
73
+ dentalShort: 'Dental',
74
+ boneShort: 'Bone',
75
+ molarShort: 'Molar',
76
+ dentalStageHelp: 'Crown, root, and apex formation.',
77
+ epiphysealStageHelp: 'Growth plate closure and skeletal fusion.',
78
+ molarStageHelp: 'Third molar mineralization and apex closure.',
79
+ dentalStage0: 'Absent',
80
+ dentalStage1: 'Cusp',
81
+ dentalStage2: 'Crown',
82
+ dentalStage3: 'Root start',
83
+ dentalStage4: 'Root half',
84
+ dentalStage5: 'Root long',
85
+ dentalStage6: 'Apex narrow',
86
+ dentalStage7: 'Apex closing',
87
+ dentalStage8: 'Complete',
88
+ epiphysealStage0: 'Open',
89
+ epiphysealStage1: 'Margin',
90
+ epiphysealStage2: 'Narrowing',
91
+ epiphysealStage3: 'Bridge',
92
+ epiphysealStage4: 'Half fused',
93
+ epiphysealStage5: 'Mostly fused',
94
+ epiphysealStage6: 'Line only',
95
+ epiphysealStage7: 'Near closed',
96
+ epiphysealStage8: 'Closed',
97
+ molarStage0: 'Absent',
98
+ molarStage1: 'Cusp',
99
+ molarStage2: 'Crown start',
100
+ molarStage3: 'Crown full',
101
+ molarStage4: 'Root start',
102
+ molarStage5: 'Root half',
103
+ molarStage6: 'Root long',
104
+ molarStage7: 'Apex closing',
105
+ molarStage8: 'Complete',
106
+ confidenceexploratory: 'Exploratory',
107
+ confidencemoderate: 'Moderate',
108
+ confidencestrong: 'Strong',
109
+ noteTriage: 'Use as a triage estimate; not a legal age determination.',
110
+ noteFinalAssessment: 'Final forensic age assessment must integrate radiology, clinical dental examination, history, and jurisdiction-specific standards.',
111
+ noteWideInterval: 'Indicators disagree by more than four years; the interval has been widened.',
112
+ },
113
+ seo: [
114
+ {
115
+ type: 'title',
116
+ text: 'Forensic Age Estimator: Dental, Skeletal, and Third Molar Screening Calculator',
117
+ level: 2,
118
+ },
119
+ {
120
+ type: 'paragraph',
121
+ html: 'This forensic age estimator provides a transparent framework for organizing biological maturity evidence prior to a formal assessment. The tool integrates dental development, epiphyseal fusion, and third molar stages to produce an estimated age interval. It addresses common inquiries such as <strong>forensic age estimation</strong>, <strong>dental maturity assessment</strong>, and <strong>skeletal age estimation</strong>, helping users understand how indicators are combined and the inherent uncertainty involved.',
122
+ },
123
+ {
124
+ type: 'paragraph',
125
+ html: 'Results are presented as <strong>minimum, likely, and maximum ages</strong>. Point estimates are often misleading because biological development varies widely due to nutrition, health, ancestry, and environmental factors. This tool should be used as a structured screening aid, not as a definitive legal conclusion.',
126
+ },
127
+ {
128
+ type: 'title',
129
+ text: 'Understanding Maturity Indicators',
130
+ level: 3,
131
+ },
132
+ {
133
+ type: 'paragraph',
134
+ html: 'The maturity scales (0-8) provide a practical abstraction to compare different biological systems. Stage 0 indicates early or absent evidence of maturity, while stage 8 represents completion. These stages do not replace named clinical methods but facilitate a cross-system comparison.',
135
+ },
136
+ {
137
+ type: 'table',
138
+ headers: ['Indicator', 'Description', 'Context', 'Caution'],
139
+ rows: [
140
+ ['Dental development', 'Formation and eruption (excluding third molars).', 'Primary metric for children and adolescents.', 'Can be biased by dental disease, extractions, or population-specific differences.'],
141
+ ['Epiphyseal fusion', 'Progressive closure of growth plates.', 'Key indicator for late adolescence and young adulthood.', 'Highly dependent on the specific bone, sex, and health status.'],
142
+ ['Third molar stage', 'Formation and maturation of wisdom teeth.', 'Critical for late adolescent and young adult assessment.', 'Highly variable; requires careful analysis of agenesis and impaction.'],
143
+ ],
144
+ },
145
+ {
146
+ type: 'title',
147
+ text: 'Interpreting the Age Interval',
148
+ level: 3,
149
+ },
150
+ {
151
+ type: 'paragraph',
152
+ html: 'The <strong>likely age</strong> represents the weighted central estimate based on your chosen evidence emphasis. The <strong>minimum</strong> and <strong>maximum</strong> values define the uncertainty band. Agreement between indicators results in a narrower band; conflicting signals widen the interval and decrease the confidence rating.',
153
+ },
154
+ {
155
+ type: 'table',
156
+ headers: ['Pattern', 'Suggestion', 'Action'],
157
+ rows: [
158
+ ['Narrow interval / Strong confidence', 'Indicators align.', 'Document findings and assess if formal validation is required.'],
159
+ ['Moderate interval', 'Disagreement or evidence weight impacts result.', 'Verify image quality and stage assignments.'],
160
+ ['Wide exploratory interval', 'Indicators conflict.', 'Seek corroborating records or specialist review.'],
161
+ ],
162
+ },
163
+ {
164
+ type: 'title',
165
+ text: 'Selecting the Evidence Mode',
166
+ level: 3,
167
+ },
168
+ {
169
+ type: 'paragraph',
170
+ html: '<strong>Mixed evidence</strong> is the default, balancing all indicators. Select <strong>dental priority</strong> when dental records are exceptionally robust. Select <strong>skeletal priority</strong> when radiographic skeletal evidence is the most comprehensive data point. These modes do not enhance the quality of weak evidence; they only adjust the mathematical weighting.',
171
+ },
172
+ {
173
+ type: 'list',
174
+ items: [
175
+ '<strong>Dental Priority:</strong> Use when dental development is clearly staged and third molar evidence is present.',
176
+ '<strong>Skeletal Priority:</strong> Use when epiphyseal fusion is the best-documented signal.',
177
+ '<strong>Mixed Evidence:</strong> Ideal for a balanced initial screening.',
178
+ '<strong>Confidence Label:</strong> Monitor this to identify discrepancies before interpretation.',
179
+ ],
180
+ },
181
+ {
182
+ type: 'title',
183
+ text: 'Limitations in Forensic Contexts',
184
+ level: 3,
185
+ },
186
+ {
187
+ type: 'paragraph',
188
+ html: 'Age estimation is supportive, never conclusive proof of identity. In legal or safeguarding contexts-such as disaster victim identification or migration-assessments must be multidisciplinary. Responsible reports must detail the specific methodology, reference population, observer qualifications, and known limitations.',
189
+ },
190
+ {
191
+ type: 'paragraph',
192
+ html: 'This tool is designed for <strong>education and triage</strong>. It reinforces why age conclusions require caution and why critical thresholds-such as the 18th birthday-should never be determined solely by a simplified calculator.',
193
+ },
194
+ {
195
+ type: 'title',
196
+ text: 'Forensic Reporting Checklist',
197
+ level: 3,
198
+ },
199
+ {
200
+ type: 'list',
201
+ items: [
202
+ '<strong>Source Documentation:</strong> Explicitly note if stages are based on dental exams, panoramic X-rays, or skeletal imaging (e.g., hand-wrist, clavicle).',
203
+ '<strong>Missing/Weak Data:</strong> Document absences, poor quality imagery, or anomalies clearly.',
204
+ '<strong>Methodological Validation:</strong> Ensure selected methods are recognized within the local jurisdiction.',
205
+ '<strong>Uncertainty Communication:</strong> Always present a range; avoid language implying exact chronological age.',
206
+ '<strong>Specialist Review:</strong> High-stakes cases must be reviewed by forensic odontologists, radiologists, or anthropologists.',
207
+ ],
208
+ },
209
+ ],
210
+ faq,
211
+ bibliography,
212
+ howTo,
213
+ schemas: [
214
+ {
215
+ '@context': 'https://schema.org',
216
+ '@type': 'SoftwareApplication',
217
+ name: title,
218
+ description,
219
+ applicationCategory: 'ForensicApplication',
220
+ operatingSystem: 'Any',
221
+ },
222
+ {
223
+ '@context': 'https://schema.org',
224
+ '@type': 'FAQPage',
225
+ mainEntity: faq.map((item) => ({
226
+ '@type': 'Question',
227
+ name: item.question,
228
+ acceptedAnswer: {
229
+ '@type': 'Answer',
230
+ text: item.answer,
231
+ },
232
+ })),
233
+ },
234
+ {
235
+ '@context': 'https://schema.org',
236
+ '@type': 'HowTo',
237
+ name: title,
238
+ step: howTo.map((step) => ({
239
+ '@type': 'HowToStep',
240
+ name: step.name,
241
+ text: step.text,
242
+ })),
243
+ },
244
+ ],
245
+ };