scientific-writer 2.2.1__py3-none-any.whl → 2.2.3__py3-none-any.whl

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.

Potentially problematic release.


This version of scientific-writer might be problematic. Click here for more details.

Files changed (311) hide show
  1. scientific_writer/.claude/WRITER.md +748 -0
  2. scientific_writer/.claude/settings.local.json +30 -0
  3. scientific_writer/.claude/skills/citation-management/SKILL.md +1046 -0
  4. scientific_writer/.claude/skills/citation-management/assets/bibtex_template.bib +264 -0
  5. scientific_writer/.claude/skills/citation-management/assets/citation_checklist.md +386 -0
  6. scientific_writer/.claude/skills/citation-management/references/bibtex_formatting.md +908 -0
  7. scientific_writer/.claude/skills/citation-management/references/citation_validation.md +794 -0
  8. scientific_writer/.claude/skills/citation-management/references/google_scholar_search.md +725 -0
  9. scientific_writer/.claude/skills/citation-management/references/metadata_extraction.md +870 -0
  10. scientific_writer/.claude/skills/citation-management/references/pubmed_search.md +839 -0
  11. scientific_writer/.claude/skills/citation-management/scripts/doi_to_bibtex.py +204 -0
  12. scientific_writer/.claude/skills/citation-management/scripts/extract_metadata.py +569 -0
  13. scientific_writer/.claude/skills/citation-management/scripts/format_bibtex.py +349 -0
  14. scientific_writer/.claude/skills/citation-management/scripts/search_google_scholar.py +282 -0
  15. scientific_writer/.claude/skills/citation-management/scripts/search_pubmed.py +398 -0
  16. scientific_writer/.claude/skills/citation-management/scripts/validate_citations.py +497 -0
  17. scientific_writer/.claude/skills/clinical-reports/IMPLEMENTATION_SUMMARY.md +641 -0
  18. scientific_writer/.claude/skills/clinical-reports/README.md +236 -0
  19. scientific_writer/.claude/skills/clinical-reports/SKILL.md +1088 -0
  20. scientific_writer/.claude/skills/clinical-reports/assets/case_report_template.md +352 -0
  21. scientific_writer/.claude/skills/clinical-reports/assets/clinical_trial_csr_template.md +353 -0
  22. scientific_writer/.claude/skills/clinical-reports/assets/clinical_trial_sae_template.md +359 -0
  23. scientific_writer/.claude/skills/clinical-reports/assets/consult_note_template.md +305 -0
  24. scientific_writer/.claude/skills/clinical-reports/assets/discharge_summary_template.md +453 -0
  25. scientific_writer/.claude/skills/clinical-reports/assets/hipaa_compliance_checklist.md +395 -0
  26. scientific_writer/.claude/skills/clinical-reports/assets/history_physical_template.md +305 -0
  27. scientific_writer/.claude/skills/clinical-reports/assets/lab_report_template.md +309 -0
  28. scientific_writer/.claude/skills/clinical-reports/assets/pathology_report_template.md +249 -0
  29. scientific_writer/.claude/skills/clinical-reports/assets/quality_checklist.md +338 -0
  30. scientific_writer/.claude/skills/clinical-reports/assets/radiology_report_template.md +318 -0
  31. scientific_writer/.claude/skills/clinical-reports/assets/soap_note_template.md +253 -0
  32. scientific_writer/.claude/skills/clinical-reports/references/case_report_guidelines.md +570 -0
  33. scientific_writer/.claude/skills/clinical-reports/references/clinical_trial_reporting.md +693 -0
  34. scientific_writer/.claude/skills/clinical-reports/references/data_presentation.md +530 -0
  35. scientific_writer/.claude/skills/clinical-reports/references/diagnostic_reports_standards.md +629 -0
  36. scientific_writer/.claude/skills/clinical-reports/references/medical_terminology.md +588 -0
  37. scientific_writer/.claude/skills/clinical-reports/references/patient_documentation.md +744 -0
  38. scientific_writer/.claude/skills/clinical-reports/references/peer_review_standards.md +585 -0
  39. scientific_writer/.claude/skills/clinical-reports/references/regulatory_compliance.md +577 -0
  40. scientific_writer/.claude/skills/clinical-reports/scripts/check_deidentification.py +346 -0
  41. scientific_writer/.claude/skills/clinical-reports/scripts/compliance_checker.py +78 -0
  42. scientific_writer/.claude/skills/clinical-reports/scripts/extract_clinical_data.py +102 -0
  43. scientific_writer/.claude/skills/clinical-reports/scripts/format_adverse_events.py +103 -0
  44. scientific_writer/.claude/skills/clinical-reports/scripts/generate_report_template.py +163 -0
  45. scientific_writer/.claude/skills/clinical-reports/scripts/terminology_validator.py +133 -0
  46. scientific_writer/.claude/skills/clinical-reports/scripts/validate_case_report.py +334 -0
  47. scientific_writer/.claude/skills/clinical-reports/scripts/validate_trial_report.py +89 -0
  48. scientific_writer/.claude/skills/document-skills/docx/LICENSE.txt +30 -0
  49. scientific_writer/.claude/skills/document-skills/docx/SKILL.md +197 -0
  50. scientific_writer/.claude/skills/document-skills/docx/docx-js.md +350 -0
  51. scientific_writer/.claude/skills/document-skills/docx/ooxml/schemas/ISO-IEC29500-4_2016/dml-chart.xsd +1499 -0
  52. scientific_writer/.claude/skills/document-skills/docx/ooxml/schemas/ISO-IEC29500-4_2016/dml-chartDrawing.xsd +146 -0
  53. scientific_writer/.claude/skills/document-skills/docx/ooxml/schemas/ISO-IEC29500-4_2016/dml-diagram.xsd +1085 -0
  54. scientific_writer/.claude/skills/document-skills/docx/ooxml/schemas/ISO-IEC29500-4_2016/dml-lockedCanvas.xsd +11 -0
  55. scientific_writer/.claude/skills/document-skills/docx/ooxml/schemas/ISO-IEC29500-4_2016/dml-main.xsd +3081 -0
  56. scientific_writer/.claude/skills/document-skills/docx/ooxml/schemas/ISO-IEC29500-4_2016/dml-picture.xsd +23 -0
  57. scientific_writer/.claude/skills/document-skills/docx/ooxml/schemas/ISO-IEC29500-4_2016/dml-spreadsheetDrawing.xsd +185 -0
  58. scientific_writer/.claude/skills/document-skills/docx/ooxml/schemas/ISO-IEC29500-4_2016/dml-wordprocessingDrawing.xsd +287 -0
  59. scientific_writer/.claude/skills/document-skills/docx/ooxml/schemas/ISO-IEC29500-4_2016/pml.xsd +1676 -0
  60. scientific_writer/.claude/skills/document-skills/docx/ooxml/schemas/ISO-IEC29500-4_2016/shared-additionalCharacteristics.xsd +28 -0
  61. scientific_writer/.claude/skills/document-skills/docx/ooxml/schemas/ISO-IEC29500-4_2016/shared-bibliography.xsd +144 -0
  62. scientific_writer/.claude/skills/document-skills/docx/ooxml/schemas/ISO-IEC29500-4_2016/shared-commonSimpleTypes.xsd +174 -0
  63. scientific_writer/.claude/skills/document-skills/docx/ooxml/schemas/ISO-IEC29500-4_2016/shared-customXmlDataProperties.xsd +25 -0
  64. scientific_writer/.claude/skills/document-skills/docx/ooxml/schemas/ISO-IEC29500-4_2016/shared-customXmlSchemaProperties.xsd +18 -0
  65. scientific_writer/.claude/skills/document-skills/docx/ooxml/schemas/ISO-IEC29500-4_2016/shared-documentPropertiesCustom.xsd +59 -0
  66. scientific_writer/.claude/skills/document-skills/docx/ooxml/schemas/ISO-IEC29500-4_2016/shared-documentPropertiesExtended.xsd +56 -0
  67. scientific_writer/.claude/skills/document-skills/docx/ooxml/schemas/ISO-IEC29500-4_2016/shared-documentPropertiesVariantTypes.xsd +195 -0
  68. scientific_writer/.claude/skills/document-skills/docx/ooxml/schemas/ISO-IEC29500-4_2016/shared-math.xsd +582 -0
  69. scientific_writer/.claude/skills/document-skills/docx/ooxml/schemas/ISO-IEC29500-4_2016/shared-relationshipReference.xsd +25 -0
  70. scientific_writer/.claude/skills/document-skills/docx/ooxml/schemas/ISO-IEC29500-4_2016/sml.xsd +4439 -0
  71. scientific_writer/.claude/skills/document-skills/docx/ooxml/schemas/ISO-IEC29500-4_2016/vml-main.xsd +570 -0
  72. scientific_writer/.claude/skills/document-skills/docx/ooxml/schemas/ISO-IEC29500-4_2016/vml-officeDrawing.xsd +509 -0
  73. scientific_writer/.claude/skills/document-skills/docx/ooxml/schemas/ISO-IEC29500-4_2016/vml-presentationDrawing.xsd +12 -0
  74. scientific_writer/.claude/skills/document-skills/docx/ooxml/schemas/ISO-IEC29500-4_2016/vml-spreadsheetDrawing.xsd +108 -0
  75. scientific_writer/.claude/skills/document-skills/docx/ooxml/schemas/ISO-IEC29500-4_2016/vml-wordprocessingDrawing.xsd +96 -0
  76. scientific_writer/.claude/skills/document-skills/docx/ooxml/schemas/ISO-IEC29500-4_2016/wml.xsd +3646 -0
  77. scientific_writer/.claude/skills/document-skills/docx/ooxml/schemas/ISO-IEC29500-4_2016/xml.xsd +116 -0
  78. scientific_writer/.claude/skills/document-skills/docx/ooxml/schemas/ecma/fouth-edition/opc-contentTypes.xsd +42 -0
  79. scientific_writer/.claude/skills/document-skills/docx/ooxml/schemas/ecma/fouth-edition/opc-coreProperties.xsd +50 -0
  80. scientific_writer/.claude/skills/document-skills/docx/ooxml/schemas/ecma/fouth-edition/opc-digSig.xsd +49 -0
  81. scientific_writer/.claude/skills/document-skills/docx/ooxml/schemas/ecma/fouth-edition/opc-relationships.xsd +33 -0
  82. scientific_writer/.claude/skills/document-skills/docx/ooxml/schemas/mce/mc.xsd +75 -0
  83. scientific_writer/.claude/skills/document-skills/docx/ooxml/schemas/microsoft/wml-2010.xsd +560 -0
  84. scientific_writer/.claude/skills/document-skills/docx/ooxml/schemas/microsoft/wml-2012.xsd +67 -0
  85. scientific_writer/.claude/skills/document-skills/docx/ooxml/schemas/microsoft/wml-2018.xsd +14 -0
  86. scientific_writer/.claude/skills/document-skills/docx/ooxml/schemas/microsoft/wml-cex-2018.xsd +20 -0
  87. scientific_writer/.claude/skills/document-skills/docx/ooxml/schemas/microsoft/wml-cid-2016.xsd +13 -0
  88. scientific_writer/.claude/skills/document-skills/docx/ooxml/schemas/microsoft/wml-sdtdatahash-2020.xsd +4 -0
  89. scientific_writer/.claude/skills/document-skills/docx/ooxml/schemas/microsoft/wml-symex-2015.xsd +8 -0
  90. scientific_writer/.claude/skills/document-skills/docx/ooxml/scripts/pack.py +159 -0
  91. scientific_writer/.claude/skills/document-skills/docx/ooxml/scripts/unpack.py +29 -0
  92. scientific_writer/.claude/skills/document-skills/docx/ooxml/scripts/validate.py +69 -0
  93. scientific_writer/.claude/skills/document-skills/docx/ooxml/scripts/validation/__init__.py +15 -0
  94. scientific_writer/.claude/skills/document-skills/docx/ooxml/scripts/validation/base.py +951 -0
  95. scientific_writer/.claude/skills/document-skills/docx/ooxml/scripts/validation/docx.py +274 -0
  96. scientific_writer/.claude/skills/document-skills/docx/ooxml/scripts/validation/pptx.py +315 -0
  97. scientific_writer/.claude/skills/document-skills/docx/ooxml/scripts/validation/redlining.py +279 -0
  98. scientific_writer/.claude/skills/document-skills/docx/ooxml.md +610 -0
  99. scientific_writer/.claude/skills/document-skills/docx/scripts/__init__.py +1 -0
  100. scientific_writer/.claude/skills/document-skills/docx/scripts/document.py +1276 -0
  101. scientific_writer/.claude/skills/document-skills/docx/scripts/templates/comments.xml +3 -0
  102. scientific_writer/.claude/skills/document-skills/docx/scripts/templates/commentsExtended.xml +3 -0
  103. scientific_writer/.claude/skills/document-skills/docx/scripts/templates/commentsExtensible.xml +3 -0
  104. scientific_writer/.claude/skills/document-skills/docx/scripts/templates/commentsIds.xml +3 -0
  105. scientific_writer/.claude/skills/document-skills/docx/scripts/templates/people.xml +3 -0
  106. scientific_writer/.claude/skills/document-skills/docx/scripts/utilities.py +374 -0
  107. scientific_writer/.claude/skills/document-skills/pdf/LICENSE.txt +30 -0
  108. scientific_writer/.claude/skills/document-skills/pdf/SKILL.md +294 -0
  109. scientific_writer/.claude/skills/document-skills/pdf/forms.md +205 -0
  110. scientific_writer/.claude/skills/document-skills/pdf/reference.md +612 -0
  111. scientific_writer/.claude/skills/document-skills/pdf/scripts/check_bounding_boxes.py +70 -0
  112. scientific_writer/.claude/skills/document-skills/pdf/scripts/check_bounding_boxes_test.py +226 -0
  113. scientific_writer/.claude/skills/document-skills/pdf/scripts/check_fillable_fields.py +12 -0
  114. scientific_writer/.claude/skills/document-skills/pdf/scripts/convert_pdf_to_images.py +35 -0
  115. scientific_writer/.claude/skills/document-skills/pdf/scripts/create_validation_image.py +41 -0
  116. scientific_writer/.claude/skills/document-skills/pdf/scripts/extract_form_field_info.py +152 -0
  117. scientific_writer/.claude/skills/document-skills/pdf/scripts/fill_fillable_fields.py +114 -0
  118. scientific_writer/.claude/skills/document-skills/pdf/scripts/fill_pdf_form_with_annotations.py +108 -0
  119. scientific_writer/.claude/skills/document-skills/pptx/LICENSE.txt +30 -0
  120. scientific_writer/.claude/skills/document-skills/pptx/SKILL.md +484 -0
  121. scientific_writer/.claude/skills/document-skills/pptx/html2pptx.md +625 -0
  122. scientific_writer/.claude/skills/document-skills/pptx/ooxml/schemas/ISO-IEC29500-4_2016/dml-chart.xsd +1499 -0
  123. scientific_writer/.claude/skills/document-skills/pptx/ooxml/schemas/ISO-IEC29500-4_2016/dml-chartDrawing.xsd +146 -0
  124. scientific_writer/.claude/skills/document-skills/pptx/ooxml/schemas/ISO-IEC29500-4_2016/dml-diagram.xsd +1085 -0
  125. scientific_writer/.claude/skills/document-skills/pptx/ooxml/schemas/ISO-IEC29500-4_2016/dml-lockedCanvas.xsd +11 -0
  126. scientific_writer/.claude/skills/document-skills/pptx/ooxml/schemas/ISO-IEC29500-4_2016/dml-main.xsd +3081 -0
  127. scientific_writer/.claude/skills/document-skills/pptx/ooxml/schemas/ISO-IEC29500-4_2016/dml-picture.xsd +23 -0
  128. scientific_writer/.claude/skills/document-skills/pptx/ooxml/schemas/ISO-IEC29500-4_2016/dml-spreadsheetDrawing.xsd +185 -0
  129. scientific_writer/.claude/skills/document-skills/pptx/ooxml/schemas/ISO-IEC29500-4_2016/dml-wordprocessingDrawing.xsd +287 -0
  130. scientific_writer/.claude/skills/document-skills/pptx/ooxml/schemas/ISO-IEC29500-4_2016/pml.xsd +1676 -0
  131. scientific_writer/.claude/skills/document-skills/pptx/ooxml/schemas/ISO-IEC29500-4_2016/shared-additionalCharacteristics.xsd +28 -0
  132. scientific_writer/.claude/skills/document-skills/pptx/ooxml/schemas/ISO-IEC29500-4_2016/shared-bibliography.xsd +144 -0
  133. scientific_writer/.claude/skills/document-skills/pptx/ooxml/schemas/ISO-IEC29500-4_2016/shared-commonSimpleTypes.xsd +174 -0
  134. scientific_writer/.claude/skills/document-skills/pptx/ooxml/schemas/ISO-IEC29500-4_2016/shared-customXmlDataProperties.xsd +25 -0
  135. scientific_writer/.claude/skills/document-skills/pptx/ooxml/schemas/ISO-IEC29500-4_2016/shared-customXmlSchemaProperties.xsd +18 -0
  136. scientific_writer/.claude/skills/document-skills/pptx/ooxml/schemas/ISO-IEC29500-4_2016/shared-documentPropertiesCustom.xsd +59 -0
  137. scientific_writer/.claude/skills/document-skills/pptx/ooxml/schemas/ISO-IEC29500-4_2016/shared-documentPropertiesExtended.xsd +56 -0
  138. scientific_writer/.claude/skills/document-skills/pptx/ooxml/schemas/ISO-IEC29500-4_2016/shared-documentPropertiesVariantTypes.xsd +195 -0
  139. scientific_writer/.claude/skills/document-skills/pptx/ooxml/schemas/ISO-IEC29500-4_2016/shared-math.xsd +582 -0
  140. scientific_writer/.claude/skills/document-skills/pptx/ooxml/schemas/ISO-IEC29500-4_2016/shared-relationshipReference.xsd +25 -0
  141. scientific_writer/.claude/skills/document-skills/pptx/ooxml/schemas/ISO-IEC29500-4_2016/sml.xsd +4439 -0
  142. scientific_writer/.claude/skills/document-skills/pptx/ooxml/schemas/ISO-IEC29500-4_2016/vml-main.xsd +570 -0
  143. scientific_writer/.claude/skills/document-skills/pptx/ooxml/schemas/ISO-IEC29500-4_2016/vml-officeDrawing.xsd +509 -0
  144. scientific_writer/.claude/skills/document-skills/pptx/ooxml/schemas/ISO-IEC29500-4_2016/vml-presentationDrawing.xsd +12 -0
  145. scientific_writer/.claude/skills/document-skills/pptx/ooxml/schemas/ISO-IEC29500-4_2016/vml-spreadsheetDrawing.xsd +108 -0
  146. scientific_writer/.claude/skills/document-skills/pptx/ooxml/schemas/ISO-IEC29500-4_2016/vml-wordprocessingDrawing.xsd +96 -0
  147. scientific_writer/.claude/skills/document-skills/pptx/ooxml/schemas/ISO-IEC29500-4_2016/wml.xsd +3646 -0
  148. scientific_writer/.claude/skills/document-skills/pptx/ooxml/schemas/ISO-IEC29500-4_2016/xml.xsd +116 -0
  149. scientific_writer/.claude/skills/document-skills/pptx/ooxml/schemas/ecma/fouth-edition/opc-contentTypes.xsd +42 -0
  150. scientific_writer/.claude/skills/document-skills/pptx/ooxml/schemas/ecma/fouth-edition/opc-coreProperties.xsd +50 -0
  151. scientific_writer/.claude/skills/document-skills/pptx/ooxml/schemas/ecma/fouth-edition/opc-digSig.xsd +49 -0
  152. scientific_writer/.claude/skills/document-skills/pptx/ooxml/schemas/ecma/fouth-edition/opc-relationships.xsd +33 -0
  153. scientific_writer/.claude/skills/document-skills/pptx/ooxml/schemas/mce/mc.xsd +75 -0
  154. scientific_writer/.claude/skills/document-skills/pptx/ooxml/schemas/microsoft/wml-2010.xsd +560 -0
  155. scientific_writer/.claude/skills/document-skills/pptx/ooxml/schemas/microsoft/wml-2012.xsd +67 -0
  156. scientific_writer/.claude/skills/document-skills/pptx/ooxml/schemas/microsoft/wml-2018.xsd +14 -0
  157. scientific_writer/.claude/skills/document-skills/pptx/ooxml/schemas/microsoft/wml-cex-2018.xsd +20 -0
  158. scientific_writer/.claude/skills/document-skills/pptx/ooxml/schemas/microsoft/wml-cid-2016.xsd +13 -0
  159. scientific_writer/.claude/skills/document-skills/pptx/ooxml/schemas/microsoft/wml-sdtdatahash-2020.xsd +4 -0
  160. scientific_writer/.claude/skills/document-skills/pptx/ooxml/schemas/microsoft/wml-symex-2015.xsd +8 -0
  161. scientific_writer/.claude/skills/document-skills/pptx/ooxml/scripts/pack.py +159 -0
  162. scientific_writer/.claude/skills/document-skills/pptx/ooxml/scripts/unpack.py +29 -0
  163. scientific_writer/.claude/skills/document-skills/pptx/ooxml/scripts/validate.py +69 -0
  164. scientific_writer/.claude/skills/document-skills/pptx/ooxml/scripts/validation/__init__.py +15 -0
  165. scientific_writer/.claude/skills/document-skills/pptx/ooxml/scripts/validation/base.py +951 -0
  166. scientific_writer/.claude/skills/document-skills/pptx/ooxml/scripts/validation/docx.py +274 -0
  167. scientific_writer/.claude/skills/document-skills/pptx/ooxml/scripts/validation/pptx.py +315 -0
  168. scientific_writer/.claude/skills/document-skills/pptx/ooxml/scripts/validation/redlining.py +279 -0
  169. scientific_writer/.claude/skills/document-skills/pptx/ooxml.md +427 -0
  170. scientific_writer/.claude/skills/document-skills/pptx/scripts/html2pptx.js +979 -0
  171. scientific_writer/.claude/skills/document-skills/pptx/scripts/inventory.py +1020 -0
  172. scientific_writer/.claude/skills/document-skills/pptx/scripts/rearrange.py +231 -0
  173. scientific_writer/.claude/skills/document-skills/pptx/scripts/replace.py +385 -0
  174. scientific_writer/.claude/skills/document-skills/pptx/scripts/thumbnail.py +450 -0
  175. scientific_writer/.claude/skills/document-skills/xlsx/LICENSE.txt +30 -0
  176. scientific_writer/.claude/skills/document-skills/xlsx/SKILL.md +289 -0
  177. scientific_writer/.claude/skills/document-skills/xlsx/recalc.py +178 -0
  178. scientific_writer/.claude/skills/hypothesis-generation/SKILL.md +155 -0
  179. scientific_writer/.claude/skills/hypothesis-generation/assets/hypothesis_output_template.md +302 -0
  180. scientific_writer/.claude/skills/hypothesis-generation/references/experimental_design_patterns.md +327 -0
  181. scientific_writer/.claude/skills/hypothesis-generation/references/hypothesis_quality_criteria.md +196 -0
  182. scientific_writer/.claude/skills/hypothesis-generation/references/literature_search_strategies.md +505 -0
  183. scientific_writer/.claude/skills/latex-posters/README.md +417 -0
  184. scientific_writer/.claude/skills/latex-posters/SKILL.md +919 -0
  185. scientific_writer/.claude/skills/latex-posters/assets/baposter_template.tex +257 -0
  186. scientific_writer/.claude/skills/latex-posters/assets/beamerposter_template.tex +244 -0
  187. scientific_writer/.claude/skills/latex-posters/assets/poster_quality_checklist.md +358 -0
  188. scientific_writer/.claude/skills/latex-posters/assets/tikzposter_template.tex +251 -0
  189. scientific_writer/.claude/skills/latex-posters/references/latex_poster_packages.md +745 -0
  190. scientific_writer/.claude/skills/latex-posters/references/poster_content_guide.md +748 -0
  191. scientific_writer/.claude/skills/latex-posters/references/poster_design_principles.md +806 -0
  192. scientific_writer/.claude/skills/latex-posters/references/poster_layout_design.md +900 -0
  193. scientific_writer/.claude/skills/latex-posters/scripts/review_poster.sh +214 -0
  194. scientific_writer/.claude/skills/literature-review/SKILL.md +546 -0
  195. scientific_writer/.claude/skills/literature-review/assets/review_template.md +412 -0
  196. scientific_writer/.claude/skills/literature-review/references/citation_styles.md +166 -0
  197. scientific_writer/.claude/skills/literature-review/references/database_strategies.md +381 -0
  198. scientific_writer/.claude/skills/literature-review/scripts/generate_pdf.py +176 -0
  199. scientific_writer/.claude/skills/literature-review/scripts/search_databases.py +303 -0
  200. scientific_writer/.claude/skills/literature-review/scripts/verify_citations.py +222 -0
  201. scientific_writer/.claude/skills/markitdown/INSTALLATION_GUIDE.md +318 -0
  202. scientific_writer/.claude/skills/markitdown/LICENSE.txt +22 -0
  203. scientific_writer/.claude/skills/markitdown/OPENROUTER_INTEGRATION.md +359 -0
  204. scientific_writer/.claude/skills/markitdown/QUICK_REFERENCE.md +309 -0
  205. scientific_writer/.claude/skills/markitdown/README.md +184 -0
  206. scientific_writer/.claude/skills/markitdown/SKILL.md +450 -0
  207. scientific_writer/.claude/skills/markitdown/SKILL_SUMMARY.md +307 -0
  208. scientific_writer/.claude/skills/markitdown/assets/example_usage.md +463 -0
  209. scientific_writer/.claude/skills/markitdown/references/api_reference.md +399 -0
  210. scientific_writer/.claude/skills/markitdown/references/file_formats.md +542 -0
  211. scientific_writer/.claude/skills/markitdown/scripts/batch_convert.py +228 -0
  212. scientific_writer/.claude/skills/markitdown/scripts/convert_literature.py +283 -0
  213. scientific_writer/.claude/skills/markitdown/scripts/convert_with_ai.py +243 -0
  214. scientific_writer/.claude/skills/paper-2-web/SKILL.md +455 -0
  215. scientific_writer/.claude/skills/paper-2-web/references/installation.md +141 -0
  216. scientific_writer/.claude/skills/paper-2-web/references/paper2poster.md +346 -0
  217. scientific_writer/.claude/skills/paper-2-web/references/paper2video.md +305 -0
  218. scientific_writer/.claude/skills/paper-2-web/references/paper2web.md +187 -0
  219. scientific_writer/.claude/skills/paper-2-web/references/usage_examples.md +436 -0
  220. scientific_writer/.claude/skills/peer-review/SKILL.md +375 -0
  221. scientific_writer/.claude/skills/peer-review/references/common_issues.md +552 -0
  222. scientific_writer/.claude/skills/peer-review/references/reporting_standards.md +290 -0
  223. scientific_writer/.claude/skills/research-grants/README.md +285 -0
  224. scientific_writer/.claude/skills/research-grants/SKILL.md +896 -0
  225. scientific_writer/.claude/skills/research-grants/assets/budget_justification_template.md +453 -0
  226. scientific_writer/.claude/skills/research-grants/assets/nih_specific_aims_template.md +166 -0
  227. scientific_writer/.claude/skills/research-grants/assets/nsf_project_summary_template.md +92 -0
  228. scientific_writer/.claude/skills/research-grants/references/broader_impacts.md +392 -0
  229. scientific_writer/.claude/skills/research-grants/references/darpa_guidelines.md +636 -0
  230. scientific_writer/.claude/skills/research-grants/references/doe_guidelines.md +586 -0
  231. scientific_writer/.claude/skills/research-grants/references/nih_guidelines.md +851 -0
  232. scientific_writer/.claude/skills/research-grants/references/nsf_guidelines.md +570 -0
  233. scientific_writer/.claude/skills/research-grants/references/specific_aims_guide.md +458 -0
  234. scientific_writer/.claude/skills/research-lookup/README.md +116 -0
  235. scientific_writer/.claude/skills/research-lookup/SKILL.md +443 -0
  236. scientific_writer/.claude/skills/research-lookup/examples.py +174 -0
  237. scientific_writer/.claude/skills/research-lookup/lookup.py +93 -0
  238. scientific_writer/.claude/skills/research-lookup/research_lookup.py +335 -0
  239. scientific_writer/.claude/skills/research-lookup/scripts/research_lookup.py +261 -0
  240. scientific_writer/.claude/skills/scholar-evaluation/SKILL.md +254 -0
  241. scientific_writer/.claude/skills/scholar-evaluation/references/evaluation_framework.md +663 -0
  242. scientific_writer/.claude/skills/scholar-evaluation/scripts/calculate_scores.py +378 -0
  243. scientific_writer/.claude/skills/scientific-critical-thinking/SKILL.md +530 -0
  244. scientific_writer/.claude/skills/scientific-critical-thinking/references/common_biases.md +364 -0
  245. scientific_writer/.claude/skills/scientific-critical-thinking/references/evidence_hierarchy.md +484 -0
  246. scientific_writer/.claude/skills/scientific-critical-thinking/references/experimental_design.md +496 -0
  247. scientific_writer/.claude/skills/scientific-critical-thinking/references/logical_fallacies.md +478 -0
  248. scientific_writer/.claude/skills/scientific-critical-thinking/references/scientific_method.md +169 -0
  249. scientific_writer/.claude/skills/scientific-critical-thinking/references/statistical_pitfalls.md +506 -0
  250. scientific_writer/.claude/skills/scientific-schematics/SKILL.md +2035 -0
  251. scientific_writer/.claude/skills/scientific-schematics/assets/block_diagram_template.tex +199 -0
  252. scientific_writer/.claude/skills/scientific-schematics/assets/circuit_template.tex +159 -0
  253. scientific_writer/.claude/skills/scientific-schematics/assets/flowchart_template.tex +161 -0
  254. scientific_writer/.claude/skills/scientific-schematics/assets/pathway_template.tex +162 -0
  255. scientific_writer/.claude/skills/scientific-schematics/assets/tikz_styles.tex +422 -0
  256. scientific_writer/.claude/skills/scientific-schematics/references/best_practices.md +562 -0
  257. scientific_writer/.claude/skills/scientific-schematics/references/diagram_types.md +637 -0
  258. scientific_writer/.claude/skills/scientific-schematics/references/python_libraries.md +791 -0
  259. scientific_writer/.claude/skills/scientific-schematics/references/tikz_guide.md +734 -0
  260. scientific_writer/.claude/skills/scientific-schematics/scripts/circuit_generator.py +307 -0
  261. scientific_writer/.claude/skills/scientific-schematics/scripts/compile_tikz.py +292 -0
  262. scientific_writer/.claude/skills/scientific-schematics/scripts/generate_flowchart.py +281 -0
  263. scientific_writer/.claude/skills/scientific-schematics/scripts/pathway_diagram.py +406 -0
  264. scientific_writer/.claude/skills/scientific-writing/SKILL.md +443 -0
  265. scientific_writer/.claude/skills/scientific-writing/references/citation_styles.md +720 -0
  266. scientific_writer/.claude/skills/scientific-writing/references/figures_tables.md +806 -0
  267. scientific_writer/.claude/skills/scientific-writing/references/imrad_structure.md +658 -0
  268. scientific_writer/.claude/skills/scientific-writing/references/reporting_guidelines.md +748 -0
  269. scientific_writer/.claude/skills/scientific-writing/references/writing_principles.md +824 -0
  270. scientific_writer/.claude/skills/treatment-plans/README.md +483 -0
  271. scientific_writer/.claude/skills/treatment-plans/SKILL.md +817 -0
  272. scientific_writer/.claude/skills/treatment-plans/assets/chronic_disease_management_plan.tex +636 -0
  273. scientific_writer/.claude/skills/treatment-plans/assets/general_medical_treatment_plan.tex +616 -0
  274. scientific_writer/.claude/skills/treatment-plans/assets/mental_health_treatment_plan.tex +745 -0
  275. scientific_writer/.claude/skills/treatment-plans/assets/pain_management_plan.tex +770 -0
  276. scientific_writer/.claude/skills/treatment-plans/assets/perioperative_care_plan.tex +724 -0
  277. scientific_writer/.claude/skills/treatment-plans/assets/quality_checklist.md +471 -0
  278. scientific_writer/.claude/skills/treatment-plans/assets/rehabilitation_treatment_plan.tex +727 -0
  279. scientific_writer/.claude/skills/treatment-plans/references/goal_setting_frameworks.md +411 -0
  280. scientific_writer/.claude/skills/treatment-plans/references/intervention_guidelines.md +507 -0
  281. scientific_writer/.claude/skills/treatment-plans/references/regulatory_compliance.md +476 -0
  282. scientific_writer/.claude/skills/treatment-plans/references/specialty_specific_guidelines.md +607 -0
  283. scientific_writer/.claude/skills/treatment-plans/references/treatment_plan_standards.md +456 -0
  284. scientific_writer/.claude/skills/treatment-plans/scripts/check_completeness.py +318 -0
  285. scientific_writer/.claude/skills/treatment-plans/scripts/generate_template.py +244 -0
  286. scientific_writer/.claude/skills/treatment-plans/scripts/timeline_generator.py +369 -0
  287. scientific_writer/.claude/skills/treatment-plans/scripts/validate_treatment_plan.py +367 -0
  288. scientific_writer/.claude/skills/venue-templates/SKILL.md +590 -0
  289. scientific_writer/.claude/skills/venue-templates/assets/grants/nih_specific_aims.tex +235 -0
  290. scientific_writer/.claude/skills/venue-templates/assets/grants/nsf_proposal_template.tex +375 -0
  291. scientific_writer/.claude/skills/venue-templates/assets/journals/nature_article.tex +171 -0
  292. scientific_writer/.claude/skills/venue-templates/assets/journals/neurips_article.tex +283 -0
  293. scientific_writer/.claude/skills/venue-templates/assets/journals/plos_one.tex +317 -0
  294. scientific_writer/.claude/skills/venue-templates/assets/posters/beamerposter_academic.tex +311 -0
  295. scientific_writer/.claude/skills/venue-templates/references/conferences_formatting.md +564 -0
  296. scientific_writer/.claude/skills/venue-templates/references/grants_requirements.md +787 -0
  297. scientific_writer/.claude/skills/venue-templates/references/journals_formatting.md +486 -0
  298. scientific_writer/.claude/skills/venue-templates/references/posters_guidelines.md +628 -0
  299. scientific_writer/.claude/skills/venue-templates/scripts/customize_template.py +206 -0
  300. scientific_writer/.claude/skills/venue-templates/scripts/query_template.py +260 -0
  301. scientific_writer/.claude/skills/venue-templates/scripts/validate_format.py +255 -0
  302. scientific_writer/__init__.py +1 -1
  303. scientific_writer/api.py +9 -5
  304. scientific_writer/cli.py +9 -5
  305. scientific_writer/core.py +28 -5
  306. {scientific_writer-2.2.1.dist-info → scientific_writer-2.2.3.dist-info}/METADATA +1 -1
  307. scientific_writer-2.2.3.dist-info/RECORD +312 -0
  308. scientific_writer-2.2.1.dist-info/RECORD +0 -11
  309. {scientific_writer-2.2.1.dist-info → scientific_writer-2.2.3.dist-info}/WHEEL +0 -0
  310. {scientific_writer-2.2.1.dist-info → scientific_writer-2.2.3.dist-info}/entry_points.txt +0 -0
  311. {scientific_writer-2.2.1.dist-info → scientific_writer-2.2.3.dist-info}/licenses/LICENSE +0 -0
