@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,220 @@
1
+ import type { ToolLocaleContent } from '../../../types';
2
+
3
+ const slug = 'simulateur-test-presomptif-sang-medecine-legale';
4
+ const title = 'Simulateur de Test Presomptif de Sang Forensique';
5
+ const description = 'Simulez des tests presomptifs de sang en utilisant les reactifs de Kastle-Meyer et de Luminol. Distinguez le vrai sang des faux positifs.';
6
+
7
+ const howTo = [
8
+ {
9
+ "name": "Selectionner un echantillon",
10
+ "text": "Choisissez un echantillon dans le portoir representant soit du sang, soit un materiau faux positif."
11
+ },
12
+ {
13
+ "name": "Choisir la methode de test",
14
+ "text": "Decidez si vous effectuez le test de couleur de Kastle-Meyer ou le test de luminescence au Luminol."
15
+ },
16
+ {
17
+ "name": "Appliquer les reactifs",
18
+ "text": "Ajoutez des gouttes de reactif Kastle-Meyer suivies de peroxyde d'hydrogene, ou appliquez le Luminol directement."
19
+ },
20
+ {
21
+ "name": "Interpreter le resultat",
22
+ "text": "Observez les changements de couleur ou la lueur bleue dans l'obscurite pour classer la reaction."
23
+ }
24
+ ];
25
+
26
+ const faq = [
27
+ {
28
+ "key": "faq-1",
29
+ "question": "Pourquoi parle-t-on de test presomptif?",
30
+ "answer": "Les tests presomptifs sont des analyses preliminaires basees sur l'activite catalytique. Tres sensibles mais peu specifiques, ils peuvent generer des faux positifs et exigent une confirmation."
31
+ },
32
+ {
33
+ "key": "faq-2",
34
+ "question": "Qu'est-ce qui cause un faux positif avec Kastle-Meyer?",
35
+ "answer": "Le test repose sur l'activite pseudo-peroxydasique de l'heme. Toute substance contenant des oxydants, des ions metalliques comme la rouille, ou des peroxydases vegetales peut catalyser la reaction."
36
+ },
37
+ {
38
+ "key": "faq-3",
39
+ "question": "Comment se produit la reaction du Luminol?",
40
+ "answer": "Le luminol reagit avec le peroxyde d'hydrogene en presence d'un catalyseur comme le fer de l'hemoglobine. Cela excite le luminol, qui emet une lumiere bleue en revenant a son etat fondamental."
41
+ },
42
+ {
43
+ "key": "faq-4",
44
+ "question": "L'eau de Javel peut-elle donner un faux positif?",
45
+ "answer": "Oui, l'hypochlorite de sodium est un oxydant puissant. Il oxyde directement la phenolphtaline ou le luminol sans catalyseur, avec une lueur qui s'estompe tres rapidement."
46
+ },
47
+ {
48
+ "key": "faq-5",
49
+ "question": "Quelle est la difference entre test presomptif et confirmatif?",
50
+ "answer": "Les tests presomptifs sont rapides et sensibles pour localiser les taches. Les tests confirmatifs prouvent la presence de sang humain avec certitude."
51
+ }
52
+ ];
53
+
54
+ const bibliography = [
55
+ {
56
+ "name": "Kastle-Meyer test - Wikipedia",
57
+ "url": "https://en.wikipedia.org/wiki/Kastle%E2%80%93Meyer_test"
58
+ },
59
+ {
60
+ "name": "Grodsky, M., Wright, K. & Kirk, P. L. (1951). Simplified preliminary blood testing. An improved technique and comparative study of methods. Journal of Criminal Law and Criminology.",
61
+ "url": "https://scholarlycommons.law.northwestern.edu/jclc/vol42/iss1/10/"
62
+ }
63
+ ];
64
+
65
+ export const content: ToolLocaleContent = {
66
+ slug,
67
+ title,
68
+ description,
69
+ ui: {
70
+ "title": "Simulateur de Test de Sang",
71
+ "desc": "Realisez des experiences virtuelles avec le Luminol et Kastle-Meyer pour detecter le sang et analyser les faux positifs.",
72
+ "configTitle": "Controles du Laboratoire",
73
+ "sampleLabel": "Selectionner l'Echantillon",
74
+ "reagentLabel": "Selectionner le Reactif",
75
+ "lightsLabel": "Eclairage",
76
+ "btnLightsOff": "Eteindre les Lumieres",
77
+ "btnLightsOn": "Allumer les Lumieres",
78
+ "btnReset": "Reinitialiser",
79
+ "resultsTitle": "Resultats du Test",
80
+ "sampleBlood": "Echantillon de Sang (Controle)",
81
+ "sampleRust": "Rouille (Oxyde de Fer)",
82
+ "sampleBleach": "Eau de Javel (Hypochlorite)",
83
+ "samplePotato": "Pomme de Terre (Peroxydase)",
84
+ "sampleSaliva": "Echantillon de Salive",
85
+ "reagentKM": "Reactif Kastle-Meyer",
86
+ "reagentH2O2": "Peroxyde d'Hydrogene (H2O2)",
87
+ "reagentLuminol": "Solution de Luminol",
88
+ "resultTruePositive": "Vrai Positif (Sang Detecte)",
89
+ "resultFalsePositive": "Faux Positif (Catalyseur Non-Sanguin)",
90
+ "resultNegative": "Reaction Negative",
91
+ "statusLabel": "Statut de la Reaction",
92
+ "reactionLabel": "Explication de la Reaction",
93
+ "dropReagentBtn": "Appliquer la Gotte",
94
+ "activeCompounds": "Composes Actifs",
95
+ "reactionSpeed": "Vitesse de Reaction",
96
+ "reactionDuration": "Duree de la Reaction",
97
+ "specimenBase": "Base de l'Echantillon",
98
+ "kmPending": "Reactif Kastle-Meyer applique. Ajoutez du peroxyde d'hydrogene (H2O2) pour catalyser le changement de couleur.",
99
+ "h2o2Only": "Peroxyde d'hydrogene applique. Aucune reaction visible sans indicateur Kastle-Meyer.",
100
+ "noReaction": "Aucune reaction observee. L'echantillon reste limpide.",
101
+ "luminolBlood": "Lueur bleue intense observee immediatement dans l'obscurite. L'heme a oxyde le luminol de facon catalytique. Vrai Positif.",
102
+ "luminolBleach": "Lueur bleue tres intense observee immediatement, s'estompant en moins de 2 secondes. L'hypochlorite oxyde le luminol directement. Faux Positif.",
103
+ "luminolRust": "Lueur bleue faible observee. Les ions metalliques de la rouille catalysent faiblement l'oxydation. S'estompe progressivement. Faux Positif.",
104
+ "luminolPotato": "Aucune luminescence visible. Les peroxidasas vegetales ne catalysent pas l'oxydation du luminol dans ces conditions. Negatif.",
105
+ "luminolNegative": "Aucune luminescence observee dans l'obscurite. Le compose n'est pas catalytique pour l'oxydation du luminol. Negatif.",
106
+ "kmBlood": "Coloration rose vif immediate lors de l'ajout de peroxyde d'hydrogene. L'heme a catalyse l'oxydation de la phenolphtaline en phenolphtaleine. Vrai Positif.",
107
+ "kmBleach": "Changement de couleur rose vif immediat. L'hypochlorite de sodium oxyde directement la phenolphtaline sans catalyseur. Faux Positif.",
108
+ "kmRust": "Coloration brownish-rose lente et faible apparaissant apres plusieurs secondes. La rouille catalyse la reaction lentement. Faux Positif.",
109
+ "kmPotato": "Coloration rose pale tardive apres un delai. Les peroxydases vegetales catalysent faiblement la reaction. Faux Positif.",
110
+ "kmNegative": "Aucun changement de couleur. La solution reste incolore. Negatif."
111
+ },
112
+ seo: [
113
+ {
114
+ "type": "title",
115
+ "text": "Guide Complet sur les Tests Presomptifs de Sang",
116
+ "level": 2
117
+ },
118
+ {
119
+ "type": "paragraph",
120
+ "html": "Les tests presomptifs de sang sont des analyses preliminaires tres sensibles utilisees sur les scenes de crime pour detecter la presence de sang. Avant d'effectuer des analyses complexes de sequençage d'ADN, les enqueteurs se fient a ces tests rapides sur les vetements, les armes ou d'autres surfaces suspectes. Comme ces analyses ciblent l'activite de type peroxydase de l'heme, qui est le groupe contenant le fer de l'hemoglobine, elles sont qualifiees de presomptives. Un resultat positif suggere la presence de sang mais doit imperativement etre valide par un test de confirmation secondaire pour exclure toute autre reaction biochimique similaire."
121
+ },
122
+ {
123
+ "type": "title",
124
+ "text": "Principe et Fonctionnement du Test de Kastle-Meyer",
125
+ "level": 3
126
+ },
127
+ {
128
+ "type": "paragraph",
129
+ "html": "Le test de Kastle-Meyer (KM) est une reaction colorimetrique catalytique qui utilise la forme reduite et incolore de la phenolphtaleine, appelee la phenolphtaline. Le protocole experimental suit une sequence precise: on depose d'abord l'indicateur chimique sur le prelevement. En presence de sang, le groupe heme agit comme un catalyseur organique. Lors de l'ajout de peroxyde d'hydrogene, l'heme accelere la reduction du peroxyde d'hydrogene, ce qui oxyde immediatement la phenolphtaline en phenolphtaleine, provoquant un virage colore rose vif instantane. Un changement de couleur tardif ou lent apres une quinzaine de secondes est considere comme negatif."
130
+ },
131
+ {
132
+ "type": "title",
133
+ "text": "Luminol et la Chimiluminescence Forensique",
134
+ "level": 3
135
+ },
136
+ {
137
+ "type": "paragraph",
138
+ "html": "Le luminol est un compose chimique qui emet une lueur bleue dans l'obscurite lorsqu'il est oxyde en presence d'un catalyseur metallique comme le fer de l'hemoglobine. Les techniciens de la police scientifique vaporisent une solution diluee de luminol sur de grandes zones suspectes. Lorsque le produit entre en contact avec des traces de sang, le fer contenu dans l'hemoglobine catalyse la reaction d'oxydation avec l'agent comburant. Cette reaction genere un ion aminophthalate excite qui libere de l'energie lumineuse en revenant a son etat fondamental. Pour photographier cette emission lumineuse de faible intensite, l'obscurite totale est requise."
139
+ },
140
+ {
141
+ "type": "table",
142
+ "headers": [
143
+ "Substance",
144
+ "Profil Kastle-Meyer",
145
+ "Profil Luminol",
146
+ "Classification"
147
+ ],
148
+ "rows": [
149
+ [
150
+ "Sang humain",
151
+ "Coloration rose vif immediate apres ajout de H2O2.",
152
+ "Lueur bleue intense et stable.",
153
+ "Vrai Positif."
154
+ ],
155
+ [
156
+ "Eau de Javel",
157
+ "Rose immediat avant meme l'ajout de H2O2.",
158
+ "Lueur intense et tres courte.",
159
+ "Faux Positif."
160
+ ],
161
+ [
162
+ "Rouille",
163
+ "Coloration brune lente et legere.",
164
+ "Lueur bleue faible.",
165
+ "Faux Positif."
166
+ ],
167
+ [
168
+ "Pomme de terre",
169
+ "Rose pale tardif apres delai.",
170
+ "Aucune lueur dans le noir.",
171
+ "Faux Positif (KM) / Negatif (LUM)."
172
+ ]
173
+ ]
174
+ },
175
+ {
176
+ "type": "title",
177
+ "text": "Distinguer le Sang des Faux Positifs Courants",
178
+ "level": 3
179
+ },
180
+ {
181
+ "type": "paragraph",
182
+ "html": "La differenciation des faux positifs constitue une partie cruciale du travail d'analyse criminelle. Les agents nettoyants contenant de l'hypochlorite de sodium (eau de Javel) imitent la reaction du sang en oxydant directement les indicateurs. Cependant, les experts scientifiques analysent la dynamique temporelle: l'eau de Javel reagit sans peroxyde d'hydrogene dans le test de Kastle-Meyer et son emission lumineuse avec le luminol s'estompe presque instantanement. De plus, les peroxydases vegetales sont degradees par la chaleur, contrairement a l'hemoglobine qui demeure stable."
183
+ }
184
+ ],
185
+ faq,
186
+ bibliography,
187
+ howTo,
188
+ schemas: [
189
+ {
190
+ '@context': 'https://schema.org',
191
+ '@type': 'SoftwareApplication',
192
+ name: title,
193
+ description,
194
+ applicationCategory: 'ForensicApplication',
195
+ operatingSystem: 'Any'
196
+ },
197
+ {
198
+ '@context': 'https://schema.org',
199
+ '@type': 'FAQPage',
200
+ mainEntity: faq.map((item) => ({
201
+ '@type': 'Question',
202
+ name: item.question,
203
+ acceptedAnswer: {
204
+ '@type': 'Answer',
205
+ text: item.answer
206
+ }
207
+ }))
208
+ },
209
+ {
210
+ '@context': 'https://schema.org',
211
+ '@type': 'HowTo',
212
+ name: title,
213
+ step: howTo.map((step) => ({
214
+ '@type': 'HowToStep',
215
+ name: step.name,
216
+ text: step.text
217
+ }))
218
+ }
219
+ ]
220
+ };
@@ -0,0 +1,220 @@
1
+ import type { ToolLocaleContent } from '../../../types';
2
+
3
+ const slug = 'simulator-uji-dugaan-darah-forensik';
4
+ const title = 'Simulator Uji Dugaan Darah Forensik';
5
+ const description = 'Simulasikan uji dugaan darah menggunakan reagen Kastle-Meyer dan Luminol. Bedakan darah asli dari hasil positif palsu.';
6
+
7
+ const howTo = [
8
+ {
9
+ "name": "Pilih Sampel",
10
+ "text": "Pilih sampel dari rak untuk diuji, bisa berupa darah atau bahan positif palsu."
11
+ },
12
+ {
13
+ "name": "Pilih Metode Uji",
14
+ "text": "Tentukan untuk menggunakan tes warna Kastle-Meyer atau tes pendaran Luminol."
15
+ },
16
+ {
17
+ "name": "Terapkan Reagen",
18
+ "text": "Tambahkan tetesan reagen Kastle-Meyer diikuti Hidrogen Peroksida, atau langsung gunakan Luminol."
19
+ },
20
+ {
21
+ "name": "Tafsirkan Reaksi",
22
+ "text": "Amati perubahan warna atau pendaran biru dalam gelap untuk mengklasifikasikan reaksi."
23
+ }
24
+ ];
25
+
26
+ const faq = [
27
+ {
28
+ "key": "faq-1",
29
+ "question": "Mengapa disebut uji dugaan?",
30
+ "answer": "Uji dugaan adalah skrining awal berdasarkan aktivitas katalitik. Tes ini sangat sensitif tetapi kurang spesifik, sehingga memerlukan uji konfirmasi lanjutan."
31
+ },
32
+ {
33
+ "key": "faq-2",
34
+ "question": "Apa penyebab positif palsu pada tes Kastle-Meyer?",
35
+ "answer": "Tes ini bergantung pada aktivitas heme. Zat pengoksidasi, ion logam (seperti besi pada karat), atau peroksidase tumbuhan dapat mengkatalisis reaksi."
36
+ },
37
+ {
38
+ "key": "faq-3",
39
+ "question": "Bagaimana reaksi Luminol terjadi?",
40
+ "answer": "Luminol bereaksi dengan hidrogen peroksida dengan bantuan katalis besi dari hemoglobin. Reaksi ini memancarkan cahaya biru saat kembali ke keadaan dasar."
41
+ },
42
+ {
43
+ "key": "faq-4",
44
+ "question": "Apakah pemutih pakaian memicu positif palsu?",
45
+ "answer": "Ya, natrium hipoklorit adalah oksidator kuat yang langsung mengoksidasi fenolftalin atau luminol tanpa bantuan katalis."
46
+ },
47
+ {
48
+ "key": "faq-5",
49
+ "question": "Apa beda uji dugaan dengan uji konfirmasi?",
50
+ "answer": "Uji dugaan cepat dan sensitif untuk melokalisasi bercak. Uji konfirmasi membuktikan keberadaan darah manusia secara pasti."
51
+ }
52
+ ];
53
+
54
+ const bibliography = [
55
+ {
56
+ "name": "Kastle-Meyer test - Wikipedia",
57
+ "url": "https://en.wikipedia.org/wiki/Kastle%E2%80%93Meyer_test"
58
+ },
59
+ {
60
+ "name": "Grodsky, M., Wright, K. & Kirk, P. L. (1951). Simplified preliminary blood testing. An improved technique and comparative study of methods. Journal of Criminal Law and Criminology.",
61
+ "url": "https://scholarlycommons.law.northwestern.edu/jclc/vol42/iss1/10/"
62
+ }
63
+ ];
64
+
65
+ export const content: ToolLocaleContent = {
66
+ slug,
67
+ title,
68
+ description,
69
+ ui: {
70
+ "title": "Simulator Uji Darah",
71
+ "desc": "Lakukan eksperimen laboratorium virtual dengan reagen Luminol dan Kastle-Meyer untuk mendeteksi darah.",
72
+ "configTitle": "Kontrol Laboratorium",
73
+ "sampleLabel": "Pilih Sampel Spesimen",
74
+ "reagentLabel": "Pilih Reagen",
75
+ "lightsLabel": "Pencahayaan",
76
+ "btnLightsOff": "Matikan Lampu",
77
+ "btnLightsOn": "Nyalakan Lampu",
78
+ "btnReset": "Atur Ulang Wadah",
79
+ "resultsTitle": "Hasil Uji Dugaan",
80
+ "sampleBlood": "Sampel Darah (Kontrol)",
81
+ "sampleRust": "Karat (Besi Oksida)",
82
+ "sampleBleach": "Pemutih (Natrium Hipoklorit)",
83
+ "samplePotato": "Kentang (Peroksidase Tumbuhan)",
84
+ "sampleSaliva": "Sampel Air Liur",
85
+ "reagentKM": "Reagen Kastle-Meyer",
86
+ "reagentH2O2": "Hidrogen Peroksida (H2O2)",
87
+ "reagentLuminol": "Larutan Luminol",
88
+ "resultTruePositive": "Positif Benar (Darah Terdeteksi)",
89
+ "resultFalsePositive": "Positif Palsu (Katalis Non-Darah)",
90
+ "resultNegative": "Reaksi Negatif",
91
+ "statusLabel": "Status Reaksi",
92
+ "reactionLabel": "Penjelasan Reaksi",
93
+ "dropReagentBtn": "Teteskan",
94
+ "activeCompounds": "Senyawa Aktif",
95
+ "reactionSpeed": "Kecepatan Reaksi",
96
+ "reactionDuration": "Durasi Reaksi",
97
+ "specimenBase": "Basis Spesimen",
98
+ "kmPending": "Reagen Kastle-Meyer ditambahkan. Tambahkan Hidrogen Peroksida (H2O2) untuk mengkatalisis perubahan warna.",
99
+ "h2o2Only": "Hidrogen Peroksida ditambahkan. Tidak ada reaksi visual tanpa indikator Kastle-Meyer.",
100
+ "noReaction": "Tidak ada reaksi yang diamati. Sampel tetap bening.",
101
+ "luminolBlood": "Pendaran biru intens segera terlihat dalam gelap. Gugus heme dalam hemoglobin mengoksidasi luminol. Positif Benar.",
102
+ "luminolBleach": "Pendaran biru sangat intens segera terlihat dan memudar dalam waktu kurang dari 2 detik. Pemutih langsung mengoksidasi luminol. Positif Palsu.",
103
+ "luminolRust": "Pendaran biru redup terlihat. Ion logam pada karat mengkatalisis oksidasi dengan lemah. Positif Palsu.",
104
+ "luminolPotato": "Tidak ada pendaran. Peroksidase kentang tidak memiliki struktur katalitis untuk luminol. Negatif.",
105
+ "luminolNegative": "Tidak ada pendaran terlihat dalam gelap. Senyawa tidak mengkatalisis oksidasi luminol. Negatif.",
106
+ "kmBlood": "Warna merah muda cerah langsung terlihat setelah Hidrogen Peroksida ditambahkan. Heme dalam darah mengoksidasi fenolftalin menjadi fenolftalein. Positif Benar.",
107
+ "kmBleach": "Perubahan warna merah muda langsung terjadi. Natrium hipoklorit langsung mengoksidasi fenolftalin tanpa hidrogen peroksida. Positif Palsu.",
108
+ "kmRust": "Warna kecokelatan-merah muda yang lambat muncul setelah beberapa detik. Karat mengkatalisis reaksi dengan lambat. Positif Palsu.",
109
+ "kmPotato": "Warna merah muda pudar yang lambat muncul setelah jeda waktu. Peroksidase kentang mengkatalisis reaksi dengan lemah. Positif Palsu.",
110
+ "kmNegative": "Tidak ada perubahan warna. Larutan tetap bening. Negatif."
111
+ },
112
+ seo: [
113
+ {
114
+ "type": "title",
115
+ "text": "Panduan Lengkap Uji Dugaan Darah Forensik",
116
+ "level": 2
117
+ },
118
+ {
119
+ "type": "paragraph",
120
+ "html": "Uji dugaan darah merupakan metode skrining awal yang sangat sensitif yang digunakan oleh penyelidik di tempat kejadian perkara untuk mendeteksi keberadaan bercak darah. Sebelum melakukan analisis lanjutan seperti pengurutan DNA, tim forensik mengandalkan pengujian cepat ini pada pakaian, senjata tajam, dan permukaan keras lainnya. Karena pengujian ini menargetkan aktivitas katalitis dari heme yang mengandung zat besi dalam hemoglobin, sifatnya diklasifikasikan sebagai dugaan. Hasil positif menunjukkan potensi kuat adanya darah, tetapi penyelidikan lanjutan dengan uji konfirmasi tetap wajib dilakukan guna memastikan keabsahan biologis sampel tersebut."
121
+ },
122
+ {
123
+ "type": "title",
124
+ "text": "Prinsip Kerja Uji Kastle-Meyer",
125
+ "level": 3
126
+ },
127
+ {
128
+ "type": "paragraph",
129
+ "html": "Uji warna Kastle-Meyer (KM) didasarkan pada reaksi oksidasi fenolftalin yang tidak berwarna menjadi fenolftalein yang berwarna merah muda. Tahapan uji ini harus dilakukan secara teratur: pertama, larutan fenolftalin ditambahkan pada sampel spesimen. Jika terdapat darah, gugus heme dari hemoglobin akan bertindak sebagai katalis organik. Saat hidrogen peroksida diteteskan berikutnya, heme mempercepat pemecahan peroksida dan mengoksidasi fenolftalin menjadi fenolftalein secara instan, menghasilkan warna merah muda cerah. Perubahan warna yang lambat setelah lewat dari lima belas detik biasanya dianggap sebagai reaksi negatif."
130
+ },
131
+ {
132
+ "type": "title",
133
+ "text": "Luminol dan Pendaran Kimia Forensik",
134
+ "level": 3
135
+ },
136
+ {
137
+ "type": "paragraph",
138
+ "html": "Luminol adalah senyawa kimia yang menghasilkan pendaran cahaya biru khas di tempat gelap saat teroksidasi oleh hidrogen peroksida dengan bantuan katalis logam. Tim identifikasi menyemprotkan larutan luminol pada area luas di tempat kejadian perkara. Jika menyentuh sisa darah, kandungan besi dalam heme hemoglobin mengkatalisis reaksi kimia tersebut. Reaksi ini membentuk ion aminofitalat yang berada dalam tingkat energi tereksitasi dan memancarkan cahaya biru saat kembali ke tingkat energi dasar. Karena intensitas cahaya pendaran ini lemah, ruangan harus benar-benar gelap agar pendaran dapat terdokumentasi."
139
+ },
140
+ {
141
+ "type": "table",
142
+ "headers": [
143
+ "Sampel Uji",
144
+ "Reaksi Kastle-Meyer",
145
+ "Reaksi Luminol",
146
+ "Klasifikasi Uji"
147
+ ],
148
+ "rows": [
149
+ [
150
+ "Darah Manusia",
151
+ "Perubahan warna merah muda cerah seketika setelah H2O2.",
152
+ "Pendaran biru intens dan stabil.",
153
+ "Positif Benar."
154
+ ],
155
+ [
156
+ "Pemutih Pakaian",
157
+ "Warna merah muda muncul sebelum H2O2 ditambahkan.",
158
+ "Pendaran sangat kuat namun cepat padam.",
159
+ "Positif Palsu."
160
+ ],
161
+ [
162
+ "Besi Oksida (Karat)",
163
+ "Warna merah muda kecokelatan yang lambat.",
164
+ "Pendaran biru redup dan tidak merata.",
165
+ "Positif Palsu."
166
+ ],
167
+ [
168
+ "Kentang (Peroksidase)",
169
+ "Warna merah muda pudar yang muncul lambat.",
170
+ "Tidak memancarkan pendaran cahaya.",
171
+ "Positif Palsu (KM) / Negatif (LUM)."
172
+ ]
173
+ ]
174
+ },
175
+ {
176
+ "type": "title",
177
+ "text": "Membedakan Darah Asli dari Positif Palsu",
178
+ "level": 3
179
+ },
180
+ {
181
+ "type": "paragraph",
182
+ "html": "Kemampuan membedakan darah dari reaksi positif palsu merupakan bagian sangat krusial dalam analisis bukti forensik. Larutan pembersih yang mengandung natrium hipoklorit (pemutih) mengoksidasi reagen secara langsung tanpa perlu katalis tambahan. Penyelidik membedakan reaksi ini melalui dinamika waktu reaksi: pemutih memicu warna merah muda pada uji Kastle-Meyer tanpa penambahan peroksida dan pendaran luminolnya hilang sangat cepat. Sementara itu, enzim peroksidase dari tumbuhan dapat dinonaktifkan oleh suhu panas, berbeda dengan hemoglobin darah yang tahan terhadap panas."
183
+ }
184
+ ],
185
+ faq,
186
+ bibliography,
187
+ howTo,
188
+ schemas: [
189
+ {
190
+ '@context': 'https://schema.org',
191
+ '@type': 'SoftwareApplication',
192
+ name: title,
193
+ description,
194
+ applicationCategory: 'ForensicApplication',
195
+ operatingSystem: 'Any'
196
+ },
197
+ {
198
+ '@context': 'https://schema.org',
199
+ '@type': 'FAQPage',
200
+ mainEntity: faq.map((item) => ({
201
+ '@type': 'Question',
202
+ name: item.question,
203
+ acceptedAnswer: {
204
+ '@type': 'Answer',
205
+ text: item.answer
206
+ }
207
+ }))
208
+ },
209
+ {
210
+ '@context': 'https://schema.org',
211
+ '@type': 'HowTo',
212
+ name: title,
213
+ step: howTo.map((step) => ({
214
+ '@type': 'HowToStep',
215
+ name: step.name,
216
+ text: step.text
217
+ }))
218
+ }
219
+ ]
220
+ };
@@ -0,0 +1,220 @@
1
+ import type { ToolLocaleContent } from '../../../types';
2
+
3
+ const slug = 'simulatore-test-presuntivo-sangue-forense';
4
+ const title = 'Simulatore di Test Presuntivo del Sangue Forense';
5
+ const description = 'Simula i test presuntivi del sangue usando i reagenti Kastle-Meyer e Luminol. Distingui il sangue reale dai falsi positivi.';
6
+
7
+ const howTo = [
8
+ {
9
+ "name": "Seleziona un campione",
10
+ "text": "Scegli un campione dal portaprovette per il test, che può essere sangue o un falso positivo."
11
+ },
12
+ {
13
+ "name": "Scegli il metodo",
14
+ "text": "Decidi se eseguire il test colorimetrico di Kastle-Meyer o il test di luminescenza al Luminol."
15
+ },
16
+ {
17
+ "name": "Applica i reagenti",
18
+ "text": "Aggiungi gocce di reagente Kastle-Meyer seguite da perossido di idrogeno, o applica direttamente il Luminol."
19
+ },
20
+ {
21
+ "name": "Interpreta la reazione",
22
+ "text": "Osserva le variazioni di colore o il bagliore blu al buio per classificare la reazione."
23
+ }
24
+ ];
25
+
26
+ const faq = [
27
+ {
28
+ "key": "faq-1",
29
+ "question": "Perché si chiama test presuntivo?",
30
+ "answer": "I test presuntivi sono analisi preliminari basate sull'attività catalitica. Altamente sensibili ma non specifici, richiedono successive conferme di laboratorio."
31
+ },
32
+ {
33
+ "key": "faq-2",
34
+ "question": "Cosa causa un falso positivo con Kastle-Meyer?",
35
+ "answer": "Il test si basa sull'attività simil-perossidasica dell'eme. Ossidanti chimici, ioni metallici o perossidasi vegetali possono catalizzare la reazione."
36
+ },
37
+ {
38
+ "key": "faq-3",
39
+ "question": "Come avviene la reazione del Luminol?",
40
+ "answer": "Il luminol reagisce con il perossido di idrogeno in presenza del ferro dell'emoglobina. Questo eccita il luminol, che emette luce blu tornando allo stato fondamentale."
41
+ },
42
+ {
43
+ "key": "faq-4",
44
+ "question": "La candeggina può causare un falso positivo?",
45
+ "answer": "Sì, l'ipoclorito di sodio è un forte ossidante. Ossida direttamente la fenolftalina o il luminol senza catalizzatore, svanendo rapidamente."
46
+ },
47
+ {
48
+ "key": "faq-5",
49
+ "question": "Qual è la differenza tra test presuntivo e di conferma?",
50
+ "answer": "I test presuntivi sono rapidi ed economici per localizzare le macchie. I test di conferma provano con certezza la presenza di sangue umano."
51
+ }
52
+ ];
53
+
54
+ const bibliography = [
55
+ {
56
+ "name": "Kastle-Meyer test - Wikipedia",
57
+ "url": "https://en.wikipedia.org/wiki/Kastle%E2%80%93Meyer_test"
58
+ },
59
+ {
60
+ "name": "Grodsky, M., Wright, K. & Kirk, P. L. (1951). Simplified preliminary blood testing. An improved technique and comparative study of methods. Journal of Criminal Law and Criminology.",
61
+ "url": "https://scholarlycommons.law.northwestern.edu/jclc/vol42/iss1/10/"
62
+ }
63
+ ];
64
+
65
+ export const content: ToolLocaleContent = {
66
+ slug,
67
+ title,
68
+ description,
69
+ ui: {
70
+ "title": "Simulatore di Test del Sangue",
71
+ "desc": "Esegui esperimenti virtuali con Luminol e Kastle-Meyer per rilevare il sangue e analizzare i falsi positivi.",
72
+ "configTitle": "Controlli del Laboratorio",
73
+ "sampleLabel": "Seleziona Campione",
74
+ "reagentLabel": "Seleziona Reagente",
75
+ "lightsLabel": "Illuminazione",
76
+ "btnLightsOff": "Spegni Luci",
77
+ "btnLightsOn": "Accendi Luci",
78
+ "btnReset": "Reimposta Piastra",
79
+ "resultsTitle": "Risultati del Test",
80
+ "sampleBlood": "Campione di Sangue (Controllo)",
81
+ "sampleRust": "Ruggine (Ossido di Ferro)",
82
+ "sampleBleach": "Candeggina (Ipoclorito di Sodio)",
83
+ "samplePotato": "Patata (Perossidasi Vegetale)",
84
+ "sampleSaliva": "Campione di Saliva",
85
+ "reagentKM": "Reagente Kastle-Meyer",
86
+ "reagentH2O2": "Perossido di Idrogeno (H2O2)",
87
+ "reagentLuminol": "Soluzione di Luminol",
88
+ "resultTruePositive": "Vero Positivo (Sangue Rilevato)",
89
+ "resultFalsePositive": "Falso Positivo (Catalizzatore Non Sanguigno)",
90
+ "resultNegative": "Reazione Negativa",
91
+ "statusLabel": "Stato della Reazione",
92
+ "reactionLabel": "Descrizione della Reazione",
93
+ "dropReagentBtn": "Applica Goccia",
94
+ "activeCompounds": "Composti Attivi",
95
+ "reactionSpeed": "Velocità di Reazione",
96
+ "reactionDuration": "Durata della Reazione",
97
+ "specimenBase": "Base del Campione",
98
+ "kmPending": "Reagente Kastle-Meyer applicato. Aggiungi Perossido di Idrogeno (H2O2) per catalizzare il cambio di colore.",
99
+ "h2o2Only": "Perossido di idrogeno applicato. Nessuna reazione visibile senza l'indicatore Kastle-Meyer.",
100
+ "noReaction": "Nessuna reazione osservata. Il campione rimane limpido.",
101
+ "luminolBlood": "Bagliore blu intenso osservato immediatamente al buio. Il gruppo eme dell'emoglobina ha ossidato cataliticamente il luminol. Vero Positivo.",
102
+ "luminolBleach": "Bagliore blu molto intenso osservato immediatamente, svanito in meno di 2 secondi. L'ipoclorito ossida direttamente il luminol. Falso Positivo.",
103
+ "luminolRust": "Bagliore blu debole osservato. Gli ioni metallici della ruggine catalizzano debolmente l'ossidazione. Falso Positivo.",
104
+ "luminolPotato": "Nessuna luminescenza. Le perossidasi della patata non catalizzano l'ossidazione del luminol in queste condizioni. Negativo.",
105
+ "luminolNegative": "Nessuna luminescenza al buio. Il composto non è catalitico per l'ossidazione del luminol. Negativo.",
106
+ "kmBlood": "Colorazione rosa intenso immediata con l'aggiunta di perossido di idrogeno. L'eme ha ossidato la fenolftalina in fenolftaleina. Vero Positivo.",
107
+ "kmBleach": "Cambio di colore rosa immediato. L'ipoclorito di sodio ossida direttamente la fenolftalina senza perossido. Falso Positivo.",
108
+ "kmRust": "Colorazione rosa-marrone lenta e debole dopo diversi secondi. La ruggine catalizza la reazione molto lentamente. Falso Positivo.",
109
+ "kmPotato": "Colorazione rosa tenue dopo un ritardo. Le perossidasi vegetali catalizzano debolmente la reazione. Falso Positivo.",
110
+ "kmNegative": "Nessun cambio di colore. La soluzione rimane incolore. Negativo."
111
+ },
112
+ seo: [
113
+ {
114
+ "type": "title",
115
+ "text": "Guia Completa ai Test Presuntivi del Sangue",
116
+ "level": 2
117
+ },
118
+ {
119
+ "type": "paragraph",
120
+ "html": "I test presuntivi del sangue sono indagini preliminari ad alta sensibilità impiegate sulle scene del crimine e nei laboratori forensi per rilevare tracce biologiche latenti. Prima di destinare risorse economiche e temporali al sequenziamento del DNA o a test di conferma più specifici, gli investigatori utilizzano questi screening rapidi per analizzare indumenti, armi o superfici sospette. Poiché queste analisi sfruttano l'attività simil-perossidasica dell'eme, il gruppo contenente ferro presente nell'emoglobina, esse sono considerate presuntive. Un esito positivo suggerisce fortemente la presenza di sangue, ma deve essere convalidato da test secondari di conferma per escludere la presenza di analoghi catalizzatori chimici."
121
+ },
122
+ {
123
+ "type": "title",
124
+ "text": "Funzionamento della Reazione di Kastle-Meyer",
125
+ "level": 3
126
+ },
127
+ {
128
+ "type": "paragraph",
129
+ "html": "Il test colorimetrico di Kastle-Meyer si basa sull'ossidazione catalitica della fenolftalina, la forma ridotta e incolore della fenolftaleina. La sequenza della reazione chimica deve essere eseguita in modo rigoroso: dapprima si applica il reagente fenolftalina sulla traccia da analizzare. In presenza di sangue, il gruppo eme funge da catalizzatore biologico. Successivamente, quando viene introdotto il perossido di idrogeno, l'eme catalizza la riduzione del perossido, ossidando istantaneamente la fenolftalina in fenolftaleina e producendo un colore rosa acceso molto intenso. Un cambio di colore tardivo che appare dopo diversi secondi viene considerato negativo."
130
+ },
131
+ {
132
+ "type": "title",
133
+ "text": "Luminol e la Chemiluminescenza Forense",
134
+ "level": 3
135
+ },
136
+ {
137
+ "type": "paragraph",
138
+ "html": "Il luminol è un composto chimico che mostra una caratteristica luce blu-azzurra nel buio quando viene ossidato da un agente comburente in presenza di un catalizzatore metallico. I tecnici della polizia scientifica spruzzano una soluzione diluita di luminol su ampie superfici. Quando la soluzione entra in contatto con tracce di sangue, il ferro dell'emoglobina catalizza la reazione di ossidazione. La reazione chimica risultante genera un ion amminoftalato in uno stato energetico eccitato, che emette fotoni tornando allo stato fondamentale. Data la debole emissione di luce, è necessario lavorare in condizioni di buio completo per fotografare il bagliore."
139
+ },
140
+ {
141
+ "type": "table",
142
+ "headers": [
143
+ "Sostanza Analizzata",
144
+ "Profilo Kastle-Meyer",
145
+ "Profilo Luminol",
146
+ "Classificazione Diagnostica"
147
+ ],
148
+ "rows": [
149
+ [
150
+ "Sangue Umano Controllo",
151
+ "Colorazione rosa brillante immediata dopo H2O2.",
152
+ "Bagliore blu intenso e duraturo fino a 8s.",
153
+ "Vero Positivo. L'eme fornisce la necessaria attività catalitica."
154
+ ],
155
+ [
156
+ "Candeggina Domestica",
157
+ "Colorazione rosa prima dell'aggiunta di H2O2.",
158
+ "Bagliore forte ma che svanisce in 2s.",
159
+ "Falso Positivo. L'ossidante forte reagisce senza catalizzatore."
160
+ ],
161
+ [
162
+ "Ossido di Ferro (Ruggine)",
163
+ "Rosa-marrone lento e di bassa intensità.",
164
+ "Bagliore bluastro molto debole.",
165
+ "Falso Positivo. Gli ioni ferro catalizzano a bassa efficienza."
166
+ ],
167
+ [
168
+ "Patata (Perossidasi)",
169
+ "Rosa tenue e tardivo dopo ritardo.",
170
+ "Nessuna luminescenza rilevabile.",
171
+ "Falso Positivo (KM) / Negativo (LUM)."
172
+ ]
173
+ ]
174
+ },
175
+ {
176
+ "type": "title",
177
+ "text": "Distinguere il Sangue dai Falsi Positivi",
178
+ "level": 3
179
+ },
180
+ {
181
+ "type": "paragraph",
182
+ "html": "La distinzione tra tracce ematiche e falsi positivi è un elemento essenziale per la validità delle prove scientifiche in tribunale. I detergenti contenenti ipoclorito di sodio (candeggina) sono forti ossidanti che reagiscono direttamente con i reagenti. Gli esperti forensi li identificano studiando la velocità di reazione: la candeggina produce il colore rosa senza bisogno di perossido nel test KM, e la sua luminescenza decade all'istante. Inoltre, le perossidasi vegetali vengono disattivate dal calore, a differenza dell'emoglobina che rimane stabile alle alte temperature."
183
+ }
184
+ ],
185
+ faq,
186
+ bibliography,
187
+ howTo,
188
+ schemas: [
189
+ {
190
+ '@context': 'https://schema.org',
191
+ '@type': 'SoftwareApplication',
192
+ name: title,
193
+ description,
194
+ applicationCategory: 'ForensicApplication',
195
+ operatingSystem: 'Any'
196
+ },
197
+ {
198
+ '@context': 'https://schema.org',
199
+ '@type': 'FAQPage',
200
+ mainEntity: faq.map((item) => ({
201
+ '@type': 'Question',
202
+ name: item.question,
203
+ acceptedAnswer: {
204
+ '@type': 'Answer',
205
+ text: item.answer
206
+ }
207
+ }))
208
+ },
209
+ {
210
+ '@context': 'https://schema.org',
211
+ '@type': 'HowTo',
212
+ name: title,
213
+ step: howTo.map((step) => ({
214
+ '@type': 'HowToStep',
215
+ name: step.name,
216
+ text: step.text
217
+ }))
218
+ }
219
+ ]
220
+ };