@@ -0,0 +1,318 @@
1
+ #!/usr/bin/env python3
2
+ """
3
+ Check Treatment Plan Completeness
4
+ Validates that all required sections are present in a treatment plan.
5
+ """
6
+
7
+ import sys
8
+ import re
9
+ import argparse
10
+ from pathlib import Path
11
+ from typing import List, Tuple
12
+
13
+ # Required sections for all treatment plans
14
+ REQUIRED_SECTIONS = [
15
+ r'\\section\*\{.*Patient Information',
16
+ r'\\section\*\{.*Diagnosis.*Assessment',
17
+ r'\\section\*\{.*Goals',
18
+ r'\\section\*\{.*Interventions',
19
+ r'\\section\*\{.*Timeline.*Schedule',
20
+ r'\\section\*\{.*Monitoring',
21
+ r'\\section\*\{.*Outcomes',
22
+ r'\\section\*\{.*Follow[- ]?up',
23
+ r'\\section\*\{.*Education',
24
+ r'\\section\*\{.*Risk.*Safety',
25
+ ]
26
+
27
+ # Section descriptions for user-friendly output
28
+ SECTION_DESCRIPTIONS = {
29
+ 0: 'Patient Information (de-identified)',
30
+ 1: 'Diagnosis and Assessment',
31
+ 2: 'Treatment Goals (SMART format)',
32
+ 3: 'Interventions (pharmacological, non-pharmacological, procedural)',
33
+ 4: 'Timeline and Schedule',
34
+ 5: 'Monitoring Parameters',
35
+ 6: 'Expected Outcomes',
36
+ 7: 'Follow-up Plan',
37
+ 8: 'Patient Education',
38
+ 9: 'Risk Mitigation and Safety'
39
+ }
40
+
41
+
42
+ def read_file(filepath: Path) -> str:
43
+ """Read and return file contents."""
44
+ try:
45
+ with open(filepath, 'r', encoding='utf-8') as f:
46
+ return f.read()
47
+ except FileNotFoundError:
48
+ print(f"Error: File not found: {filepath}", file=sys.stderr)
49
+ sys.exit(1)
50
+ except Exception as e:
51
+ print(f"Error reading file: {e}", file=sys.stderr)
52
+ sys.exit(1)
53
+
54
+
55
+ def check_sections(content: str) -> Tuple[List[bool], List[str]]:
56
+ """
57
+ Check which required sections are present.
58
+ Returns tuple of (checklist, missing_sections).
59
+ """
60
+ checklist = []
61
+ missing = []
62
+
63
+ for i, pattern in enumerate(REQUIRED_SECTIONS):
64
+ if re.search(pattern, content, re.IGNORECASE):
65
+ checklist.append(True)
66
+ else:
67
+ checklist.append(False)
68
+ missing.append(SECTION_DESCRIPTIONS[i])
69
+
70
+ return checklist, missing
71
+
72
+
73
+ def check_smart_goals(content: str) -> Tuple[bool, List[str]]:
74
+ """
75
+ Check if SMART goal criteria are mentioned.
76
+ Returns (has_smart, missing_criteria).
77
+ """
78
+ smart_criteria = {
79
+ 'Specific': r'\bspecific\b',
80
+ 'Measurable': r'\bmeasurable\b',
81
+ 'Achievable': r'\bachievable\b',
82
+ 'Relevant': r'\brelevant\b',
83
+ 'Time-bound': r'\btime[- ]?bound\b'
84
+ }
85
+
86
+ missing = []
87
+ for criterion, pattern in smart_criteria.items():
88
+ if not re.search(pattern, content, re.IGNORECASE):
89
+ missing.append(criterion)
90
+
91
+ has_smart = len(missing) == 0
92
+ return has_smart, missing
93
+
94
+
95
+ def check_hipaa_notice(content: str) -> bool:
96
+ """Check if HIPAA de-identification notice is present."""
97
+ pattern = r'HIPAA|de-identif|protected health information|PHI'
98
+ return bool(re.search(pattern, content, re.IGNORECASE))
99
+
100
+
101
+ def check_provider_signature(content: str) -> bool:
102
+ """Check if provider signature section is present."""
103
+ pattern = r'\\section\*\{.*Signature|Provider Signature|Signature'
104
+ return bool(re.search(pattern, content, re.IGNORECASE))
105
+
106
+
107
+ def check_placeholders_remaining(content: str) -> Tuple[int, List[str]]:
108
+ """
109
+ Check for uncustomized placeholders [like this].
110
+ Returns (count, sample_placeholders).
111
+ """
112
+ placeholders = re.findall(r'\[([^\]]+)\]', content)
113
+
114
+ # Filter out LaTeX commands and references
115
+ filtered = []
116
+ for p in placeholders:
117
+ # Skip if it's a LaTeX command, number, or citation
118
+ if not (p.startswith('\\') or p.isdigit() or 'cite' in p.lower() or 'ref' in p.lower()):
119
+ filtered.append(p)
120
+
121
+ count = len(filtered)
122
+ samples = filtered[:5] # Return up to 5 examples
123
+
124
+ return count, samples
125
+
126
+
127
+ def display_results(filepath: Path, checklist: List[bool], missing: List[str],
128
+ smart_complete: bool, smart_missing: List[str],
129
+ has_hipaa: bool, has_signature: bool,
130
+ placeholder_count: int, placeholder_samples: List[str]):
131
+ """Display completeness check results."""
132
+
133
+ total_sections = len(REQUIRED_SECTIONS)
134
+ present_count = sum(checklist)
135
+ completeness_pct = (present_count / total_sections) * 100
136
+
137
+ print("\n" + "="*70)
138
+ print("TREATMENT PLAN COMPLETENESS CHECK")
139
+ print("="*70)
140
+ print(f"\nFile: {filepath}")
141
+ print(f"File size: {filepath.stat().st_size:,} bytes")
142
+
143
+ # Overall completeness
144
+ print("\n" + "-"*70)
145
+ print("OVERALL COMPLETENESS")
146
+ print("-"*70)
147
+ print(f"Required sections present: {present_count}/{total_sections} ({completeness_pct:.0f}%)")
148
+
149
+ if completeness_pct == 100:
150
+ print("✓ All required sections present")
151
+ else:
152
+ print(f"✗ {len(missing)} section(s) missing")
153
+
154
+ # Section details
155
+ print("\n" + "-"*70)
156
+ print("SECTION CHECKLIST")
157
+ print("-"*70)
158
+
159
+ for i, (present, desc) in enumerate(zip(checklist, SECTION_DESCRIPTIONS.values())):
160
+ status = "✓" if present else "✗"
161
+ print(f"{status} {desc}")
162
+
163
+ # Missing sections
164
+ if missing:
165
+ print("\n" + "-"*70)
166
+ print("MISSING SECTIONS")
167
+ print("-"*70)
168
+ for section in missing:
169
+ print(f" • {section}")
170
+
171
+ # SMART goals
172
+ print("\n" + "-"*70)
173
+ print("SMART GOALS CHECK")
174
+ print("-"*70)
175
+
176
+ if smart_complete:
177
+ print("✓ All SMART criteria mentioned in document")
178
+ else:
179
+ print(f"✗ {len(smart_missing)} SMART criterion/criteria not found:")
180
+ for criterion in smart_missing:
181
+ print(f" • {criterion}")
182
+ print("\nNote: Goals should be Specific, Measurable, Achievable, Relevant, Time-bound")
183
+
184
+ # HIPAA notice
185
+ print("\n" + "-"*70)
186
+ print("PRIVACY AND COMPLIANCE")
187
+ print("-"*70)
188
+
189
+ if has_hipaa:
190
+ print("✓ HIPAA/de-identification notice present")
191
+ else:
192
+ print("✗ HIPAA de-identification notice not found")
193
+ print(" Recommendation: Include HIPAA Safe Harbor de-identification guidance")
194
+
195
+ if has_signature:
196
+ print("✓ Provider signature section present")
197
+ else:
198
+ print("✗ Provider signature section not found")
199
+
200
+ # Placeholders
201
+ print("\n" + "-"*70)
202
+ print("CUSTOMIZATION STATUS")
203
+ print("-"*70)
204
+
205
+ if placeholder_count == 0:
206
+ print("✓ No uncustomized placeholders detected")
207
+ else:
208
+ print(f"⚠ {placeholder_count} placeholder(s) may need customization")
209
+ print("\nExamples:")
210
+ for sample in placeholder_samples:
211
+ print(f" • [{sample}]")
212
+ print("\nRecommendation: Replace all [bracketed placeholders] with patient-specific information")
213
+
214
+ # Summary
215
+ print("\n" + "="*70)
216
+ print("SUMMARY")
217
+ print("="*70)
218
+
219
+ # Calculate overall score
220
+ score_components = [
221
+ completeness_pct / 100, # Section completeness (0-1)
222
+ 1.0 if smart_complete else 0.6, # SMART goals (full or partial credit)
223
+ 1.0 if has_hipaa else 0.0, # HIPAA notice (binary)
224
+ 1.0 if has_signature else 0.0, # Signature (binary)
225
+ 1.0 if placeholder_count == 0 else 0.5 # Customization (full or partial)
226
+ ]
227
+
228
+ overall_score = (sum(score_components) / len(score_components)) * 100
229
+
230
+ print(f"\nOverall completeness score: {overall_score:.0f}%")
231
+
232
+ if overall_score >= 90:
233
+ print("Status: ✓ EXCELLENT - Treatment plan is comprehensive")
234
+ elif overall_score >= 75:
235
+ print("Status: ✓ GOOD - Minor improvements needed")
236
+ elif overall_score >= 60:
237
+ print("Status: ⚠ FAIR - Several sections need attention")
238
+ else:
239
+ print("Status: ✗ INCOMPLETE - Significant work needed")
240
+
241
+ print("\n" + "="*70)
242
+
243
+ # Return exit code based on completeness
244
+ return 0 if completeness_pct >= 80 else 1
245
+
246
+
247
+ def main():
248
+ parser = argparse.ArgumentParser(
249
+ description='Check treatment plan completeness',
250
+ formatter_class=argparse.RawDescriptionHelpFormatter,
251
+ epilog="""
252
+ Examples:
253
+ # Check a treatment plan file
254
+ python check_completeness.py my_treatment_plan.tex
255
+
256
+ # Check and exit with error code if incomplete (for CI/CD)
257
+ python check_completeness.py plan.tex && echo "Complete"
258
+
259
+ This script checks for:
260
+ - All required sections (10 core sections)
261
+ - SMART goal criteria
262
+ - HIPAA de-identification notice
263
+ - Provider signature section
264
+ - Uncustomized placeholders
265
+
266
+ Exit codes:
267
+ 0 - All required sections present (≥80% complete)
268
+ 1 - Missing required sections (<80% complete)
269
+ 2 - File error or invalid arguments
270
+ """
271
+ )
272
+
273
+ parser.add_argument(
274
+ 'file',
275
+ type=Path,
276
+ help='Treatment plan file to check (.tex format)'
277
+ )
278
+
279
+ parser.add_argument(
280
+ '-v', '--verbose',
281
+ action='store_true',
282
+ help='Show detailed output'
283
+ )
284
+
285
+ args = parser.parse_args()
286
+
287
+ # Check file exists and is .tex
288
+ if not args.file.exists():
289
+ print(f"Error: File not found: {args.file}", file=sys.stderr)
290
+ sys.exit(2)
291
+
292
+ if args.file.suffix.lower() not in ['.tex', '.txt']:
293
+ print(f"Warning: Expected .tex file, got {args.file.suffix}", file=sys.stderr)
294
+
295
+ # Read file
296
+ content = read_file(args.file)
297
+
298
+ # Perform checks
299
+ checklist, missing = check_sections(content)
300
+ smart_complete, smart_missing = check_smart_goals(content)
301
+ has_hipaa = check_hipaa_notice(content)
302
+ has_signature = check_provider_signature(content)
303
+ placeholder_count, placeholder_samples = check_placeholders_remaining(content)
304
+
305
+ # Display results
306
+ exit_code = display_results(
307
+ args.file, checklist, missing,
308
+ smart_complete, smart_missing,
309
+ has_hipaa, has_signature,
310
+ placeholder_count, placeholder_samples
311
+ )
312
+
313
+ sys.exit(exit_code)
314
+
315
+
316
+ if __name__ == '__main__':
317
+ main()
318
+
@@ -0,0 +1,244 @@
1
+ #!/usr/bin/env python3
2
+ """
3
+ Generate Treatment Plan Template
4
+ Interactive script to select and generate treatment plan templates.
5
+ """
6
+
7
+ import os
8
+ import sys
9
+ import shutil
10
+ import argparse
11
+ from pathlib import Path
12
+ from datetime import datetime
13
+
14
+ # Template types and descriptions
15
+ TEMPLATES = {
16
+ 'general_medical': {
17
+ 'name': 'General Medical Treatment Plan',
18
+ 'file': 'general_medical_treatment_plan.tex',
19
+ 'description': 'For primary care and chronic disease management (diabetes, hypertension, etc.)'
20
+ },
21
+ 'rehabilitation': {
22
+ 'name': 'Rehabilitation Treatment Plan',
23
+ 'file': 'rehabilitation_treatment_plan.tex',
24
+ 'description': 'For physical therapy, occupational therapy, and rehabilitation services'
25
+ },
26
+ 'mental_health': {
27
+ 'name': 'Mental Health Treatment Plan',
28
+ 'file': 'mental_health_treatment_plan.tex',
29
+ 'description': 'For psychiatric and behavioral health treatment'
30
+ },
31
+ 'chronic_disease': {
32
+ 'name': 'Chronic Disease Management Plan',
33
+ 'file': 'chronic_disease_management_plan.tex',
34
+ 'description': 'For complex multimorbidity and long-term care coordination'
35
+ },
36
+ 'perioperative': {
37
+ 'name': 'Perioperative Care Plan',
38
+ 'file': 'perioperative_care_plan.tex',
39
+ 'description': 'For surgical and procedural patient management'
40
+ },
41
+ 'pain_management': {
42
+ 'name': 'Pain Management Plan',
43
+ 'file': 'pain_management_plan.tex',
44
+ 'description': 'For acute and chronic pain treatment (multimodal approach)'
45
+ }
46
+ }
47
+
48
+
49
+ def get_templates_dir():
50
+ """Get the path to the templates directory."""
51
+ # Assume script is in .claude/skills/treatment-plans/scripts/
52
+ script_dir = Path(__file__).parent
53
+ templates_dir = script_dir.parent / 'assets'
54
+ return templates_dir
55
+
56
+
57
+ def list_templates():
58
+ """Display available templates."""
59
+ print("\n" + "="*70)
60
+ print("AVAILABLE TREATMENT PLAN TEMPLATES")
61
+ print("="*70)
62
+
63
+ for i, (key, info) in enumerate(TEMPLATES.items(), 1):
64
+ print(f"\n{i}. {info['name']}")
65
+ print(f" Type: {key}")
66
+ print(f" File: {info['file']}")
67
+ print(f" Description: {info['description']}")
68
+
69
+ print("\n" + "="*70)
70
+
71
+
72
+ def interactive_selection():
73
+ """Interactive template selection."""
74
+ list_templates()
75
+
76
+ while True:
77
+ try:
78
+ choice = input("\nSelect template number (1-6) or 'q' to quit: ").strip().lower()
79
+
80
+ if choice == 'q':
81
+ print("Exiting...")
82
+ sys.exit(0)
83
+
84
+ choice_num = int(choice)
85
+
86
+ if 1 <= choice_num <= len(TEMPLATES):
87
+ template_key = list(TEMPLATES.keys())[choice_num - 1]
88
+ return template_key
89
+ else:
90
+ print(f"Please enter a number between 1 and {len(TEMPLATES)}.")
91
+ except ValueError:
92
+ print("Invalid input. Please enter a number or 'q' to quit.")
93
+
94
+
95
+ def get_output_filename(template_key, custom_name=None):
96
+ """Generate output filename."""
97
+ if custom_name:
98
+ # Ensure .tex extension
99
+ if not custom_name.endswith('.tex'):
100
+ custom_name += '.tex'
101
+ return custom_name
102
+
103
+ # Default: template_key_YYYYMMDD.tex
104
+ timestamp = datetime.now().strftime('%Y%m%d')
105
+ return f"{template_key}_plan_{timestamp}.tex"
106
+
107
+
108
+ def copy_template(template_key, output_path):
109
+ """Copy template to output location."""
110
+ templates_dir = get_templates_dir()
111
+ template_file = TEMPLATES[template_key]['file']
112
+ source_path = templates_dir / template_file
113
+
114
+ if not source_path.exists():
115
+ raise FileNotFoundError(f"Template not found: {source_path}")
116
+
117
+ # Create output directory if it doesn't exist
118
+ output_path = Path(output_path)
119
+ output_path.parent.mkdir(parents=True, exist_ok=True)
120
+
121
+ # Copy template
122
+ shutil.copy2(source_path, output_path)
123
+
124
+ return output_path
125
+
126
+
127
+ def display_success(output_path, template_key):
128
+ """Display success message with next steps."""
129
+ template_info = TEMPLATES[template_key]
130
+
131
+ print("\n" + "="*70)
132
+ print("✓ TEMPLATE GENERATED SUCCESSFULLY")
133
+ print("="*70)
134
+ print(f"\nTemplate: {template_info['name']}")
135
+ print(f"Output file: {output_path}")
136
+ print(f"File size: {os.path.getsize(output_path):,} bytes")
137
+
138
+ print("\n" + "-"*70)
139
+ print("NEXT STEPS:")
140
+ print("-"*70)
141
+
142
+ print("\n1. CUSTOMIZE THE TEMPLATE:")
143
+ print(" - Open the .tex file in your LaTeX editor")
144
+ print(" - Replace all [bracketed placeholders] with patient-specific information")
145
+ print(" - Remove or modify sections as appropriate for your patient")
146
+
147
+ print("\n2. COMPILE TO PDF:")
148
+ print(f" $ pdflatex {output_path.name}")
149
+
150
+ print("\n3. VALIDATE (optional):")
151
+ print(f" $ python check_completeness.py {output_path.name}")
152
+ print(f" $ python validate_treatment_plan.py {output_path.name}")
153
+
154
+ print("\n4. DE-IDENTIFY BEFORE SHARING:")
155
+ print(" - Remove all HIPAA identifiers (18 identifiers)")
156
+ print(" - See regulatory_compliance.md reference for details")
157
+
158
+ print("\n" + "="*70)
159
+
160
+
161
+ def main():
162
+ parser = argparse.ArgumentParser(
163
+ description='Generate treatment plan template',
164
+ formatter_class=argparse.RawDescriptionHelpFormatter,
165
+ epilog="""
166
+ Examples:
167
+ # Interactive mode (recommended for first-time users)
168
+ python generate_template.py
169
+
170
+ # Direct generation with type specification
171
+ python generate_template.py --type general_medical --output diabetes_plan.tex
172
+
173
+ # Generate with default filename
174
+ python generate_template.py --type mental_health
175
+
176
+ # List available templates
177
+ python generate_template.py --list
178
+
179
+ Available template types:
180
+ general_medical, rehabilitation, mental_health, chronic_disease,
181
+ perioperative, pain_management
182
+ """
183
+ )
184
+
185
+ parser.add_argument(
186
+ '--type',
187
+ choices=list(TEMPLATES.keys()),
188
+ help='Template type to generate'
189
+ )
190
+
191
+ parser.add_argument(
192
+ '--output',
193
+ help='Output filename (default: auto-generated with timestamp)'
194
+ )
195
+
196
+ parser.add_argument(
197
+ '--list',
198
+ action='store_true',
199
+ help='List available templates and exit'
200
+ )
201
+
202
+ args = parser.parse_args()
203
+
204
+ # List templates and exit
205
+ if args.list:
206
+ list_templates()
207
+ return
208
+
209
+ # Determine template type
210
+ if args.type:
211
+ template_key = args.type
212
+ print(f"\nGenerating template: {TEMPLATES[template_key]['name']}")
213
+ else:
214
+ # Interactive mode
215
+ template_key = interactive_selection()
216
+
217
+ # Determine output filename
218
+ if args.output:
219
+ output_filename = args.output
220
+ else:
221
+ output_filename = get_output_filename(template_key)
222
+
223
+ # Default output to current directory
224
+ output_path = Path.cwd() / output_filename
225
+
226
+ # Confirm overwrite if file exists
227
+ if output_path.exists():
228
+ response = input(f"\nFile {output_filename} already exists. Overwrite? (y/n): ").strip().lower()
229
+ if response != 'y':
230
+ print("Cancelled.")
231
+ return
232
+
233
+ # Copy template
234
+ try:
235
+ output_path = copy_template(template_key, output_path)
236
+ display_success(output_path, template_key)
237
+ except Exception as e:
238
+ print(f"\n✗ ERROR: {e}", file=sys.stderr)
239
+ sys.exit(1)
240
+
241
+
242
+ if __name__ == '__main__':
243
+ main()
244
+