@ngocsangairvds/vsaf 4.1.9 → 4.1.11

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 (1053) hide show
  1. package/package.json +1 -1
  2. package/packages/cli/dist/commands/install.d.ts +1 -1
  3. package/packages/cli/dist/commands/install.d.ts.map +1 -1
  4. package/packages/cli/dist/commands/install.js +25 -13
  5. package/packages/cli/dist/commands/install.js.map +1 -1
  6. package/packages/cli/dist/commands/skill.d.ts.map +1 -1
  7. package/packages/cli/dist/commands/skill.js +5 -1
  8. package/packages/cli/dist/commands/skill.js.map +1 -1
  9. package/skills/vds-skill/install-deps.mjs +252 -0
  10. package/skills/vds-skill/pack.yaml +8 -0
  11. package/skills/vds-skill/runtime/.claude/phase7-CLOSURE.md +100 -0
  12. package/skills/vds-skill/runtime/.dockerignore +62 -0
  13. package/skills/vds-skill/runtime/.github/ISSUE_TEMPLATE/cli-change.md +92 -0
  14. package/skills/vds-skill/runtime/.github/PULL_REQUEST_TEMPLATE/pull_request_template.md +48 -0
  15. package/skills/vds-skill/runtime/.github/workflows/chaos-smoke.yml +266 -0
  16. package/skills/vds-skill/runtime/.github/workflows/confluence-sync.yml +44 -0
  17. package/skills/vds-skill/runtime/.github/workflows/docs-confluence-evidence.yml +170 -0
  18. package/skills/vds-skill/runtime/.github/workflows/docs-quality.yml +59 -0
  19. package/skills/vds-skill/runtime/.github/workflows/lint-and-test.yml +90 -0
  20. package/skills/vds-skill/runtime/.github/workflows/scheduler-load-smoke.yml +104 -0
  21. package/skills/vds-skill/runtime/.github/workflows/telegram-bridge-ci.yml +131 -0
  22. package/skills/vds-skill/runtime/.graphifyignore +29 -0
  23. package/skills/vds-skill/runtime/.importlinter +86 -0
  24. package/skills/vds-skill/runtime/.mcp.json +11 -0
  25. package/skills/vds-skill/runtime/.pre-commit-config.yaml +62 -0
  26. package/skills/vds-skill/runtime/.ruffignore +3 -0
  27. package/skills/vds-skill/runtime/AGENTS.md +250 -0
  28. package/skills/vds-skill/runtime/AGENTS.vi.md +92 -0
  29. package/skills/vds-skill/runtime/ECOSYSTEM-CHANGELOG.md +52 -0
  30. package/skills/vds-skill/runtime/ECOSYSTEM-DOCS.md +602 -0
  31. package/skills/vds-skill/runtime/ECOSYSTEM_ALIGNMENT.md +133 -0
  32. package/skills/vds-skill/runtime/Makefile +119 -0
  33. package/skills/vds-skill/runtime/README.md +103 -0
  34. package/skills/vds-skill/runtime/bitbucket_manifest_mapping.toml +34 -0
  35. package/skills/vds-skill/runtime/bitbucket_orchestrator/ARCHITECTURE_ANALYSIS.md +258 -0
  36. package/skills/vds-skill/runtime/bitbucket_orchestrator/BITBUCKET_API_PRACTICES.md +393 -0
  37. package/skills/vds-skill/runtime/bitbucket_orchestrator/EVALUATION_REPORT.md +61 -0
  38. package/skills/vds-skill/runtime/bitbucket_orchestrator/FEATURES.md +908 -0
  39. package/skills/vds-skill/runtime/bitbucket_orchestrator/README.md +817 -0
  40. package/skills/vds-skill/runtime/bitbucket_orchestrator/pyproject.toml +49 -0
  41. package/skills/vds-skill/runtime/bitbucket_orchestrator/src/vds_bitbucket_orchestrator/__init__.py +50 -0
  42. package/skills/vds-skill/runtime/bitbucket_orchestrator/src/vds_bitbucket_orchestrator/async_client.py +641 -0
  43. package/skills/vds-skill/runtime/bitbucket_orchestrator/src/vds_bitbucket_orchestrator/cli.py +2271 -0
  44. package/skills/vds-skill/runtime/bitbucket_orchestrator/src/vds_bitbucket_orchestrator/client.py +2693 -0
  45. package/skills/vds-skill/runtime/bitbucket_orchestrator/src/vds_bitbucket_orchestrator/config.py +185 -0
  46. package/skills/vds-skill/runtime/bitbucket_orchestrator/src/vds_bitbucket_orchestrator/errors.py +34 -0
  47. package/skills/vds-skill/runtime/bitbucket_orchestrator/src/vds_bitbucket_orchestrator/factory.py +185 -0
  48. package/skills/vds-skill/runtime/bitbucket_orchestrator/src/vds_bitbucket_orchestrator/parsers.py +113 -0
  49. package/skills/vds-skill/runtime/bitbucket_orchestrator/src/vds_bitbucket_orchestrator/protocols.py +244 -0
  50. package/skills/vds-skill/runtime/bitbucket_orchestrator/src/vds_bitbucket_orchestrator/repo_ops.py +325 -0
  51. package/skills/vds-skill/runtime/bitbucket_orchestrator/tests/__init__.py +8 -0
  52. package/skills/vds-skill/runtime/bitbucket_orchestrator/tests/conftest.py +65 -0
  53. package/skills/vds-skill/runtime/bitbucket_orchestrator/tests/test_advanced_search.py +155 -0
  54. package/skills/vds-skill/runtime/bitbucket_orchestrator/tests/test_async_client.py +505 -0
  55. package/skills/vds-skill/runtime/bitbucket_orchestrator/tests/test_branch_permissions.py +172 -0
  56. package/skills/vds-skill/runtime/bitbucket_orchestrator/tests/test_cli.py +113 -0
  57. package/skills/vds-skill/runtime/bitbucket_orchestrator/tests/test_cli_archive.py +122 -0
  58. package/skills/vds-skill/runtime/bitbucket_orchestrator/tests/test_cli_clone.py +131 -0
  59. package/skills/vds-skill/runtime/bitbucket_orchestrator/tests/test_client.py +207 -0
  60. package/skills/vds-skill/runtime/bitbucket_orchestrator/tests/test_client_archive.py +73 -0
  61. package/skills/vds-skill/runtime/bitbucket_orchestrator/tests/test_client_branch_conditions.py +101 -0
  62. package/skills/vds-skill/runtime/bitbucket_orchestrator/tests/test_client_code_advanced.py +180 -0
  63. package/skills/vds-skill/runtime/bitbucket_orchestrator/tests/test_client_code_file.py +33 -0
  64. package/skills/vds-skill/runtime/bitbucket_orchestrator/tests/test_client_deployment_environments.py +193 -0
  65. package/skills/vds-skill/runtime/bitbucket_orchestrator/tests/test_client_issues.py +163 -0
  66. package/skills/vds-skill/runtime/bitbucket_orchestrator/tests/test_client_pipelines_advanced.py +171 -0
  67. package/skills/vds-skill/runtime/bitbucket_orchestrator/tests/test_client_pr_blockers.py +118 -0
  68. package/skills/vds-skill/runtime/bitbucket_orchestrator/tests/test_client_repository_variables.py +155 -0
  69. package/skills/vds-skill/runtime/bitbucket_orchestrator/tests/test_code.py +98 -0
  70. package/skills/vds-skill/runtime/bitbucket_orchestrator/tests/test_code_advanced.py +279 -0
  71. package/skills/vds-skill/runtime/bitbucket_orchestrator/tests/test_code_insights.py +334 -0
  72. package/skills/vds-skill/runtime/bitbucket_orchestrator/tests/test_conditions.py +149 -0
  73. package/skills/vds-skill/runtime/bitbucket_orchestrator/tests/test_config.py +297 -0
  74. package/skills/vds-skill/runtime/bitbucket_orchestrator/tests/test_deployment_env.py +352 -0
  75. package/skills/vds-skill/runtime/bitbucket_orchestrator/tests/test_errors.py +67 -0
  76. package/skills/vds-skill/runtime/bitbucket_orchestrator/tests/test_factory.py +352 -0
  77. package/skills/vds-skill/runtime/bitbucket_orchestrator/tests/test_fork_operations.py +203 -0
  78. package/skills/vds-skill/runtime/bitbucket_orchestrator/tests/test_issue_cli.py +262 -0
  79. package/skills/vds-skill/runtime/bitbucket_orchestrator/tests/test_pipeline_advanced.py +265 -0
  80. package/skills/vds-skill/runtime/bitbucket_orchestrator/tests/test_pr_blocker.py +206 -0
  81. package/skills/vds-skill/runtime/bitbucket_orchestrator/tests/test_protocols.py +336 -0
  82. package/skills/vds-skill/runtime/bitbucket_orchestrator/tests/test_repo_ops_archive.py +169 -0
  83. package/skills/vds-skill/runtime/bitbucket_orchestrator/tests/test_repo_ops_clone.py +115 -0
  84. package/skills/vds-skill/runtime/bitbucket_orchestrator/tests/test_repo_ops_parsing.py +149 -0
  85. package/skills/vds-skill/runtime/bitbucket_orchestrator/tests/test_repo_settings.py +336 -0
  86. package/skills/vds-skill/runtime/bitbucket_orchestrator/tests/test_repo_variables.py +266 -0
  87. package/skills/vds-skill/runtime/bitbucket_orchestrator/tests/test_webhooks.py +188 -0
  88. package/skills/vds-skill/runtime/bitbucket_orchestrator/tests/test_workspace.py +234 -0
  89. package/skills/vds-skill/runtime/bitbucket_orchestrator/tests/unit/__init__.py +0 -0
  90. package/skills/vds-skill/runtime/bitbucket_orchestrator/tests/unit/test_parsers.py +254 -0
  91. package/skills/vds-skill/runtime/brd_orchestrator/README.md +29 -0
  92. package/skills/vds-skill/runtime/brd_orchestrator/pyproject.toml +63 -0
  93. package/skills/vds-skill/runtime/brd_orchestrator/src/vds_brd_orchestrator/__init__.py +17 -0
  94. package/skills/vds-skill/runtime/brd_orchestrator/src/vds_brd_orchestrator/cli.py +187 -0
  95. package/skills/vds-skill/runtime/brd_orchestrator/src/vds_brd_orchestrator/validator.py +121 -0
  96. package/skills/vds-skill/runtime/brd_orchestrator/tests/__init__.py +0 -0
  97. package/skills/vds-skill/runtime/brd_orchestrator/tests/test_cli.py +62 -0
  98. package/skills/vds-skill/runtime/brd_orchestrator/tests/test_validator.py +33 -0
  99. package/skills/vds-skill/runtime/code/code_evidence_pack.json +435 -0
  100. package/skills/vds-skill/runtime/confluence_orchestrator/Dockerfile +19 -0
  101. package/skills/vds-skill/runtime/confluence_orchestrator/README.md +479 -0
  102. package/skills/vds-skill/runtime/confluence_orchestrator/SYNC_SCRIPTS.md +127 -0
  103. package/skills/vds-skill/runtime/confluence_orchestrator/SYNC_STANDARDIZATION.md +108 -0
  104. package/skills/vds-skill/runtime/confluence_orchestrator/pyproject.toml +50 -0
  105. package/skills/vds-skill/runtime/confluence_orchestrator/src/confluence_orchestrator/__init__.py +56 -0
  106. package/skills/vds-skill/runtime/confluence_orchestrator/src/confluence_orchestrator/async_client.py +100 -0
  107. package/skills/vds-skill/runtime/confluence_orchestrator/src/confluence_orchestrator/cli.py +3160 -0
  108. package/skills/vds-skill/runtime/confluence_orchestrator/src/confluence_orchestrator/config.py +213 -0
  109. package/skills/vds-skill/runtime/confluence_orchestrator/src/confluence_orchestrator/content.py +368 -0
  110. package/skills/vds-skill/runtime/confluence_orchestrator/src/confluence_orchestrator/content_v2.py +144 -0
  111. package/skills/vds-skill/runtime/confluence_orchestrator/src/confluence_orchestrator/crawl_tree.py +1833 -0
  112. package/skills/vds-skill/runtime/confluence_orchestrator/src/confluence_orchestrator/errors.py +44 -0
  113. package/skills/vds-skill/runtime/confluence_orchestrator/src/confluence_orchestrator/eventing.py +111 -0
  114. package/skills/vds-skill/runtime/confluence_orchestrator/src/confluence_orchestrator/http.py +1850 -0
  115. package/skills/vds-skill/runtime/confluence_orchestrator/src/confluence_orchestrator/orchestration.py +166 -0
  116. package/skills/vds-skill/runtime/confluence_orchestrator/src/confluence_orchestrator/protocols.py +61 -0
  117. package/skills/vds-skill/runtime/confluence_orchestrator/src/confluence_orchestrator/reporting.py +78 -0
  118. package/skills/vds-skill/runtime/confluence_orchestrator/src/confluence_orchestrator/tree.py +122 -0
  119. package/skills/vds-skill/runtime/confluence_orchestrator/src/confluence_orchestrator/tree_copier.py +431 -0
  120. package/skills/vds-skill/runtime/confluence_orchestrator/sync_pdfs_from_markdown.py +203 -0
  121. package/skills/vds-skill/runtime/confluence_orchestrator/sync_pdfs_to_confluence.py +299 -0
  122. package/skills/vds-skill/runtime/confluence_orchestrator/sync_png_attachments.py +299 -0
  123. package/skills/vds-skill/runtime/confluence_orchestrator/tests/conftest.py +46 -0
  124. package/skills/vds-skill/runtime/confluence_orchestrator/tests/test_advanced_content.py +252 -0
  125. package/skills/vds-skill/runtime/confluence_orchestrator/tests/test_advanced_search.py +193 -0
  126. package/skills/vds-skill/runtime/confluence_orchestrator/tests/test_async_client.py +104 -0
  127. package/skills/vds-skill/runtime/confluence_orchestrator/tests/test_cache_management.py +246 -0
  128. package/skills/vds-skill/runtime/confluence_orchestrator/tests/test_cli.py +716 -0
  129. package/skills/vds-skill/runtime/confluence_orchestrator/tests/test_config.py +130 -0
  130. package/skills/vds-skill/runtime/confluence_orchestrator/tests/test_content.py +192 -0
  131. package/skills/vds-skill/runtime/confluence_orchestrator/tests/test_content_flags.py +27 -0
  132. package/skills/vds-skill/runtime/confluence_orchestrator/tests/test_content_labels.py +94 -0
  133. package/skills/vds-skill/runtime/confluence_orchestrator/tests/test_crawl_tree.py +2252 -0
  134. package/skills/vds-skill/runtime/confluence_orchestrator/tests/test_degraded_write_safety.py +176 -0
  135. package/skills/vds-skill/runtime/confluence_orchestrator/tests/test_draft_management.py +225 -0
  136. package/skills/vds-skill/runtime/confluence_orchestrator/tests/test_errors.py +75 -0
  137. package/skills/vds-skill/runtime/confluence_orchestrator/tests/test_eventing.py +73 -0
  138. package/skills/vds-skill/runtime/confluence_orchestrator/tests/test_eventing_chaos.py +37 -0
  139. package/skills/vds-skill/runtime/confluence_orchestrator/tests/test_eventing_rate_limit.py +44 -0
  140. package/skills/vds-skill/runtime/confluence_orchestrator/tests/test_eventing_timeout.py +49 -0
  141. package/skills/vds-skill/runtime/confluence_orchestrator/tests/test_export.py +231 -0
  142. package/skills/vds-skill/runtime/confluence_orchestrator/tests/test_history.py +217 -0
  143. package/skills/vds-skill/runtime/confluence_orchestrator/tests/test_http.py +375 -0
  144. package/skills/vds-skill/runtime/confluence_orchestrator/tests/test_orchestration.py +93 -0
  145. package/skills/vds-skill/runtime/confluence_orchestrator/tests/test_reporting.py +24 -0
  146. package/skills/vds-skill/runtime/confluence_orchestrator/tests/test_search_cql.py +36 -0
  147. package/skills/vds-skill/runtime/confluence_orchestrator/tests/test_space_management.py +236 -0
  148. package/skills/vds-skill/runtime/confluence_orchestrator/tests/test_space_permissions.py +384 -0
  149. package/skills/vds-skill/runtime/confluence_orchestrator/tests/test_tree_copier.py +644 -0
  150. package/skills/vds-skill/runtime/confluence_orchestrator/tests/test_tree_copier_remap.py +289 -0
  151. package/skills/vds-skill/runtime/confluence_orchestrator/tests/test_user_group_management.py +387 -0
  152. package/skills/vds-skill/runtime/diagram_generator/README.md +663 -0
  153. package/skills/vds-skill/runtime/diagram_generator/ci_validate.sh +16 -0
  154. package/skills/vds-skill/runtime/diagram_generator/docs-nttc/projects/INSURANCE/analysis/current-state/insurance-claim-business/insurance-claim-business-component.png +0 -0
  155. package/skills/vds-skill/runtime/diagram_generator/docs-nttc/projects/INSURANCE/analysis/current-state/insurance-claim-business/insurance-claim-business-component.puml +23 -0
  156. package/skills/vds-skill/runtime/diagram_generator/docs-nttc/projects/INSURANCE/analysis/current-state/insurance-claim-business/insurance-claim-business-sequence.png +0 -0
  157. package/skills/vds-skill/runtime/diagram_generator/docs-nttc/projects/INSURANCE/analysis/current-state/insurance-claim-business/insurance-claim-business-sequence.puml +21 -0
  158. package/skills/vds-skill/runtime/diagram_generator/docs-nttc/projects/INSURANCE/analysis/current-state/insurance-claim-business/insurance-claim-business-usecase.png +0 -0
  159. package/skills/vds-skill/runtime/diagram_generator/docs-nttc/projects/INSURANCE/analysis/current-state/insurance-claim-business/insurance-claim-business-usecase.puml +14 -0
  160. package/skills/vds-skill/runtime/diagram_generator/examples/github-actions-validate.yml +39 -0
  161. package/skills/vds-skill/runtime/diagram_generator/generate_all_diagrams.py +827 -0
  162. package/skills/vds-skill/runtime/diagram_generator/generate_insurance_c4_diagrams.py +261 -0
  163. package/skills/vds-skill/runtime/diagram_generator/generate_insurance_c4_quick.py +486 -0
  164. package/skills/vds-skill/runtime/diagram_generator/pyproject.toml +28 -0
  165. package/skills/vds-skill/runtime/diagram_generator/render_png.py +59 -0
  166. package/skills/vds-skill/runtime/diagram_generator/src/vds_diagram_generator/__init__.py +3 -0
  167. package/skills/vds-skill/runtime/diagram_generator/src/vds_diagram_generator/cli.py +50 -0
  168. package/skills/vds-skill/runtime/diagram_generator/test_c4_hierarchical.py +142 -0
  169. package/skills/vds-skill/runtime/diagram_generator/test_c4_quick.py +131 -0
  170. package/skills/vds-skill/runtime/diagram_generator/tests/__init__.py +0 -0
  171. package/skills/vds-skill/runtime/diagram_generator/tests/test_analyzer_completeness.py +260 -0
  172. package/skills/vds-skill/runtime/diagram_generator/tests/test_c4_syntax_correctness.py +138 -0
  173. package/skills/vds-skill/runtime/diagram_generator/tests/test_component_coverage.py +182 -0
  174. package/skills/vds-skill/runtime/diagram_generator/tests/test_mermaid_output.py +80 -0
  175. package/skills/vds-skill/runtime/diagram_generator/tests/test_png_generation.py +112 -0
  176. package/skills/vds-skill/runtime/diagram_generator/tests/test_scenario_templates.py +15 -0
  177. package/skills/vds-skill/runtime/diagram_generator/tests/test_sequence_accuracy.py +93 -0
  178. package/skills/vds-skill/runtime/diagram_generator/tests/test_structurizr_export.py +177 -0
  179. package/skills/vds-skill/runtime/diagram_generator/tests/test_style_consistency.py +174 -0
  180. package/skills/vds-skill/runtime/diagram_generator/tests/test_usecase_generator.py +201 -0
  181. package/skills/vds-skill/runtime/diagram_generator/tests/test_usecase_integration.py +124 -0
  182. package/skills/vds-skill/runtime/docker/.dockerignore +38 -0
  183. package/skills/vds-skill/runtime/docker/ADR.md +392 -0
  184. package/skills/vds-skill/runtime/docker/Dockerfile +68 -0
  185. package/skills/vds-skill/runtime/docker/MIGRATION.md +453 -0
  186. package/skills/vds-skill/runtime/docker/README.md +347 -0
  187. package/skills/vds-skill/runtime/docker/ROLLBACK.md +596 -0
  188. package/skills/vds-skill/runtime/docker/compose.phase2-verification.yml +31 -0
  189. package/skills/vds-skill/runtime/docker/docker-compose.cli.yml +206 -0
  190. package/skills/vds-skill/runtime/docker/docker-compose.infra.yml +276 -0
  191. package/skills/vds-skill/runtime/docker/docker-compose.services.yml +425 -0
  192. package/skills/vds-skill/runtime/docker/infrastructure/init-schemas.sql +177 -0
  193. package/skills/vds-skill/runtime/docker/infrastructure/pgbouncer/pgbouncer.ini +75 -0
  194. package/skills/vds-skill/runtime/docker/infrastructure/pgbouncer/userlist.txt +50 -0
  195. package/skills/vds-skill/runtime/docker/infrastructure/pgbouncer/userlist.txt.template +36 -0
  196. package/skills/vds-skill/runtime/docs/.confluence-evidence/.gitkeep +0 -0
  197. package/skills/vds-skill/runtime/docs/.confluence-evidence/PREFLIGHT.md +132 -0
  198. package/skills/vds-skill/runtime/docs/.confluence-evidence/README.md +84 -0
  199. package/skills/vds-skill/runtime/docs/.confluence.yaml +156 -0
  200. package/skills/vds-skill/runtime/docs/.freshness.yaml +54 -0
  201. package/skills/vds-skill/runtime/docs/README.md +235 -0
  202. package/skills/vds-skill/runtime/docs/agents/README.md +33 -0
  203. package/skills/vds-skill/runtime/docs/agents/explanation/data-flow.md +132 -0
  204. package/skills/vds-skill/runtime/docs/agents/explanation/development-roadmap.md +49 -0
  205. package/skills/vds-skill/runtime/docs/agents/explanation/features-overview.md +62 -0
  206. package/skills/vds-skill/runtime/docs/agents/explanation/index.md +36 -0
  207. package/skills/vds-skill/runtime/docs/agents/explanation/runtime-verification-and-gap-reporting.md +127 -0
  208. package/skills/vds-skill/runtime/docs/agents/explanation/system-architecture.md +139 -0
  209. package/skills/vds-skill/runtime/docs/agents/explanation/whats-new.md +75 -0
  210. package/skills/vds-skill/runtime/docs/agents/explanation/who-ecosystem-introduction.md +65 -0
  211. package/skills/vds-skill/runtime/docs/agents/explanation/who-ecosystem-model.md +41 -0
  212. package/skills/vds-skill/runtime/docs/agents/how-to/02-using-vds-ai-memory.md +98 -0
  213. package/skills/vds-skill/runtime/docs/agents/how-to/03-memory-cross-agent.md +241 -0
  214. package/skills/vds-skill/runtime/docs/agents/how-to/04-using-progress-reports.md +240 -0
  215. package/skills/vds-skill/runtime/docs/agents/how-to/08-semantic-search.md +46 -0
  216. package/skills/vds-skill/runtime/docs/agents/how-to/apply-phase3-migration.md +148 -0
  217. package/skills/vds-skill/runtime/docs/agents/how-to/choose-the-right-command-or-skill.md +34 -0
  218. package/skills/vds-skill/runtime/docs/agents/how-to/contribute-new-orchestrator.md +149 -0
  219. package/skills/vds-skill/runtime/docs/agents/how-to/decision-tree.md +63 -0
  220. package/skills/vds-skill/runtime/docs/agents/how-to/first-audit-run.md +83 -0
  221. package/skills/vds-skill/runtime/docs/agents/how-to/index.md +49 -0
  222. package/skills/vds-skill/runtime/docs/agents/how-to/install-and-bootstrap-who-scripts-and-skills.md +314 -0
  223. package/skills/vds-skill/runtime/docs/agents/how-to/orchestrator-workflows/analytics-pipeline-workflow.md +165 -0
  224. package/skills/vds-skill/runtime/docs/agents/how-to/orchestrator-workflows/code-quality-gate-workflow.md +138 -0
  225. package/skills/vds-skill/runtime/docs/agents/how-to/orchestrator-workflows/confluence-bitbucket-sync-workflow.md +130 -0
  226. package/skills/vds-skill/runtime/docs/agents/how-to/orchestrator-workflows/document-delivery-workflow.md +142 -0
  227. package/skills/vds-skill/runtime/docs/agents/how-to/orchestrator-workflows/memory-progress-workflow.md +140 -0
  228. package/skills/vds-skill/runtime/docs/agents/how-to/orchestrator-workflows/research-spec-audit-workflow.md +135 -0
  229. package/skills/vds-skill/runtime/docs/agents/how-to/phase131-all-project-preparation.md +211 -0
  230. package/skills/vds-skill/runtime/docs/agents/how-to/phase131-bounded-parallel-analysis.md +123 -0
  231. package/skills/vds-skill/runtime/docs/agents/how-to/phase131-confluence-upload-recovery.md +204 -0
  232. package/skills/vds-skill/runtime/docs/agents/how-to/phase132-department-preparation.md +144 -0
  233. package/skills/vds-skill/runtime/docs/agents/how-to/run-ecosystem-daily-report.md +213 -0
  234. package/skills/vds-skill/runtime/docs/agents/how-to/tips-and-tricks.md +138 -0
  235. package/skills/vds-skill/runtime/docs/agents/how-to/troubleshooting-guide.md +221 -0
  236. package/skills/vds-skill/runtime/docs/agents/reference/agent-operational-contract.md +162 -0
  237. package/skills/vds-skill/runtime/docs/agents/reference/alignment-phase179-report.md +144 -0
  238. package/skills/vds-skill/runtime/docs/agents/reference/audit-triage-playbook.md +256 -0
  239. package/skills/vds-skill/runtime/docs/agents/reference/backup-restore.md +132 -0
  240. package/skills/vds-skill/runtime/docs/agents/reference/bitbucket-orchestrator.md +56 -0
  241. package/skills/vds-skill/runtime/docs/agents/reference/brd-orchestrator.md +52 -0
  242. package/skills/vds-skill/runtime/docs/agents/reference/capability-coverage-review.md +51 -0
  243. package/skills/vds-skill/runtime/docs/agents/reference/ci-workflows.md +98 -0
  244. package/skills/vds-skill/runtime/docs/agents/reference/circular-dependency-orchestrator.md +55 -0
  245. package/skills/vds-skill/runtime/docs/agents/reference/cli-commands.md +583 -0
  246. package/skills/vds-skill/runtime/docs/agents/reference/cli-development-standards.md +41 -0
  247. package/skills/vds-skill/runtime/docs/agents/reference/cli-help-matrix.md +84 -0
  248. package/skills/vds-skill/runtime/docs/agents/reference/common-errors.md +126 -0
  249. package/skills/vds-skill/runtime/docs/agents/reference/configuration-reference.md +128 -0
  250. package/skills/vds-skill/runtime/docs/agents/reference/confluence-orchestrator.md +56 -0
  251. package/skills/vds-skill/runtime/docs/agents/reference/confluence-sync-target.md +111 -0
  252. package/skills/vds-skill/runtime/docs/agents/reference/confluence-sync.md +46 -0
  253. package/skills/vds-skill/runtime/docs/agents/reference/db-query-orchestrator.md +93 -0
  254. package/skills/vds-skill/runtime/docs/agents/reference/diagrams-orchestrator.md +52 -0
  255. package/skills/vds-skill/runtime/docs/agents/reference/ecosystem-daily-report.md +229 -0
  256. package/skills/vds-skill/runtime/docs/agents/reference/elastic-orchestrator.md +57 -0
  257. package/skills/vds-skill/runtime/docs/agents/reference/env-git-helper.md +216 -0
  258. package/skills/vds-skill/runtime/docs/agents/reference/evolution-orchestrator.md +113 -0
  259. package/skills/vds-skill/runtime/docs/agents/reference/excel-orchestrator.md +51 -0
  260. package/skills/vds-skill/runtime/docs/agents/reference/git-orchestrator.md +62 -0
  261. package/skills/vds-skill/runtime/docs/agents/reference/google-sheets-orchestrator.md +51 -0
  262. package/skills/vds-skill/runtime/docs/agents/reference/grafana-orchestrator.md +52 -0
  263. package/skills/vds-skill/runtime/docs/agents/reference/hexagonal-orchestrator.md +64 -0
  264. package/skills/vds-skill/runtime/docs/agents/reference/index.md +36 -0
  265. package/skills/vds-skill/runtime/docs/agents/reference/infrastructure-v2.15.md +67 -0
  266. package/skills/vds-skill/runtime/docs/agents/reference/intellij-orchestrator.md +50 -0
  267. package/skills/vds-skill/runtime/docs/agents/reference/jira-orchestrator.md +60 -0
  268. package/skills/vds-skill/runtime/docs/agents/reference/links-orchestrator.md +57 -0
  269. package/skills/vds-skill/runtime/docs/agents/reference/lint-cli.md +99 -0
  270. package/skills/vds-skill/runtime/docs/agents/reference/lsp-orchestrator.md +51 -0
  271. package/skills/vds-skill/runtime/docs/agents/reference/markdown-orchestrator.md +53 -0
  272. package/skills/vds-skill/runtime/docs/agents/reference/mcp-orchestrator.md +88 -0
  273. package/skills/vds-skill/runtime/docs/agents/reference/memory-orchestrator.md +53 -0
  274. package/skills/vds-skill/runtime/docs/agents/reference/metabase-orchestrator.md +51 -0
  275. package/skills/vds-skill/runtime/docs/agents/reference/migration-playbook.md +71 -0
  276. package/skills/vds-skill/runtime/docs/agents/reference/multi-agent-orchestrator.md +52 -0
  277. package/skills/vds-skill/runtime/docs/agents/reference/openapi-orchestrator.md +57 -0
  278. package/skills/vds-skill/runtime/docs/agents/reference/orchestrator-architecture.md +194 -0
  279. package/skills/vds-skill/runtime/docs/agents/reference/orchestrator-comparison-matrix.md +79 -0
  280. package/skills/vds-skill/runtime/docs/agents/reference/orchestrator-index.md +73 -0
  281. package/skills/vds-skill/runtime/docs/agents/reference/pdf-orchestrator.md +57 -0
  282. package/skills/vds-skill/runtime/docs/agents/reference/portable-paths-and-config.md +0 -0
  283. package/skills/vds-skill/runtime/docs/agents/reference/portable-paths-validation-matrix.md +129 -0
  284. package/skills/vds-skill/runtime/docs/agents/reference/progress-orchestrator.md +51 -0
  285. package/skills/vds-skill/runtime/docs/agents/reference/progress-report-cli.md +215 -0
  286. package/skills/vds-skill/runtime/docs/agents/reference/public-interface-orchestrator.md +73 -0
  287. package/skills/vds-skill/runtime/docs/agents/reference/research-orchestrator.md +53 -0
  288. package/skills/vds-skill/runtime/docs/agents/reference/schema-orchestrator.md +57 -0
  289. package/skills/vds-skill/runtime/docs/agents/reference/search-tools.md +34 -0
  290. package/skills/vds-skill/runtime/docs/agents/reference/skills-commands.md +256 -0
  291. package/skills/vds-skill/runtime/docs/agents/reference/skills-reference.md +32 -0
  292. package/skills/vds-skill/runtime/docs/agents/reference/sonarqube-orchestrator.md +62 -0
  293. package/skills/vds-skill/runtime/docs/agents/reference/spec-orchestrator.md +56 -0
  294. package/skills/vds-skill/runtime/docs/agents/reference/structure-orchestrator.md +69 -0
  295. package/skills/vds-skill/runtime/docs/agents/reference/system-requirements.md +76 -0
  296. package/skills/vds-skill/runtime/docs/agents/reference/tasks-orchestrator.md +53 -0
  297. package/skills/vds-skill/runtime/docs/agents/reference/validation-and-sync-notes.md +54 -0
  298. package/skills/vds-skill/runtime/docs/agents/reference/vds-ai-memory-api.md +51 -0
  299. package/skills/vds-skill/runtime/docs/agents/reference/vds-cli-reference.md +34 -0
  300. package/skills/vds-skill/runtime/docs/agents/reference/who-capability-inventory.md +96 -0
  301. package/skills/vds-skill/runtime/docs/agents/reference/who-capability-routing-matrix.md +14 -0
  302. package/skills/vds-skill/runtime/docs/agents/tutorials/feature-progression-guide.md +112 -0
  303. package/skills/vds-skill/runtime/docs/agents/tutorials/index.md +36 -0
  304. package/skills/vds-skill/runtime/docs/agents/tutorials/quick-start.md +50 -0
  305. package/skills/vds-skill/runtime/docs/agents/tutorials/who-skills-and-scripts-onboarding.md +47 -0
  306. package/skills/vds-skill/runtime/docs/agents/tutorials/zero-to-productive-developer.md +339 -0
  307. package/skills/vds-skill/runtime/docs/confluence/IMPLEMENTATION-SUMMARY.md +78 -0
  308. package/skills/vds-skill/runtime/docs/confluence/SYNC-GUIDE.md +47 -0
  309. package/skills/vds-skill/runtime/docs/deployment/offline-docker-image-load.md +59 -0
  310. package/skills/vds-skill/runtime/docs/evolution-auto-run-rollout.md +325 -0
  311. package/skills/vds-skill/runtime/docs/evolution-loop-deep-integration.md +496 -0
  312. package/skills/vds-skill/runtime/docs/evolution-loop-integration-guide.md +359 -0
  313. package/skills/vds-skill/runtime/docs/openspace-schema-snapshot.md +73 -0
  314. package/skills/vds-skill/runtime/docs/operations/sla-mttr-policy.md +44 -0
  315. package/skills/vds-skill/runtime/docs/p0-closure-evidence/SUMMARY.md +58 -0
  316. package/skills/vds-skill/runtime/docs/p4-closure-evidence/.gitkeep +0 -0
  317. package/skills/vds-skill/runtime/docs/p4-closure-evidence/smoke-20260427T024137Z-b95b586b.json +15 -0
  318. package/skills/vds-skill/runtime/docs/p8-preflight-evidence/alembic-and-runtime-advisory-locks.md +45 -0
  319. package/skills/vds-skill/runtime/docs/p8-preflight-evidence/dbos-listen-notify.md +54 -0
  320. package/skills/vds-skill/runtime/docs/p8-preflight-evidence/pgbouncer-search-path-empirical.md +110 -0
  321. package/skills/vds-skill/runtime/docs/p8-preflight-evidence/pgvector-set-local-audit.md +51 -0
  322. package/skills/vds-skill/runtime/docs/p8-preflight-evidence/topology-decision-session-mode.md +57 -0
  323. package/skills/vds-skill/runtime/docs/phases/CHANGELOG.md +103 -0
  324. package/skills/vds-skill/runtime/docs/phases/PHASE_125_COMPLETION_AND_MERGE.md +212 -0
  325. package/skills/vds-skill/runtime/docs/phases/phase125/IMPLEMENTATION_REPORT.md +227 -0
  326. package/skills/vds-skill/runtime/docs/phases/phase125/TSK-125.10-11-implementation-summary.md +196 -0
  327. package/skills/vds-skill/runtime/docs/phases/phase125/profile-patch-ollama-local-anthropic.md +122 -0
  328. package/skills/vds-skill/runtime/docs/phases/phase125_completion_summary.md +369 -0
  329. package/skills/vds-skill/runtime/docs/phases/phase125_llm_analysis_skill.md +164 -0
  330. package/skills/vds-skill/runtime/docs/phases/phase125_merge_complete.md +147 -0
  331. package/skills/vds-skill/runtime/docs/phases/phase125_skill_runtime_closure_20260321.md +91 -0
  332. package/skills/vds-skill/runtime/docs/phases/phase2-portable-paths/closure-handoff-summary-2026-03-23.md +290 -0
  333. package/skills/vds-skill/runtime/docs/phases/phase2-portable-paths/remaining-risk-register-2026-03-25.md +143 -0
  334. package/skills/vds-skill/runtime/docs/phases/phase2-portable-paths/verification-evidence-2026-03-23.md +135 -0
  335. package/skills/vds-skill/runtime/docs/v0-sunset-known-issues.md +88 -0
  336. package/skills/vds-skill/runtime/docs/vi/TRANSLATION-BACKLOG.md +72 -0
  337. package/skills/vds-skill/runtime/docs/vi/agents/README.md +41 -0
  338. package/skills/vds-skill/runtime/docs/vi/agents/explanation/features-overview.md +29 -0
  339. package/skills/vds-skill/runtime/docs/vi/agents/explanation/index.md +14 -0
  340. package/skills/vds-skill/runtime/docs/vi/agents/explanation/runtime-verification-and-gap-reporting.md +129 -0
  341. package/skills/vds-skill/runtime/docs/vi/agents/explanation/whats-new.md +37 -0
  342. package/skills/vds-skill/runtime/docs/vi/agents/explanation/who-ecosystem-introduction.md +21 -0
  343. package/skills/vds-skill/runtime/docs/vi/agents/explanation/who-ecosystem-model.md +36 -0
  344. package/skills/vds-skill/runtime/docs/vi/agents/how-to/02-using-vds-ai-memory.md +100 -0
  345. package/skills/vds-skill/runtime/docs/vi/agents/how-to/03-memory-cross-agent.md +243 -0
  346. package/skills/vds-skill/runtime/docs/vi/agents/how-to/04-using-progress-reports.md +242 -0
  347. package/skills/vds-skill/runtime/docs/vi/agents/how-to/08-semantic-search.md +16 -0
  348. package/skills/vds-skill/runtime/docs/vi/agents/how-to/choose-the-right-command-or-skill.md +36 -0
  349. package/skills/vds-skill/runtime/docs/vi/agents/how-to/decision-tree.md +77 -0
  350. package/skills/vds-skill/runtime/docs/vi/agents/how-to/first-audit-run.md +85 -0
  351. package/skills/vds-skill/runtime/docs/vi/agents/how-to/index.md +21 -0
  352. package/skills/vds-skill/runtime/docs/vi/agents/how-to/install-and-bootstrap-who-scripts-and-skills.md +156 -0
  353. package/skills/vds-skill/runtime/docs/vi/agents/how-to/orchestrator-workflows/analytics-pipeline-workflow.md +174 -0
  354. package/skills/vds-skill/runtime/docs/vi/agents/how-to/orchestrator-workflows/code-quality-gate-workflow.md +147 -0
  355. package/skills/vds-skill/runtime/docs/vi/agents/how-to/orchestrator-workflows/confluence-bitbucket-sync-workflow.md +139 -0
  356. package/skills/vds-skill/runtime/docs/vi/agents/how-to/orchestrator-workflows/document-delivery-workflow.md +151 -0
  357. package/skills/vds-skill/runtime/docs/vi/agents/how-to/orchestrator-workflows/memory-progress-workflow.md +149 -0
  358. package/skills/vds-skill/runtime/docs/vi/agents/how-to/orchestrator-workflows/research-spec-audit-workflow.md +144 -0
  359. package/skills/vds-skill/runtime/docs/vi/agents/how-to/phase131-all-project-preparation.md +213 -0
  360. package/skills/vds-skill/runtime/docs/vi/agents/how-to/phase131-bounded-parallel-analysis.md +125 -0
  361. package/skills/vds-skill/runtime/docs/vi/agents/how-to/phase131-confluence-upload-recovery.md +206 -0
  362. package/skills/vds-skill/runtime/docs/vi/agents/how-to/phase132-department-preparation.md +146 -0
  363. package/skills/vds-skill/runtime/docs/vi/agents/how-to/tips-and-tricks.md +34 -0
  364. package/skills/vds-skill/runtime/docs/vi/agents/how-to/troubleshooting-guide.md +36 -0
  365. package/skills/vds-skill/runtime/docs/vi/agents/reference/agent-operational-contract.md +98 -0
  366. package/skills/vds-skill/runtime/docs/vi/agents/reference/audit-triage-playbook.md +258 -0
  367. package/skills/vds-skill/runtime/docs/vi/agents/reference/bitbucket-orchestrator.md +30 -0
  368. package/skills/vds-skill/runtime/docs/vi/agents/reference/brd-orchestrator.md +29 -0
  369. package/skills/vds-skill/runtime/docs/vi/agents/reference/capability-coverage-review.md +46 -0
  370. package/skills/vds-skill/runtime/docs/vi/agents/reference/circular-dependency-orchestrator.md +29 -0
  371. package/skills/vds-skill/runtime/docs/vi/agents/reference/cli-commands.md +409 -0
  372. package/skills/vds-skill/runtime/docs/vi/agents/reference/cli-development-standards.md +19 -0
  373. package/skills/vds-skill/runtime/docs/vi/agents/reference/cli-help-matrix.md +71 -0
  374. package/skills/vds-skill/runtime/docs/vi/agents/reference/common-errors.md +133 -0
  375. package/skills/vds-skill/runtime/docs/vi/agents/reference/configuration-reference.md +25 -0
  376. package/skills/vds-skill/runtime/docs/vi/agents/reference/confluence-orchestrator.md +30 -0
  377. package/skills/vds-skill/runtime/docs/vi/agents/reference/db-query-orchestrator.md +34 -0
  378. package/skills/vds-skill/runtime/docs/vi/agents/reference/diagrams-orchestrator.md +31 -0
  379. package/skills/vds-skill/runtime/docs/vi/agents/reference/elastic-orchestrator.md +30 -0
  380. package/skills/vds-skill/runtime/docs/vi/agents/reference/evolution-orchestrator.md +31 -0
  381. package/skills/vds-skill/runtime/docs/vi/agents/reference/excel-orchestrator.md +60 -0
  382. package/skills/vds-skill/runtime/docs/vi/agents/reference/git-orchestrator.md +31 -0
  383. package/skills/vds-skill/runtime/docs/vi/agents/reference/google-sheets-orchestrator.md +60 -0
  384. package/skills/vds-skill/runtime/docs/vi/agents/reference/grafana-orchestrator.md +30 -0
  385. package/skills/vds-skill/runtime/docs/vi/agents/reference/hexagonal-orchestrator.md +73 -0
  386. package/skills/vds-skill/runtime/docs/vi/agents/reference/index.md +25 -0
  387. package/skills/vds-skill/runtime/docs/vi/agents/reference/intellij-orchestrator.md +59 -0
  388. package/skills/vds-skill/runtime/docs/vi/agents/reference/jira-orchestrator.md +32 -0
  389. package/skills/vds-skill/runtime/docs/vi/agents/reference/links-orchestrator.md +66 -0
  390. package/skills/vds-skill/runtime/docs/vi/agents/reference/lsp-orchestrator.md +60 -0
  391. package/skills/vds-skill/runtime/docs/vi/agents/reference/markdown-orchestrator.md +62 -0
  392. package/skills/vds-skill/runtime/docs/vi/agents/reference/mcp-orchestrator.md +34 -0
  393. package/skills/vds-skill/runtime/docs/vi/agents/reference/memory-orchestrator.md +45 -0
  394. package/skills/vds-skill/runtime/docs/vi/agents/reference/metabase-orchestrator.md +30 -0
  395. package/skills/vds-skill/runtime/docs/vi/agents/reference/multi-agent-orchestrator.md +61 -0
  396. package/skills/vds-skill/runtime/docs/vi/agents/reference/openapi-orchestrator.md +66 -0
  397. package/skills/vds-skill/runtime/docs/vi/agents/reference/orchestrator-architecture.md +24 -0
  398. package/skills/vds-skill/runtime/docs/vi/agents/reference/orchestrator-index.md +73 -0
  399. package/skills/vds-skill/runtime/docs/vi/agents/reference/pdf-orchestrator.md +30 -0
  400. package/skills/vds-skill/runtime/docs/vi/agents/reference/portable-paths-and-config.md +123 -0
  401. package/skills/vds-skill/runtime/docs/vi/agents/reference/portable-paths-validation-matrix.md +131 -0
  402. package/skills/vds-skill/runtime/docs/vi/agents/reference/progress-orchestrator.md +43 -0
  403. package/skills/vds-skill/runtime/docs/vi/agents/reference/progress-report-cli.md +217 -0
  404. package/skills/vds-skill/runtime/docs/vi/agents/reference/public-interface-orchestrator.md +82 -0
  405. package/skills/vds-skill/runtime/docs/vi/agents/reference/research-orchestrator.md +45 -0
  406. package/skills/vds-skill/runtime/docs/vi/agents/reference/schema-orchestrator.md +66 -0
  407. package/skills/vds-skill/runtime/docs/vi/agents/reference/search-tools.md +19 -0
  408. package/skills/vds-skill/runtime/docs/vi/agents/reference/skills-reference.md +27 -0
  409. package/skills/vds-skill/runtime/docs/vi/agents/reference/sonarqube-orchestrator.md +71 -0
  410. package/skills/vds-skill/runtime/docs/vi/agents/reference/spec-orchestrator.md +56 -0
  411. package/skills/vds-skill/runtime/docs/vi/agents/reference/structure-orchestrator.md +78 -0
  412. package/skills/vds-skill/runtime/docs/vi/agents/reference/system-requirements.md +30 -0
  413. package/skills/vds-skill/runtime/docs/vi/agents/reference/tasks-orchestrator.md +45 -0
  414. package/skills/vds-skill/runtime/docs/vi/agents/reference/validation-and-sync-notes.md +26 -0
  415. package/skills/vds-skill/runtime/docs/vi/agents/reference/vds-ai-memory-api.md +53 -0
  416. package/skills/vds-skill/runtime/docs/vi/agents/reference/vds-cli-reference.md +34 -0
  417. package/skills/vds-skill/runtime/docs/vi/agents/reference/who-capability-inventory.md +98 -0
  418. package/skills/vds-skill/runtime/docs/vi/agents/reference/who-capability-routing-matrix.md +16 -0
  419. package/skills/vds-skill/runtime/docs/vi/agents/tutorials/feature-progression-guide.md +124 -0
  420. package/skills/vds-skill/runtime/docs/vi/agents/tutorials/index.md +13 -0
  421. package/skills/vds-skill/runtime/docs/vi/agents/tutorials/quick-start.md +30 -0
  422. package/skills/vds-skill/runtime/docs/vi/agents/tutorials/who-skills-and-scripts-onboarding.md +42 -0
  423. package/skills/vds-skill/runtime/docs/vi/agents/tutorials/zero-to-productive-developer.md +137 -0
  424. package/skills/vds-skill/runtime/elastic_orchestrator/README.md +450 -0
  425. package/skills/vds-skill/runtime/elastic_orchestrator/pyproject.toml +97 -0
  426. package/skills/vds-skill/runtime/elastic_orchestrator/src/vds_elastic_orchestrator/__init__.py +81 -0
  427. package/skills/vds-skill/runtime/elastic_orchestrator/src/vds_elastic_orchestrator/cli.py +652 -0
  428. package/skills/vds-skill/runtime/elastic_orchestrator/src/vds_elastic_orchestrator/client.py +743 -0
  429. package/skills/vds-skill/runtime/elastic_orchestrator/src/vds_elastic_orchestrator/config.py +208 -0
  430. package/skills/vds-skill/runtime/elastic_orchestrator/src/vds_elastic_orchestrator/errors.py +34 -0
  431. package/skills/vds-skill/runtime/elastic_orchestrator/src/vds_elastic_orchestrator/py.typed +0 -0
  432. package/skills/vds-skill/runtime/elastic_orchestrator/tests/__init__.py +0 -0
  433. package/skills/vds-skill/runtime/elastic_orchestrator/tests/conftest.py +227 -0
  434. package/skills/vds-skill/runtime/elastic_orchestrator/tests/test_client.py +990 -0
  435. package/skills/vds-skill/runtime/elastic_orchestrator/tests/test_config.py +268 -0
  436. package/skills/vds-skill/runtime/elastic_orchestrator/tests/test_e2e_verification.py +272 -0
  437. package/skills/vds-skill/runtime/elastic_orchestrator/tests/test_errors.py +78 -0
  438. package/skills/vds-skill/runtime/excel_orchestrator/README.md +288 -0
  439. package/skills/vds-skill/runtime/excel_orchestrator/RESEARCH_BASED_UPDATES_REPORT.md +261 -0
  440. package/skills/vds-skill/runtime/excel_orchestrator/add_essential_missing_effort.py +255 -0
  441. package/skills/vds-skill/runtime/excel_orchestrator/adjust_effort_complexity.py +184 -0
  442. package/skills/vds-skill/runtime/excel_orchestrator/brd_analysis_and_task_breakdown.py +632 -0
  443. package/skills/vds-skill/runtime/excel_orchestrator/brd_analysis_comprehensive.py +1029 -0
  444. package/skills/vds-skill/runtime/excel_orchestrator/check_overlaps_and_brd_coverage.py +570 -0
  445. package/skills/vds-skill/runtime/excel_orchestrator/clean_remarks_column.py +127 -0
  446. package/skills/vds-skill/runtime/excel_orchestrator/comprehensive_brd_check.py +322 -0
  447. package/skills/vds-skill/runtime/excel_orchestrator/create_buffered_summary.py +119 -0
  448. package/skills/vds-skill/runtime/excel_orchestrator/create_service_totals_sheet.py +118 -0
  449. package/skills/vds-skill/runtime/excel_orchestrator/examples/basic_operations.py +85 -0
  450. package/skills/vds-skill/runtime/excel_orchestrator/expand_all_tasks.py +341 -0
  451. package/skills/vds-skill/runtime/excel_orchestrator/expand_tasks.py +304 -0
  452. package/skills/vds-skill/runtime/excel_orchestrator/fill_brd_references.py +347 -0
  453. package/skills/vds-skill/runtime/excel_orchestrator/fill_remarks_and_colors.py +132 -0
  454. package/skills/vds-skill/runtime/excel_orchestrator/finalize_brd_and_cleanup.py +295 -0
  455. package/skills/vds-skill/runtime/excel_orchestrator/finalize_brd_coverage.py +327 -0
  456. package/skills/vds-skill/runtime/excel_orchestrator/fix_all_formulas.py +99 -0
  457. package/skills/vds-skill/runtime/excel_orchestrator/fix_detail_presentation.py +113 -0
  458. package/skills/vds-skill/runtime/excel_orchestrator/fix_presentation_and_effort.py +116 -0
  459. package/skills/vds-skill/runtime/excel_orchestrator/fix_presentation_consistency.py +231 -0
  460. package/skills/vds-skill/runtime/excel_orchestrator/fix_remarks_matching.py +179 -0
  461. package/skills/vds-skill/runtime/excel_orchestrator/group_tasks_by_service_id.py +210 -0
  462. package/skills/vds-skill/runtime/excel_orchestrator/increase_brd_coverage.py +497 -0
  463. package/skills/vds-skill/runtime/excel_orchestrator/increase_effort_complexity.py +155 -0
  464. package/skills/vds-skill/runtime/excel_orchestrator/organize_and_deduplicate.py +273 -0
  465. package/skills/vds-skill/runtime/excel_orchestrator/pyproject.toml +64 -0
  466. package/skills/vds-skill/runtime/excel_orchestrator/rebuild_all_formulas.py +146 -0
  467. package/skills/vds-skill/runtime/excel_orchestrator/remove_base_multiplier_and_check_duplicates.py +310 -0
  468. package/skills/vds-skill/runtime/excel_orchestrator/remove_duplicate_brd_tasks.py +137 -0
  469. package/skills/vds-skill/runtime/excel_orchestrator/research_based_updates.py +457 -0
  470. package/skills/vds-skill/runtime/excel_orchestrator/restore_e_values.py +172 -0
  471. package/skills/vds-skill/runtime/excel_orchestrator/src/vds_excel_orchestrator/__init__.py +5 -0
  472. package/skills/vds-skill/runtime/excel_orchestrator/src/vds_excel_orchestrator/cli.py +746 -0
  473. package/skills/vds-skill/runtime/excel_orchestrator/src/vds_excel_orchestrator/config.py +74 -0
  474. package/skills/vds-skill/runtime/excel_orchestrator/src/vds_excel_orchestrator/converters.py +226 -0
  475. package/skills/vds-skill/runtime/excel_orchestrator/src/vds_excel_orchestrator/errors.py +88 -0
  476. package/skills/vds-skill/runtime/excel_orchestrator/src/vds_excel_orchestrator/excel_client.py +443 -0
  477. package/skills/vds-skill/runtime/excel_orchestrator/src/vds_excel_orchestrator/formatters.py +211 -0
  478. package/skills/vds-skill/runtime/excel_orchestrator/src/vds_excel_orchestrator/logging.py +57 -0
  479. package/skills/vds-skill/runtime/excel_orchestrator/src/vds_excel_orchestrator/source_contract.py +29 -0
  480. package/skills/vds-skill/runtime/excel_orchestrator/src/vds_excel_orchestrator/target_state_status.py +837 -0
  481. package/skills/vds-skill/runtime/excel_orchestrator/src/vds_excel_orchestrator/ulnc_alignment.py +1291 -0
  482. package/skills/vds-skill/runtime/excel_orchestrator/src/vds_excel_orchestrator/validators.py +164 -0
  483. package/skills/vds-skill/runtime/excel_orchestrator/sync_detail_and_total_sheets.py +211 -0
  484. package/skills/vds-skill/runtime/excel_orchestrator/tests/__init__.py +1 -0
  485. package/skills/vds-skill/runtime/excel_orchestrator/tests/conftest.py +36 -0
  486. package/skills/vds-skill/runtime/excel_orchestrator/tests/test_cli.py +383 -0
  487. package/skills/vds-skill/runtime/excel_orchestrator/tests/test_excel_client.py +129 -0
  488. package/skills/vds-skill/runtime/excel_orchestrator/tests/test_ulnc_alignment.py +373 -0
  489. package/skills/vds-skill/runtime/excel_orchestrator/tests/test_validators.py +64 -0
  490. package/skills/vds-skill/runtime/excel_orchestrator/update_api_database_effort.py +261 -0
  491. package/skills/vds-skill/runtime/excel_orchestrator/update_buffers_inline.py +115 -0
  492. package/skills/vds-skill/runtime/excel_orchestrator/update_complex_services_and_add_new.py +336 -0
  493. package/skills/vds-skill/runtime/excel_orchestrator/update_responsibility_and_fix_rows.py +208 -0
  494. package/skills/vds-skill/runtime/excel_orchestrator/update_task_breakdown_vietnamese.py +309 -0
  495. package/skills/vds-skill/runtime/excel_orchestrator/update_vietnamese_and_responsibility.py +415 -0
  496. package/skills/vds-skill/runtime/excel_orchestrator/verify_brd_coverage_comprehensive.py +401 -0
  497. package/skills/vds-skill/runtime/git_orchestrator/ENHANCEMENT_SUMMARY.md +119 -0
  498. package/skills/vds-skill/runtime/git_orchestrator/README.md +286 -0
  499. package/skills/vds-skill/runtime/git_orchestrator/VERIFICATION_REPORT.md +152 -0
  500. package/skills/vds-skill/runtime/git_orchestrator/pyproject.toml +37 -0
  501. package/skills/vds-skill/runtime/git_orchestrator/src/vds_git_orchestrator/__init__.py +30 -0
  502. package/skills/vds-skill/runtime/git_orchestrator/src/vds_git_orchestrator/__main__.py +4 -0
  503. package/skills/vds-skill/runtime/git_orchestrator/src/vds_git_orchestrator/branch_probe.py +271 -0
  504. package/skills/vds-skill/runtime/git_orchestrator/src/vds_git_orchestrator/cli.py +892 -0
  505. package/skills/vds-skill/runtime/git_orchestrator/src/vds_git_orchestrator/logging_config.py +63 -0
  506. package/skills/vds-skill/runtime/git_orchestrator/src/vds_git_orchestrator/manifest.py +249 -0
  507. package/skills/vds-skill/runtime/git_orchestrator/src/vds_git_orchestrator/orchestrator.py +1647 -0
  508. package/skills/vds-skill/runtime/git_orchestrator/src/vds_git_orchestrator/protocols.py +35 -0
  509. package/skills/vds-skill/runtime/git_orchestrator/src/vds_git_orchestrator/reporting.py +55 -0
  510. package/skills/vds-skill/runtime/git_orchestrator/tests/__init__.py +0 -0
  511. package/skills/vds-skill/runtime/git_orchestrator/tests/test_cli_settings.py +19 -0
  512. package/skills/vds-skill/runtime/git_orchestrator/tests/test_integration.py +79 -0
  513. package/skills/vds-skill/runtime/git_orchestrator/tests/test_manifest.py +79 -0
  514. package/skills/vds-skill/runtime/git_orchestrator/tests/test_orchestrator.py +207 -0
  515. package/skills/vds-skill/runtime/git_orchestrator/tests/test_public_api.py +235 -0
  516. package/skills/vds-skill/runtime/git_orchestrator/tests/test_resilience.py +343 -0
  517. package/skills/vds-skill/runtime/git_orchestrator/tests/unit/__init__.py +0 -0
  518. package/skills/vds-skill/runtime/git_orchestrator/tests/unit/test_branch_probe.py +327 -0
  519. package/skills/vds-skill/runtime/git_orchestrator/tests/unit/test_protocols.py +132 -0
  520. package/skills/vds-skill/runtime/google_sheets_orchestrator/README.md +241 -0
  521. package/skills/vds-skill/runtime/google_sheets_orchestrator/pyproject.toml +45 -0
  522. package/skills/vds-skill/runtime/google_sheets_orchestrator/src/vds_google_sheets_orchestrator/__init__.py +69 -0
  523. package/skills/vds-skill/runtime/google_sheets_orchestrator/src/vds_google_sheets_orchestrator/cli.py +568 -0
  524. package/skills/vds-skill/runtime/google_sheets_orchestrator/src/vds_google_sheets_orchestrator/client.py +186 -0
  525. package/skills/vds-skill/runtime/google_sheets_orchestrator/src/vds_google_sheets_orchestrator/config.py +46 -0
  526. package/skills/vds-skill/runtime/google_sheets_orchestrator/src/vds_google_sheets_orchestrator/errors.py +41 -0
  527. package/skills/vds-skill/runtime/google_sheets_orchestrator/tests/__init__.py +1 -0
  528. package/skills/vds-skill/runtime/google_sheets_orchestrator/tests/conftest.py +1 -0
  529. package/skills/vds-skill/runtime/google_sheets_orchestrator/tests/unit/__init__.py +1 -0
  530. package/skills/vds-skill/runtime/google_sheets_orchestrator/tests/unit/test_cli.py +212 -0
  531. package/skills/vds-skill/runtime/google_sheets_orchestrator/tests/unit/test_client.py +24 -0
  532. package/skills/vds-skill/runtime/google_sheets_orchestrator/tests/unit/test_config.py +16 -0
  533. package/skills/vds-skill/runtime/grafana_orchestrator/README.md +572 -0
  534. package/skills/vds-skill/runtime/grafana_orchestrator/pyproject.toml +102 -0
  535. package/skills/vds-skill/runtime/grafana_orchestrator/src/vds_grafana_orchestrator/__init__.py +78 -0
  536. package/skills/vds-skill/runtime/grafana_orchestrator/src/vds_grafana_orchestrator/cli.py +455 -0
  537. package/skills/vds-skill/runtime/grafana_orchestrator/src/vds_grafana_orchestrator/client.py +700 -0
  538. package/skills/vds-skill/runtime/grafana_orchestrator/src/vds_grafana_orchestrator/config.py +243 -0
  539. package/skills/vds-skill/runtime/grafana_orchestrator/src/vds_grafana_orchestrator/errors.py +34 -0
  540. package/skills/vds-skill/runtime/grafana_orchestrator/src/vds_grafana_orchestrator/py.typed +1 -0
  541. package/skills/vds-skill/runtime/grafana_orchestrator/tests/__init__.py +1 -0
  542. package/skills/vds-skill/runtime/grafana_orchestrator/tests/conftest.py +308 -0
  543. package/skills/vds-skill/runtime/grafana_orchestrator/tests/test_client.py +458 -0
  544. package/skills/vds-skill/runtime/grafana_orchestrator/tests/test_config.py +203 -0
  545. package/skills/vds-skill/runtime/grafana_orchestrator/tests/test_errors.py +78 -0
  546. package/skills/vds-skill/runtime/jira_orchestrator/README.md +864 -0
  547. package/skills/vds-skill/runtime/jira_orchestrator/pyproject.toml +43 -0
  548. package/skills/vds-skill/runtime/jira_orchestrator/src/vds_jira_orchestrator/__init__.py +65 -0
  549. package/skills/vds-skill/runtime/jira_orchestrator/src/vds_jira_orchestrator/adapter.py +1685 -0
  550. package/skills/vds-skill/runtime/jira_orchestrator/src/vds_jira_orchestrator/cli.py +2806 -0
  551. package/skills/vds-skill/runtime/jira_orchestrator/src/vds_jira_orchestrator/config.py +168 -0
  552. package/skills/vds-skill/runtime/jira_orchestrator/src/vds_jira_orchestrator/errors.py +34 -0
  553. package/skills/vds-skill/runtime/jira_orchestrator/src/vds_jira_orchestrator/reporting.py +66 -0
  554. package/skills/vds-skill/runtime/jira_orchestrator/tests/__init__.py +1 -0
  555. package/skills/vds-skill/runtime/jira_orchestrator/tests/conftest.py +86 -0
  556. package/skills/vds-skill/runtime/jira_orchestrator/tests/test_adapter_agile_list_payloads.py +54 -0
  557. package/skills/vds-skill/runtime/jira_orchestrator/tests/test_adapter_bulk_operations.py +91 -0
  558. package/skills/vds-skill/runtime/jira_orchestrator/tests/test_adapter_components.py +56 -0
  559. package/skills/vds-skill/runtime/jira_orchestrator/tests/test_adapter_createmeta.py +45 -0
  560. package/skills/vds-skill/runtime/jira_orchestrator/tests/test_adapter_dashboard.py +119 -0
  561. package/skills/vds-skill/runtime/jira_orchestrator/tests/test_adapter_issue_properties.py +53 -0
  562. package/skills/vds-skill/runtime/jira_orchestrator/tests/test_adapter_permissions_compat.py +41 -0
  563. package/skills/vds-skill/runtime/jira_orchestrator/tests/test_adapter_reindex.py +42 -0
  564. package/skills/vds-skill/runtime/jira_orchestrator/tests/test_adapter_remote_links.py +75 -0
  565. package/skills/vds-skill/runtime/jira_orchestrator/tests/test_adapter_transitions.py +90 -0
  566. package/skills/vds-skill/runtime/jira_orchestrator/tests/test_adapter_user_management.py +116 -0
  567. package/skills/vds-skill/runtime/jira_orchestrator/tests/test_adapter_version_management.py +181 -0
  568. package/skills/vds-skill/runtime/jira_orchestrator/tests/test_adapter_watchers.py +43 -0
  569. package/skills/vds-skill/runtime/jira_orchestrator/tests/test_advanced_search.py +179 -0
  570. package/skills/vds-skill/runtime/jira_orchestrator/tests/test_agile.py +304 -0
  571. package/skills/vds-skill/runtime/jira_orchestrator/tests/test_application_properties.py +243 -0
  572. package/skills/vds-skill/runtime/jira_orchestrator/tests/test_backlog.py +91 -0
  573. package/skills/vds-skill/runtime/jira_orchestrator/tests/test_bulk_operations.py +403 -0
  574. package/skills/vds-skill/runtime/jira_orchestrator/tests/test_cli.py +108 -0
  575. package/skills/vds-skill/runtime/jira_orchestrator/tests/test_components.py +119 -0
  576. package/skills/vds-skill/runtime/jira_orchestrator/tests/test_config.py +166 -0
  577. package/skills/vds-skill/runtime/jira_orchestrator/tests/test_dashboard.py +122 -0
  578. package/skills/vds-skill/runtime/jira_orchestrator/tests/test_discover_fields.py +207 -0
  579. package/skills/vds-skill/runtime/jira_orchestrator/tests/test_errors.py +72 -0
  580. package/skills/vds-skill/runtime/jira_orchestrator/tests/test_filter_management.py +411 -0
  581. package/skills/vds-skill/runtime/jira_orchestrator/tests/test_issue_archiving.py +179 -0
  582. package/skills/vds-skill/runtime/jira_orchestrator/tests/test_issue_links.py +257 -0
  583. package/skills/vds-skill/runtime/jira_orchestrator/tests/test_issue_properties.py +189 -0
  584. package/skills/vds-skill/runtime/jira_orchestrator/tests/test_link_types.py +407 -0
  585. package/skills/vds-skill/runtime/jira_orchestrator/tests/test_parse_set.py +37 -0
  586. package/skills/vds-skill/runtime/jira_orchestrator/tests/test_permissions.py +343 -0
  587. package/skills/vds-skill/runtime/jira_orchestrator/tests/test_reindex.py +81 -0
  588. package/skills/vds-skill/runtime/jira_orchestrator/tests/test_remote_links.py +269 -0
  589. package/skills/vds-skill/runtime/jira_orchestrator/tests/test_security_schemes.py +202 -0
  590. package/skills/vds-skill/runtime/jira_orchestrator/tests/test_transitions_changelog.py +109 -0
  591. package/skills/vds-skill/runtime/jira_orchestrator/tests/test_user_management.py +246 -0
  592. package/skills/vds-skill/runtime/jira_orchestrator/tests/test_version_management.py +503 -0
  593. package/skills/vds-skill/runtime/jira_orchestrator/tests/test_watchers.py +116 -0
  594. package/skills/vds-skill/runtime/jira_orchestrator/tests/test_worklog.py +243 -0
  595. package/skills/vds-skill/runtime/jira_viettelmoney_orchestrator/README.md +864 -0
  596. package/skills/vds-skill/runtime/jira_viettelmoney_orchestrator/pyproject.toml +43 -0
  597. package/skills/vds-skill/runtime/jira_viettelmoney_orchestrator/src/vds_jira_viettelmoney_orchestrator/__init__.py +65 -0
  598. package/skills/vds-skill/runtime/jira_viettelmoney_orchestrator/src/vds_jira_viettelmoney_orchestrator/adapter.py +1689 -0
  599. package/skills/vds-skill/runtime/jira_viettelmoney_orchestrator/src/vds_jira_viettelmoney_orchestrator/cli.py +2799 -0
  600. package/skills/vds-skill/runtime/jira_viettelmoney_orchestrator/src/vds_jira_viettelmoney_orchestrator/config.py +135 -0
  601. package/skills/vds-skill/runtime/jira_viettelmoney_orchestrator/src/vds_jira_viettelmoney_orchestrator/errors.py +34 -0
  602. package/skills/vds-skill/runtime/jira_viettelmoney_orchestrator/src/vds_jira_viettelmoney_orchestrator/reporting.py +65 -0
  603. package/skills/vds-skill/runtime/jira_viettelmoney_orchestrator/tests/__init__.py +1 -0
  604. package/skills/vds-skill/runtime/jira_viettelmoney_orchestrator/tests/conftest.py +86 -0
  605. package/skills/vds-skill/runtime/jira_viettelmoney_orchestrator/tests/test_adapter_agile_list_payloads.py +54 -0
  606. package/skills/vds-skill/runtime/jira_viettelmoney_orchestrator/tests/test_adapter_bulk_operations.py +101 -0
  607. package/skills/vds-skill/runtime/jira_viettelmoney_orchestrator/tests/test_adapter_components.py +64 -0
  608. package/skills/vds-skill/runtime/jira_viettelmoney_orchestrator/tests/test_adapter_createmeta.py +45 -0
  609. package/skills/vds-skill/runtime/jira_viettelmoney_orchestrator/tests/test_adapter_dashboard.py +135 -0
  610. package/skills/vds-skill/runtime/jira_viettelmoney_orchestrator/tests/test_adapter_issue_properties.py +63 -0
  611. package/skills/vds-skill/runtime/jira_viettelmoney_orchestrator/tests/test_adapter_permissions_compat.py +42 -0
  612. package/skills/vds-skill/runtime/jira_viettelmoney_orchestrator/tests/test_adapter_reindex.py +42 -0
  613. package/skills/vds-skill/runtime/jira_viettelmoney_orchestrator/tests/test_adapter_remote_links.py +89 -0
  614. package/skills/vds-skill/runtime/jira_viettelmoney_orchestrator/tests/test_adapter_transitions.py +91 -0
  615. package/skills/vds-skill/runtime/jira_viettelmoney_orchestrator/tests/test_adapter_user_management.py +130 -0
  616. package/skills/vds-skill/runtime/jira_viettelmoney_orchestrator/tests/test_adapter_version_management.py +189 -0
  617. package/skills/vds-skill/runtime/jira_viettelmoney_orchestrator/tests/test_adapter_watchers.py +49 -0
  618. package/skills/vds-skill/runtime/jira_viettelmoney_orchestrator/tests/test_advanced_search.py +213 -0
  619. package/skills/vds-skill/runtime/jira_viettelmoney_orchestrator/tests/test_agile.py +334 -0
  620. package/skills/vds-skill/runtime/jira_viettelmoney_orchestrator/tests/test_application_properties.py +261 -0
  621. package/skills/vds-skill/runtime/jira_viettelmoney_orchestrator/tests/test_backlog.py +91 -0
  622. package/skills/vds-skill/runtime/jira_viettelmoney_orchestrator/tests/test_bulk_operations.py +443 -0
  623. package/skills/vds-skill/runtime/jira_viettelmoney_orchestrator/tests/test_cli.py +106 -0
  624. package/skills/vds-skill/runtime/jira_viettelmoney_orchestrator/tests/test_components.py +133 -0
  625. package/skills/vds-skill/runtime/jira_viettelmoney_orchestrator/tests/test_config.py +166 -0
  626. package/skills/vds-skill/runtime/jira_viettelmoney_orchestrator/tests/test_dashboard.py +130 -0
  627. package/skills/vds-skill/runtime/jira_viettelmoney_orchestrator/tests/test_discover_fields.py +207 -0
  628. package/skills/vds-skill/runtime/jira_viettelmoney_orchestrator/tests/test_errors.py +61 -0
  629. package/skills/vds-skill/runtime/jira_viettelmoney_orchestrator/tests/test_filter_management.py +478 -0
  630. package/skills/vds-skill/runtime/jira_viettelmoney_orchestrator/tests/test_issue_archiving.py +181 -0
  631. package/skills/vds-skill/runtime/jira_viettelmoney_orchestrator/tests/test_issue_links.py +257 -0
  632. package/skills/vds-skill/runtime/jira_viettelmoney_orchestrator/tests/test_issue_properties.py +203 -0
  633. package/skills/vds-skill/runtime/jira_viettelmoney_orchestrator/tests/test_link_types.py +426 -0
  634. package/skills/vds-skill/runtime/jira_viettelmoney_orchestrator/tests/test_parse_set.py +37 -0
  635. package/skills/vds-skill/runtime/jira_viettelmoney_orchestrator/tests/test_permissions.py +358 -0
  636. package/skills/vds-skill/runtime/jira_viettelmoney_orchestrator/tests/test_reindex.py +81 -0
  637. package/skills/vds-skill/runtime/jira_viettelmoney_orchestrator/tests/test_remote_links.py +292 -0
  638. package/skills/vds-skill/runtime/jira_viettelmoney_orchestrator/tests/test_security_schemes.py +218 -0
  639. package/skills/vds-skill/runtime/jira_viettelmoney_orchestrator/tests/test_transitions_changelog.py +121 -0
  640. package/skills/vds-skill/runtime/jira_viettelmoney_orchestrator/tests/test_user_management.py +283 -0
  641. package/skills/vds-skill/runtime/jira_viettelmoney_orchestrator/tests/test_version_management.py +561 -0
  642. package/skills/vds-skill/runtime/jira_viettelmoney_orchestrator/tests/test_watchers.py +128 -0
  643. package/skills/vds-skill/runtime/jira_viettelmoney_orchestrator/tests/test_worklog.py +265 -0
  644. package/skills/vds-skill/runtime/llms.txt +159 -0
  645. package/skills/vds-skill/runtime/markdown_orchestrator/README.md +72 -0
  646. package/skills/vds-skill/runtime/markdown_orchestrator/pyproject.toml +39 -0
  647. package/skills/vds-skill/runtime/markdown_orchestrator/src/vds_markdown_orchestrator/__init__.py +5 -0
  648. package/skills/vds-skill/runtime/markdown_orchestrator/src/vds_markdown_orchestrator/cli.py +102 -0
  649. package/skills/vds-skill/runtime/mcp_server/Dockerfile +63 -0
  650. package/skills/vds-skill/runtime/mcp_server/README.md +140 -0
  651. package/skills/vds-skill/runtime/mcp_server/pyproject.toml +41 -0
  652. package/skills/vds-skill/runtime/mcp_server/src/vds_mcp_server/__init__.py +3 -0
  653. package/skills/vds-skill/runtime/mcp_server/src/vds_mcp_server/config.py +36 -0
  654. package/skills/vds-skill/runtime/mcp_server/src/vds_mcp_server/server.py +111 -0
  655. package/skills/vds-skill/runtime/mcp_server/src/vds_mcp_server/tools/__init__.py +15 -0
  656. package/skills/vds-skill/runtime/mcp_server/src/vds_mcp_server/tools/bitbucket_tools.py +47 -0
  657. package/skills/vds-skill/runtime/mcp_server/src/vds_mcp_server/tools/confluence_tools.py +53 -0
  658. package/skills/vds-skill/runtime/mcp_server/src/vds_mcp_server/tools/git_tools.py +71 -0
  659. package/skills/vds-skill/runtime/mcp_server/src/vds_mcp_server/tools/jira_tools.py +63 -0
  660. package/skills/vds-skill/runtime/mcp_server/src/vds_mcp_server/tools/vidp_tools.py +64 -0
  661. package/skills/vds-skill/runtime/mcp_server/tests/__init__.py +1 -0
  662. package/skills/vds-skill/runtime/mcp_server/tests/conftest.py +31 -0
  663. package/skills/vds-skill/runtime/mcp_server/tests/unit/__init__.py +1 -0
  664. package/skills/vds-skill/runtime/mcp_server/tests/unit/test_bitbucket_tools.py +28 -0
  665. package/skills/vds-skill/runtime/mcp_server/tests/unit/test_confluence_tools.py +28 -0
  666. package/skills/vds-skill/runtime/mcp_server/tests/unit/test_git_tools.py +35 -0
  667. package/skills/vds-skill/runtime/mcp_server/tests/unit/test_jira_tools.py +35 -0
  668. package/skills/vds-skill/runtime/mcp_server/tests/verification/__init__.py +6 -0
  669. package/skills/vds-skill/runtime/mcp_server/tests/verification/conftest.py +51 -0
  670. package/skills/vds-skill/runtime/mcp_server/tests/verification/test_mcp_confluence_tools.py +40 -0
  671. package/skills/vds-skill/runtime/mcp_server/tests/verification/test_mcp_jira_tools.py +39 -0
  672. package/skills/vds-skill/runtime/mcp_server/tests/verification/test_mcp_tool_registration.py +50 -0
  673. package/skills/vds-skill/runtime/pdf_orchestrator/.dockerignore +93 -0
  674. package/skills/vds-skill/runtime/pdf_orchestrator/.env.example +40 -0
  675. package/skills/vds-skill/runtime/pdf_orchestrator/.ruff_rules.py +350 -0
  676. package/skills/vds-skill/runtime/pdf_orchestrator/.yamllint.yml +43 -0
  677. package/skills/vds-skill/runtime/pdf_orchestrator/DEVELOPMENT_PLAN.md +80 -0
  678. package/skills/vds-skill/runtime/pdf_orchestrator/Dockerfile +87 -0
  679. package/skills/vds-skill/runtime/pdf_orchestrator/README.md +608 -0
  680. package/skills/vds-skill/runtime/pdf_orchestrator/cli_verification_test/test.md +6 -0
  681. package/skills/vds-skill/runtime/pdf_orchestrator/cli_verification_test/test.pdf +0 -0
  682. package/skills/vds-skill/runtime/pdf_orchestrator/config/alertmanager.yml +83 -0
  683. package/skills/vds-skill/runtime/pdf_orchestrator/config/prometheus.prod.yml +98 -0
  684. package/skills/vds-skill/runtime/pdf_orchestrator/config/prometheus.yml +40 -0
  685. package/skills/vds-skill/runtime/pdf_orchestrator/config/redis.conf +78 -0
  686. package/skills/vds-skill/runtime/pdf_orchestrator/docs/COMPETITIVE_ANALYSIS_REPORT.md +309 -0
  687. package/skills/vds-skill/runtime/pdf_orchestrator/docs/FEATURES_GUIDE.md +518 -0
  688. package/skills/vds-skill/runtime/pdf_orchestrator/docs/MULTI_USER_DEPLOYMENT_GUIDE.md +615 -0
  689. package/skills/vds-skill/runtime/pdf_orchestrator/docs/USER_GUIDE.md +829 -0
  690. package/skills/vds-skill/runtime/pdf_orchestrator/pyproject.toml +87 -0
  691. package/skills/vds-skill/runtime/pdf_orchestrator/pytest.ini +71 -0
  692. package/skills/vds-skill/runtime/pdf_orchestrator/ruff.toml +6 -0
  693. package/skills/vds-skill/runtime/pdf_orchestrator/scripts/debug_security_report.py +59 -0
  694. package/skills/vds-skill/runtime/pdf_orchestrator/scripts/demo_library_selector.py +109 -0
  695. package/skills/vds-skill/runtime/pdf_orchestrator/scripts/generate_project_stats.py +52 -0
  696. package/skills/vds-skill/runtime/pdf_orchestrator/scripts/generate_styled_pdf.py +95 -0
  697. package/skills/vds-skill/runtime/pdf_orchestrator/scripts/migrate_render_pdfs.py +285 -0
  698. package/skills/vds-skill/runtime/pdf_orchestrator/scripts/setup_team.bat +283 -0
  699. package/skills/vds-skill/runtime/pdf_orchestrator/scripts/setup_team.sh +324 -0
  700. package/skills/vds-skill/runtime/pdf_orchestrator/src/vds_pdf_orchestrator/__init__.py +5 -0
  701. package/skills/vds-skill/runtime/pdf_orchestrator/src/vds_pdf_orchestrator/cli.py +542 -0
  702. package/skills/vds-skill/runtime/pdf_orchestrator/src/vds_pdf_orchestrator/config.py +33 -0
  703. package/skills/vds-skill/runtime/pdf_orchestrator/tests/README.md +650 -0
  704. package/skills/vds-skill/runtime/pdf_orchestrator/tests/__init__.py +0 -0
  705. package/skills/vds-skill/runtime/pdf_orchestrator/tests/conftest.py +520 -0
  706. package/skills/vds-skill/runtime/pdf_orchestrator/tests/requirements.txt +51 -0
  707. package/skills/vds-skill/runtime/pdf_orchestrator/tests/run_tests.py +659 -0
  708. package/skills/vds-skill/runtime/pdf_orchestrator/tests/test_config.py +36 -0
  709. package/skills/vds-skill/runtime/platform_core/pyproject.toml +49 -0
  710. package/skills/vds-skill/runtime/platform_core/src/vds_platform_core/__init__.py +16 -0
  711. package/skills/vds-skill/runtime/platform_core/src/vds_platform_core/alembic/__init__.py +18 -0
  712. package/skills/vds-skill/runtime/platform_core/src/vds_platform_core/alembic/runtime.py +139 -0
  713. package/skills/vds-skill/runtime/platform_core/src/vds_platform_core/config.py +88 -0
  714. package/skills/vds-skill/runtime/platform_core/src/vds_platform_core/credentials.py +40 -0
  715. package/skills/vds-skill/runtime/platform_core/src/vds_platform_core/env.py +24 -0
  716. package/skills/vds-skill/runtime/platform_core/src/vds_platform_core/errors.py +127 -0
  717. package/skills/vds-skill/runtime/platform_core/src/vds_platform_core/http/__init__.py +18 -0
  718. package/skills/vds-skill/runtime/platform_core/src/vds_platform_core/http/auth.py +32 -0
  719. package/skills/vds-skill/runtime/platform_core/src/vds_platform_core/http/errors.py +47 -0
  720. package/skills/vds-skill/runtime/platform_core/src/vds_platform_core/http/pagination.py +65 -0
  721. package/skills/vds-skill/runtime/platform_core/src/vds_platform_core/http/retry.py +62 -0
  722. package/skills/vds-skill/runtime/platform_core/src/vds_platform_core/http/stack.py +61 -0
  723. package/skills/vds-skill/runtime/platform_core/src/vds_platform_core/logging.py +132 -0
  724. package/skills/vds-skill/runtime/platform_core/src/vds_platform_core/protocols.py +77 -0
  725. package/skills/vds-skill/runtime/platform_core/src/vds_platform_core/serialization.py +80 -0
  726. package/skills/vds-skill/runtime/platform_core/src/vds_platform_core/severity.py +175 -0
  727. package/skills/vds-skill/runtime/platform_core/tests/__init__.py +0 -0
  728. package/skills/vds-skill/runtime/platform_core/tests/conftest.py +1 -0
  729. package/skills/vds-skill/runtime/platform_core/tests/test_alembic_runtime.py +300 -0
  730. package/skills/vds-skill/runtime/platform_core/tests/test_auth.py +84 -0
  731. package/skills/vds-skill/runtime/platform_core/tests/test_config.py +83 -0
  732. package/skills/vds-skill/runtime/platform_core/tests/test_credentials.py +73 -0
  733. package/skills/vds-skill/runtime/platform_core/tests/test_env.py +56 -0
  734. package/skills/vds-skill/runtime/platform_core/tests/test_errors.py +201 -0
  735. package/skills/vds-skill/runtime/platform_core/tests/test_errors_http.py +74 -0
  736. package/skills/vds-skill/runtime/platform_core/tests/test_http_settings.py +116 -0
  737. package/skills/vds-skill/runtime/platform_core/tests/test_logging.py +148 -0
  738. package/skills/vds-skill/runtime/platform_core/tests/test_pagination.py +153 -0
  739. package/skills/vds-skill/runtime/platform_core/tests/test_protocols.py +132 -0
  740. package/skills/vds-skill/runtime/platform_core/tests/test_retry.py +151 -0
  741. package/skills/vds-skill/runtime/platform_core/tests/test_serialization.py +92 -0
  742. package/skills/vds-skill/runtime/platform_core/tests/test_severity.py +178 -0
  743. package/skills/vds-skill/runtime/platform_core/tests/test_stack.py +130 -0
  744. package/skills/vds-skill/runtime/platform_core/uv.lock +341 -0
  745. package/skills/vds-skill/runtime/pyproject.toml +145 -0
  746. package/skills/vds-skill/runtime/pyrightconfig.json +82 -0
  747. package/skills/vds-skill/runtime/repo-manifest.yaml +380 -0
  748. package/skills/vds-skill/runtime/repo-manifest.yaml.example +25 -0
  749. package/skills/vds-skill/runtime/ruff.toml +100 -0
  750. package/skills/vds-skill/runtime/scripts/BRD-Validation-API.postman_collection.json +706 -0
  751. package/skills/vds-skill/runtime/scripts/BRD-Validation-README.md +308 -0
  752. package/skills/vds-skill/runtime/scripts/README.md +271 -0
  753. package/skills/vds-skill/runtime/scripts/_validate_alias_phase2.py +137 -0
  754. package/skills/vds-skill/runtime/scripts/audit-cli-patterns.sh +135 -0
  755. package/skills/vds-skill/runtime/scripts/audit-dashboard.sh +525 -0
  756. package/skills/vds-skill/runtime/scripts/backup.sh +123 -0
  757. package/skills/vds-skill/runtime/scripts/bootstrap_uv.sh +69 -0
  758. package/skills/vds-skill/runtime/scripts/brd-validation-environment.json +51 -0
  759. package/skills/vds-skill/runtime/scripts/brd-validation-test-results.json +13023 -0
  760. package/skills/vds-skill/runtime/scripts/brd_coverage_report.json +276 -0
  761. package/skills/vds-skill/runtime/scripts/check-future-annotations.py +22 -0
  762. package/skills/vds-skill/runtime/scripts/check-invalid-symlinks.py +183 -0
  763. package/skills/vds-skill/runtime/scripts/check-no-debug-markers.py +21 -0
  764. package/skills/vds-skill/runtime/scripts/check-no-unittest.py +21 -0
  765. package/skills/vds-skill/runtime/scripts/ci/assert_no_openspace_commits.sh +37 -0
  766. package/skills/vds-skill/runtime/scripts/ci/verify_branch_protection.sh +64 -0
  767. package/skills/vds-skill/runtime/scripts/closure/phase1_check.sh +483 -0
  768. package/skills/vds-skill/runtime/scripts/closure/phase2_check.sh +500 -0
  769. package/skills/vds-skill/runtime/scripts/create_memory_session.py +36 -0
  770. package/skills/vds-skill/runtime/scripts/deploy-bootstrap.sh +201 -0
  771. package/skills/vds-skill/runtime/scripts/deployment/load_docker_images_offline.sh +90 -0
  772. package/skills/vds-skill/runtime/scripts/dev/cli_smoke.sh +259 -0
  773. package/skills/vds-skill/runtime/scripts/final_completion_report.md +139 -0
  774. package/skills/vds-skill/runtime/scripts/folder_structure_report.json +321 -0
  775. package/skills/vds-skill/runtime/scripts/generate_completion_report.py +132 -0
  776. package/skills/vds-skill/runtime/scripts/generate_intellij_modules.py +154 -0
  777. package/skills/vds-skill/runtime/scripts/init-pgbouncer-userlist.sh +154 -0
  778. package/skills/vds-skill/runtime/scripts/link_integrity_report.json +807 -0
  779. package/skills/vds-skill/runtime/scripts/move_audit_artifact_pages.py +252 -0
  780. package/skills/vds-skill/runtime/scripts/move_audit_artifact_pages_rest.py +165 -0
  781. package/skills/vds-skill/runtime/scripts/move_wrong_dept_pages.py +235 -0
  782. package/skills/vds-skill/runtime/scripts/openspace_bootstrap.sh +56 -0
  783. package/skills/vds-skill/runtime/scripts/openspace_common.sh +75 -0
  784. package/skills/vds-skill/runtime/scripts/openspace_doctor.sh +61 -0
  785. package/skills/vds-skill/runtime/scripts/openspace_sync_shadow.sh +65 -0
  786. package/skills/vds-skill/runtime/scripts/phase7-baseline.sh +77 -0
  787. package/skills/vds-skill/runtime/scripts/preflight/env_check.sh +102 -0
  788. package/skills/vds-skill/runtime/scripts/repair_autopay_reports.sh +173 -0
  789. package/skills/vds-skill/runtime/scripts/rollback_drill.sh +659 -0
  790. package/skills/vds-skill/runtime/scripts/run-audit-in-tmux.sh +286 -0
  791. package/skills/vds-skill/runtime/scripts/run-department-audit.sh +495 -0
  792. package/skills/vds-skill/runtime/scripts/run-project-audit.sh +267 -0
  793. package/skills/vds-skill/runtime/scripts/save_intellij_memories.py +112 -0
  794. package/skills/vds-skill/runtime/scripts/save_memories_to_vds_ai.py +81 -0
  795. package/skills/vds-skill/runtime/scripts/save_memories_vds_style.py +133 -0
  796. package/skills/vds-skill/runtime/scripts/search_intellij_memories.py +48 -0
  797. package/skills/vds-skill/runtime/scripts/setup_intellij_workspace.py +71 -0
  798. package/skills/vds-skill/runtime/scripts/smoke-test-deploy.sh +137 -0
  799. package/skills/vds-skill/runtime/scripts/smoke_deploy_lib.py +205 -0
  800. package/skills/vds-skill/runtime/scripts/target-state-automation/README.md +89 -0
  801. package/skills/vds-skill/runtime/scripts/target-state-automation/confluence_sync_coordinator.sh +27 -0
  802. package/skills/vds-skill/runtime/scripts/target-state-automation/coordination.sh +114 -0
  803. package/skills/vds-skill/runtime/scripts/target-state-automation/diagram_coordinator.sh +25 -0
  804. package/skills/vds-skill/runtime/scripts/target-state-automation/docs_root.sh +22 -0
  805. package/skills/vds-skill/runtime/scripts/target-state-automation/generate_diagrams.sh +22 -0
  806. package/skills/vds-skill/runtime/scripts/target-state-automation/markdown_coordinator.sh +25 -0
  807. package/skills/vds-skill/runtime/scripts/target-state-automation/progress_dashboard.sh +17 -0
  808. package/skills/vds-skill/runtime/scripts/target-state-automation/schema_coordinator.sh +25 -0
  809. package/skills/vds-skill/runtime/scripts/target-state-automation/sync_confluence.sh +30 -0
  810. package/skills/vds-skill/runtime/scripts/target-state-automation/update_dependencies.sh +19 -0
  811. package/skills/vds-skill/runtime/scripts/target-state-automation/validate_links.sh +86 -0
  812. package/skills/vds-skill/runtime/scripts/target-state-automation/validate_markdown.sh +52 -0
  813. package/skills/vds-skill/runtime/scripts/target-state-automation/validate_schemas.sh +26 -0
  814. package/skills/vds-skill/runtime/scripts/target-state-automation/validate_structure.sh +98 -0
  815. package/skills/vds-skill/runtime/scripts/tests/__init__.py +1 -0
  816. package/skills/vds-skill/runtime/scripts/tests/test_dockerfile_correctness.py +815 -0
  817. package/skills/vds-skill/runtime/scripts/tests/test_makefile_loadouts.py +560 -0
  818. package/skills/vds-skill/runtime/scripts/tests/test_smoke_deploy.py +313 -0
  819. package/skills/vds-skill/runtime/scripts/tests/test_verify_alembic.py +581 -0
  820. package/skills/vds-skill/runtime/scripts/tests/test_verify_infra_topology.py +254 -0
  821. package/skills/vds-skill/runtime/scripts/update_modules_xml.py +194 -0
  822. package/skills/vds-skill/runtime/scripts/uv-workspace-alignment-verification-2026-03-25.md +128 -0
  823. package/skills/vds-skill/runtime/scripts/uv-workspace-alignment-verification-2026-04-18.md +100 -0
  824. package/skills/vds-skill/runtime/scripts/validate-cli-standardization.sh +188 -0
  825. package/skills/vds-skill/runtime/scripts/validate_brd_coverage.py +197 -0
  826. package/skills/vds-skill/runtime/scripts/validate_folder_structure.py +234 -0
  827. package/skills/vds-skill/runtime/scripts/validate_link_integrity.py +274 -0
  828. package/skills/vds-skill/runtime/scripts/vami017-caller-compat-report.md +62 -0
  829. package/skills/vds-skill/runtime/scripts/vami017-phase-b-scaffold-notes.md +79 -0
  830. package/skills/vds-skill/runtime/scripts/vds_sh_helpers.sh +180 -0
  831. package/skills/vds-skill/runtime/scripts/verification/phase2_portable_paths_ubuntu_docker.sh +26 -0
  832. package/skills/vds-skill/runtime/scripts/verify-infra-topology.py +868 -0
  833. package/skills/vds-skill/runtime/scripts/verify-memory-cli-e2e.sh +598 -0
  834. package/skills/vds-skill/runtime/scripts/verify-worktree-features.sh +306 -0
  835. package/skills/vds-skill/runtime/scripts/worktree-add.sh +128 -0
  836. package/skills/vds-skill/runtime/scripts/worktree-remove.sh +112 -0
  837. package/skills/vds-skill/runtime/scripts/worktree_compose.sh +269 -0
  838. package/skills/vds-skill/runtime/scripts/worktree_uv.sh +77 -0
  839. package/skills/vds-skill/runtime/sonarqube_orchestrator/IMPLEMENTATION_AUDIT.md +376 -0
  840. package/skills/vds-skill/runtime/sonarqube_orchestrator/README.md +507 -0
  841. package/skills/vds-skill/runtime/sonarqube_orchestrator/pyproject.toml +106 -0
  842. package/skills/vds-skill/runtime/sonarqube_orchestrator/scripts/ensure_symlink.sh +38 -0
  843. package/skills/vds-skill/runtime/sonarqube_orchestrator/src/vds_sonarqube_orchestrator/__init__.py +164 -0
  844. package/skills/vds-skill/runtime/sonarqube_orchestrator/src/vds_sonarqube_orchestrator/batch.py +212 -0
  845. package/skills/vds-skill/runtime/sonarqube_orchestrator/src/vds_sonarqube_orchestrator/cli.py +1407 -0
  846. package/skills/vds-skill/runtime/sonarqube_orchestrator/src/vds_sonarqube_orchestrator/client.py +608 -0
  847. package/skills/vds-skill/runtime/sonarqube_orchestrator/src/vds_sonarqube_orchestrator/config.py +260 -0
  848. package/skills/vds-skill/runtime/sonarqube_orchestrator/src/vds_sonarqube_orchestrator/diff.py +220 -0
  849. package/skills/vds-skill/runtime/sonarqube_orchestrator/src/vds_sonarqube_orchestrator/errors.py +34 -0
  850. package/skills/vds-skill/runtime/sonarqube_orchestrator/src/vds_sonarqube_orchestrator/external_sca.py +932 -0
  851. package/skills/vds-skill/runtime/sonarqube_orchestrator/src/vds_sonarqube_orchestrator/portfolio.py +225 -0
  852. package/skills/vds-skill/runtime/sonarqube_orchestrator/src/vds_sonarqube_orchestrator/pr.py +505 -0
  853. package/skills/vds-skill/runtime/sonarqube_orchestrator/src/vds_sonarqube_orchestrator/reports.py +342 -0
  854. package/skills/vds-skill/runtime/sonarqube_orchestrator/src/vds_sonarqube_orchestrator/scanner.py +351 -0
  855. package/skills/vds-skill/runtime/sonarqube_orchestrator/src/vds_sonarqube_orchestrator/webhooks.py +269 -0
  856. package/skills/vds-skill/runtime/sonarqube_orchestrator/tests/__init__.py +0 -0
  857. package/skills/vds-skill/runtime/sonarqube_orchestrator/tests/conftest.py +134 -0
  858. package/skills/vds-skill/runtime/sonarqube_orchestrator/tests/test_batch.py +419 -0
  859. package/skills/vds-skill/runtime/sonarqube_orchestrator/tests/test_config.py +145 -0
  860. package/skills/vds-skill/runtime/sonarqube_orchestrator/tests/test_errors.py +78 -0
  861. package/skills/vds-skill/runtime/sonarqube_orchestrator/tests/test_external_sca.py +466 -0
  862. package/skills/vds-skill/runtime/sonarqube_orchestrator/tests/test_pr.py +471 -0
  863. package/skills/vds-skill/runtime/sonarqube_orchestrator/tests/test_reports.py +511 -0
  864. package/skills/vds-skill/runtime/sonarqube_orchestrator/tests/test_webhooks.py +660 -0
  865. package/skills/vds-skill/runtime/uv.lock +5046 -0
  866. package/skills/vds-skill/runtime/vds_agent_core/CHANGELOG.md +36 -0
  867. package/skills/vds-skill/runtime/vds_agent_core/README.md +453 -0
  868. package/skills/vds-skill/runtime/vds_agent_core/docs/PHASE9A_ASSESSMENT.md +50 -0
  869. package/skills/vds-skill/runtime/vds_agent_core/docs/embedding.md +468 -0
  870. package/skills/vds-skill/runtime/vds_agent_core/pyproject.toml +51 -0
  871. package/skills/vds-skill/runtime/vds_agent_core/src/vds_agent_core/__init__.py +29 -0
  872. package/skills/vds-skill/runtime/vds_agent_core/src/vds_agent_core/agents/__init__.py +26 -0
  873. package/skills/vds-skill/runtime/vds_agent_core/src/vds_agent_core/agents/hooks.py +119 -0
  874. package/skills/vds-skill/runtime/vds_agent_core/src/vds_agent_core/agents/loop.py +864 -0
  875. package/skills/vds-skill/runtime/vds_agent_core/src/vds_agent_core/agents/tools.py +41 -0
  876. package/skills/vds-skill/runtime/vds_agent_core/src/vds_agent_core/config.py +252 -0
  877. package/skills/vds-skill/runtime/vds_agent_core/src/vds_agent_core/llm/__init__.py +55 -0
  878. package/skills/vds-skill/runtime/vds_agent_core/src/vds_agent_core/llm/_cascade.py +143 -0
  879. package/skills/vds-skill/runtime/vds_agent_core/src/vds_agent_core/llm/budget.py +353 -0
  880. package/skills/vds-skill/runtime/vds_agent_core/src/vds_agent_core/llm/cache.py +373 -0
  881. package/skills/vds-skill/runtime/vds_agent_core/src/vds_agent_core/llm/embedding.py +815 -0
  882. package/skills/vds-skill/runtime/vds_agent_core/src/vds_agent_core/llm/provider.py +173 -0
  883. package/skills/vds-skill/runtime/vds_agent_core/src/vds_agent_core/llm/schemas.py +45 -0
  884. package/skills/vds-skill/runtime/vds_agent_core/src/vds_agent_core/observability/__init__.py +77 -0
  885. package/skills/vds-skill/runtime/vds_agent_core/src/vds_agent_core/observability/decorators.py +258 -0
  886. package/skills/vds-skill/runtime/vds_agent_core/src/vds_agent_core/observability/jsonl_exporter.py +236 -0
  887. package/skills/vds-skill/runtime/vds_agent_core/src/vds_agent_core/observability/tracer.py +497 -0
  888. package/skills/vds-skill/runtime/vds_agent_core/src/vds_agent_core/profiles.py +2015 -0
  889. package/skills/vds-skill/runtime/vds_agent_core/src/vds_agent_core/runtime/__init__.py +0 -0
  890. package/skills/vds-skill/runtime/vds_agent_core/src/vds_agent_core/runtime/agent_id.py +60 -0
  891. package/skills/vds-skill/runtime/vds_agent_core/src/vds_agent_core/security/__init__.py +13 -0
  892. package/skills/vds-skill/runtime/vds_agent_core/src/vds_agent_core/security/credentials.py +106 -0
  893. package/skills/vds-skill/runtime/vds_agent_core/src/vds_agent_core/skills/__init__.py +1 -0
  894. package/skills/vds-skill/runtime/vds_agent_core/src/vds_agent_core/skills/executor.py +238 -0
  895. package/skills/vds-skill/runtime/vds_agent_core/src/vds_agent_core/skills/manager.py +381 -0
  896. package/skills/vds-skill/runtime/vds_agent_core/src/vds_agent_core/skills/policy.py +568 -0
  897. package/skills/vds-skill/runtime/vds_agent_core/src/vds_agent_core/workflows/__init__.py +19 -0
  898. package/skills/vds-skill/runtime/vds_agent_core/src/vds_agent_core/workflows/langgraph_runner.py +102 -0
  899. package/skills/vds-skill/runtime/vds_agent_core/src/vds_agent_core/workflows/protocols.py +81 -0
  900. package/skills/vds-skill/runtime/vds_agent_core/tests/__init__.py +0 -0
  901. package/skills/vds-skill/runtime/vds_agent_core/tests/conftest.py +62 -0
  902. package/skills/vds-skill/runtime/vds_agent_core/tests/integration/__init__.py +0 -0
  903. package/skills/vds-skill/runtime/vds_agent_core/tests/integration/test_audit_loop_hooks_integration.py +135 -0
  904. package/skills/vds-skill/runtime/vds_agent_core/tests/integration/test_audit_observability_integration.py +246 -0
  905. package/skills/vds-skill/runtime/vds_agent_core/tests/integration/test_public_api_stability.py +91 -0
  906. package/skills/vds-skill/runtime/vds_agent_core/tests/unit/__init__.py +0 -0
  907. package/skills/vds-skill/runtime/vds_agent_core/tests/unit/llm/__init__.py +0 -0
  908. package/skills/vds-skill/runtime/vds_agent_core/tests/unit/llm/test_call_site_parallelism.py +30 -0
  909. package/skills/vds-skill/runtime/vds_agent_core/tests/unit/llm/test_dimension_guardrail.py +25 -0
  910. package/skills/vds-skill/runtime/vds_agent_core/tests/unit/llm/test_drop_in_provider_extensibility.py +76 -0
  911. package/skills/vds-skill/runtime/vds_agent_core/tests/unit/llm/test_embedding.py +393 -0
  912. package/skills/vds-skill/runtime/vds_agent_core/tests/unit/llm/test_embedding_cache.py +302 -0
  913. package/skills/vds-skill/runtime/vds_agent_core/tests/unit/llm/test_embedding_extra.py +696 -0
  914. package/skills/vds-skill/runtime/vds_agent_core/tests/unit/llm/test_embedding_subclass.py +49 -0
  915. package/skills/vds-skill/runtime/vds_agent_core/tests/unit/llm/test_no_provider_leakage_in_env.py +34 -0
  916. package/skills/vds-skill/runtime/vds_agent_core/tests/unit/llm/test_provider_auto_route.py +48 -0
  917. package/skills/vds-skill/runtime/vds_agent_core/tests/unit/llm/test_runtime_log_clean.py +111 -0
  918. package/skills/vds-skill/runtime/vds_agent_core/tests/unit/llm/test_w7_logic_fixes.py +219 -0
  919. package/skills/vds-skill/runtime/vds_agent_core/tests/unit/profiles/__init__.py +0 -0
  920. package/skills/vds-skill/runtime/vds_agent_core/tests/unit/profiles/test_embedding_block_parser.py +194 -0
  921. package/skills/vds-skill/runtime/vds_agent_core/tests/unit/profiles/test_env_resolver_allowlist.py +141 -0
  922. package/skills/vds-skill/runtime/vds_agent_core/tests/unit/profiles/test_profile_authorization.py +158 -0
  923. package/skills/vds-skill/runtime/vds_agent_core/tests/unit/profiles/test_profiles_w3_extra.py +547 -0
  924. package/skills/vds-skill/runtime/vds_agent_core/tests/unit/profiles/test_real_audit_profile_compat.py +129 -0
  925. package/skills/vds-skill/runtime/vds_agent_core/tests/unit/runtime/__init__.py +0 -0
  926. package/skills/vds-skill/runtime/vds_agent_core/tests/unit/runtime/test_for_agent.py +322 -0
  927. package/skills/vds-skill/runtime/vds_agent_core/tests/unit/runtime/test_w9_cascade_edges.py +369 -0
  928. package/skills/vds-skill/runtime/vds_agent_core/tests/unit/security/__init__.py +0 -0
  929. package/skills/vds-skill/runtime/vds_agent_core/tests/unit/security/test_credentials.py +132 -0
  930. package/skills/vds-skill/runtime/vds_agent_core/tests/unit/test_agent_loop.py +663 -0
  931. package/skills/vds-skill/runtime/vds_agent_core/tests/unit/test_agent_loop_coverage.py +429 -0
  932. package/skills/vds-skill/runtime/vds_agent_core/tests/unit/test_agents_hooks_defaults.py +22 -0
  933. package/skills/vds-skill/runtime/vds_agent_core/tests/unit/test_budget.py +155 -0
  934. package/skills/vds-skill/runtime/vds_agent_core/tests/unit/test_budget_coverage.py +264 -0
  935. package/skills/vds-skill/runtime/vds_agent_core/tests/unit/test_budget_tracking_only.py +71 -0
  936. package/skills/vds-skill/runtime/vds_agent_core/tests/unit/test_cache.py +251 -0
  937. package/skills/vds-skill/runtime/vds_agent_core/tests/unit/test_cache_context.py +62 -0
  938. package/skills/vds-skill/runtime/vds_agent_core/tests/unit/test_config.py +155 -0
  939. package/skills/vds-skill/runtime/vds_agent_core/tests/unit/test_langgraph_runner.py +45 -0
  940. package/skills/vds-skill/runtime/vds_agent_core/tests/unit/test_langgraph_runner_coverage.py +98 -0
  941. package/skills/vds-skill/runtime/vds_agent_core/tests/unit/test_llm_cache_deep.py +113 -0
  942. package/skills/vds-skill/runtime/vds_agent_core/tests/unit/test_observability_decorators.py +697 -0
  943. package/skills/vds-skill/runtime/vds_agent_core/tests/unit/test_observability_hooks.py +217 -0
  944. package/skills/vds-skill/runtime/vds_agent_core/tests/unit/test_observability_jsonl_exporter.py +542 -0
  945. package/skills/vds-skill/runtime/vds_agent_core/tests/unit/test_observability_jsonl_wiring.py +313 -0
  946. package/skills/vds-skill/runtime/vds_agent_core/tests/unit/test_observability_tracer.py +896 -0
  947. package/skills/vds-skill/runtime/vds_agent_core/tests/unit/test_profiles.py +1571 -0
  948. package/skills/vds-skill/runtime/vds_agent_core/tests/unit/test_profiles_coverage.py +444 -0
  949. package/skills/vds-skill/runtime/vds_agent_core/tests/unit/test_provider.py +316 -0
  950. package/skills/vds-skill/runtime/vds_agent_core/tests/unit/test_schemas.py +63 -0
  951. package/skills/vds-skill/runtime/vds_agent_core/tests/unit/test_skill_executor.py +297 -0
  952. package/skills/vds-skill/runtime/vds_agent_core/tests/unit/test_skill_manager.py +370 -0
  953. package/skills/vds-skill/runtime/vds_agent_core/tests/unit/test_skill_manager_coverage.py +364 -0
  954. package/skills/vds-skill/runtime/vds_agent_core/tests/unit/test_skill_policy.py +402 -0
  955. package/skills/vds-skill/runtime/vds_agent_core/tests/unit/test_skill_rubric.py +47 -0
  956. package/skills/vds-skill/runtime/vds_agent_core/tests/unit/test_tools.py +51 -0
  957. package/skills/vds-skill/runtime/vds_agent_core/tests/unit/test_workflow_protocols.py +136 -0
  958. package/skills/vds-skill/runtime/vds_cli/README.md +201 -0
  959. package/skills/vds-skill/runtime/vds_cli/VERIFICATION_REPORT.md +41 -0
  960. package/skills/vds-skill/runtime/vds_cli/pyproject.toml +50 -0
  961. package/skills/vds-skill/runtime/vds_cli/src/vds_cli/__init__.py +3 -0
  962. package/skills/vds-skill/runtime/vds_cli/src/vds_cli/assets/git-credential-helper.py +235 -0
  963. package/skills/vds-skill/runtime/vds_cli/src/vds_cli/cli.py +1126 -0
  964. package/skills/vds-skill/runtime/vds_cli/src/vds_cli/commands/__init__.py +1 -0
  965. package/skills/vds-skill/runtime/vds_cli/src/vds_cli/commands/lint_cli.py +389 -0
  966. package/skills/vds-skill/runtime/vds_cli/src/vds_cli/confluence_sync.py +855 -0
  967. package/skills/vds-skill/runtime/vds_cli/src/vds_cli/docs/consumption/__init__.py +7 -0
  968. package/skills/vds-skill/runtime/vds_cli/src/vds_cli/docs/consumption/funnel.py +105 -0
  969. package/skills/vds-skill/runtime/vds_cli/src/vds_cli/docs/consumption/scanner.py +211 -0
  970. package/skills/vds-skill/runtime/vds_cli/src/vds_cli/docs/freshness/report.py +90 -0
  971. package/skills/vds-skill/runtime/vds_cli/src/vds_cli/docs/types.py +27 -0
  972. package/skills/vds-skill/runtime/vds_cli/src/vds_cli/docs_cmd.py +672 -0
  973. package/skills/vds-skill/runtime/vds_cli/src/vds_cli/docs_metrics.py +75 -0
  974. package/skills/vds-skill/runtime/vds_cli/src/vds_cli/docs_sync.py +1171 -0
  975. package/skills/vds-skill/runtime/vds_cli/src/vds_cli/ecosystem/__init__.py +39 -0
  976. package/skills/vds-skill/runtime/vds_cli/src/vds_cli/ecosystem/report.py +439 -0
  977. package/skills/vds-skill/runtime/vds_cli/src/vds_cli/ecosystem_docs.py +164 -0
  978. package/skills/vds-skill/runtime/vds_cli/src/vds_cli/env.py +111 -0
  979. package/skills/vds-skill/runtime/vds_cli/src/vds_cli/env_git_helper.py +281 -0
  980. package/skills/vds-skill/runtime/vds_cli/src/vds_cli/google_sheets_orchestrator/__init__.py +3 -0
  981. package/skills/vds-skill/runtime/vds_cli/src/vds_cli/google_sheets_orchestrator/google_sheets_orchestrator.py +173 -0
  982. package/skills/vds-skill/runtime/vds_cli/src/vds_cli/router.py +232 -0
  983. package/skills/vds-skill/runtime/vds_cli/src/vds_cli/skills_cmd.py +274 -0
  984. package/skills/vds-skill/runtime/vds_cli/src/vds_cli/sync_api.py +613 -0
  985. package/skills/vds-skill/runtime/vds_cli/src/vds_cli/sync_service.py +283 -0
  986. package/skills/vds-skill/runtime/vds_cli/tests/conftest.py +62 -0
  987. package/skills/vds-skill/runtime/vds_cli/tests/test_env_git_helper_lifecycle.py +261 -0
  988. package/skills/vds-skill/runtime/vds_cli/tests/test_git_credential_helper.py +240 -0
  989. package/skills/vds-skill/runtime/vds_cli/tests/test_router_help_proxy.py +43 -0
  990. package/skills/vds-skill/runtime/vds_cli/tests/unit/test_cli.py +241 -0
  991. package/skills/vds-skill/runtime/vds_cli/tests/unit/test_cli_DOC004.py +110 -0
  992. package/skills/vds-skill/runtime/vds_cli/tests/unit/test_confluence_sync.py +315 -0
  993. package/skills/vds-skill/runtime/vds_cli/tests/unit/test_confluence_sync_wave7.py +375 -0
  994. package/skills/vds-skill/runtime/vds_cli/tests/unit/test_consumption_funnel.py +106 -0
  995. package/skills/vds-skill/runtime/vds_cli/tests/unit/test_consumption_scanner.py +144 -0
  996. package/skills/vds-skill/runtime/vds_cli/tests/unit/test_docs_cmd.py +89 -0
  997. package/skills/vds-skill/runtime/vds_cli/tests/unit/test_docs_cmd_wave8.py +161 -0
  998. package/skills/vds-skill/runtime/vds_cli/tests/unit/test_docs_metrics.py +16 -0
  999. package/skills/vds-skill/runtime/vds_cli/tests/unit/test_docs_quality_score.py +61 -0
  1000. package/skills/vds-skill/runtime/vds_cli/tests/unit/test_docs_sync.py +417 -0
  1001. package/skills/vds-skill/runtime/vds_cli/tests/unit/test_ecosystem_cli_dashboard.py +667 -0
  1002. package/skills/vds-skill/runtime/vds_cli/tests/unit/test_ecosystem_cli_dashboard_rendering.py +143 -0
  1003. package/skills/vds-skill/runtime/vds_cli/tests/unit/test_ecosystem_docs.py +63 -0
  1004. package/skills/vds-skill/runtime/vds_cli/tests/unit/test_env.py +85 -0
  1005. package/skills/vds-skill/runtime/vds_cli/tests/unit/test_freshness_report.py +125 -0
  1006. package/skills/vds-skill/runtime/vds_cli/tests/unit/test_lint_cli.py +224 -0
  1007. package/skills/vds-skill/runtime/vds_cli/tests/unit/test_router.py +101 -0
  1008. package/skills/vds-skill/runtime/vds_cli/tests/unit/test_skills_cmd.py +419 -0
  1009. package/skills/vds-skill/runtime/vds_cli/tests/unit/test_sync_api.py +357 -0
  1010. package/skills/vds-skill/runtime/vds_cli/tests/unit/test_sync_service.py +170 -0
  1011. package/skills/vds-skill/runtime/vds_cli/tests/verification/conftest.py +51 -0
  1012. package/skills/vds-skill/runtime/vds_cli/tests/verification/test_bitbucket_real.py +32 -0
  1013. package/skills/vds-skill/runtime/vds_cli/tests/verification/test_confluence_real.py +32 -0
  1014. package/skills/vds-skill/runtime/vds_cli/tests/verification/test_jira_real.py +40 -0
  1015. package/skills/vds-skill/runtime/vds_cli_common/README.md +190 -0
  1016. package/skills/vds-skill/runtime/vds_cli_common/pyproject.toml +96 -0
  1017. package/skills/vds-skill/runtime/vds_cli_common/src/vds_cli_common/__init__.py +36 -0
  1018. package/skills/vds-skill/runtime/vds_cli_common/src/vds_cli_common/app.py +55 -0
  1019. package/skills/vds-skill/runtime/vds_cli_common/src/vds_cli_common/completers.py +139 -0
  1020. package/skills/vds-skill/runtime/vds_cli_common/src/vds_cli_common/context.py +201 -0
  1021. package/skills/vds-skill/runtime/vds_cli_common/src/vds_cli_common/env.py +163 -0
  1022. package/skills/vds-skill/runtime/vds_cli_common/src/vds_cli_common/errors.py +440 -0
  1023. package/skills/vds-skill/runtime/vds_cli_common/src/vds_cli_common/output.py +284 -0
  1024. package/skills/vds-skill/runtime/vds_cli_common/src/vds_cli_common/paths.py +78 -0
  1025. package/skills/vds-skill/runtime/vds_cli_common/src/vds_cli_common/testing.py +211 -0
  1026. package/skills/vds-skill/runtime/vds_cli_common/src/vds_cli_common/version.py +85 -0
  1027. package/skills/vds-skill/runtime/vds_cli_common/tests/__init__.py +0 -0
  1028. package/skills/vds-skill/runtime/vds_cli_common/tests/test_app.py +126 -0
  1029. package/skills/vds-skill/runtime/vds_cli_common/tests/test_completers.py +148 -0
  1030. package/skills/vds-skill/runtime/vds_cli_common/tests/test_context.py +192 -0
  1031. package/skills/vds-skill/runtime/vds_cli_common/tests/test_env.py +235 -0
  1032. package/skills/vds-skill/runtime/vds_cli_common/tests/test_errors.py +275 -0
  1033. package/skills/vds-skill/runtime/vds_cli_common/tests/test_output.py +229 -0
  1034. package/skills/vds-skill/runtime/vds_cli_common/tests/test_paths.py +61 -0
  1035. package/skills/vds-skill/runtime/vds_cli_common/tests/test_testing.py +138 -0
  1036. package/skills/vds-skill/runtime/vds_cli_common/tests/test_version.py +64 -0
  1037. package/skills/vds-skill/runtime/vidp_orchestrator/README.md +31 -0
  1038. package/skills/vds-skill/runtime/vidp_orchestrator/pyproject.toml +50 -0
  1039. package/skills/vds-skill/runtime/vidp_orchestrator/src/vds_vidp_orchestrator/__init__.py +26 -0
  1040. package/skills/vds-skill/runtime/vidp_orchestrator/src/vds_vidp_orchestrator/cli.py +246 -0
  1041. package/skills/vds-skill/runtime/vidp_orchestrator/src/vds_vidp_orchestrator/client.py +104 -0
  1042. package/skills/vds-skill/runtime/vidp_orchestrator/src/vds_vidp_orchestrator/config.py +82 -0
  1043. package/skills/vds-skill/runtime/vidp_orchestrator/src/vds_vidp_orchestrator/workflows.json +3 -0
  1044. package/skills/vds-skill/runtime/vidp_orchestrator/src/vds_vidp_orchestrator/workflows.py +130 -0
  1045. package/skills/vds-skill/vds-scripts-skill/SKILL.md +129 -0
  1046. package/skills/vds-skill/vds-scripts-skill/references/audit-commands.md +171 -0
  1047. package/skills/vds-skill/vds-scripts-skill/references/capability-index.md +34 -0
  1048. package/skills/vds-skill/vds-scripts-skill/references/development-commands.md +12 -0
  1049. package/skills/vds-skill/vds-scripts-skill/references/google-sheets.md +71 -0
  1050. package/skills/vds-skill/vds-scripts-skill/references/integration-commands.md +17 -0
  1051. package/skills/vds-skill/vds-scripts-skill/references/platform-bootstrap.md +25 -0
  1052. package/skills/vds-skill/vds-scripts-skill/references/specialist-routing.md +14 -0
  1053. package/skills/vds-skill/vds-scripts-skill/references/validation-commands.md +15 -0
@@ -0,0 +1,435 @@
1
+ {
2
+ "repo_path": "/Users/vds-ai/.vds/cache/repos/policy-project/cdcn-policy-data-processing-service",
3
+ "files": [
4
+ {
5
+ "file_path": "README.md",
6
+ "content": "# Câu lệnh insert bảng TRANS_DAILY_HIS_FINANCE DB Bankplus để test đẩy Kafka message\n\n```\nINSERT INTO BANKPLUS.TRANS_DAILY_HIS_FINANCE(TRANS_DAILY_HIS_FINANCE_ID,\n REQUEST_ID,\n REQUEST_DATE,\n PROCESS_CODE,\n SERVICE_CODE,\n PROCESS_NAME,\n REQUEST_MTI,\n REF_NO,\n AUDIT_NO,\n ACC_TYPE_NAME,\n MSISDN,\n VIETTEL_BANK_CODE,\n TRANS_AMOUNT,\n TRANS_AMOUNT_WORD,\n TRANS_FEE,\n TRANS_CONTENT,\n TRANS_STATUS,\n RESPONSE_DATE,\n RESPONSE_MTI,\n SRC_REQUEST_ID,\n SMS_ID,\n REQUEST_CONTENT,\n APP_ID,\n TELCO_CODE,\n MOBILE_ID,\n CUST_CORE_BANK_CODE,\n INSERT_DATE,\n ERROR_CODE)\nVALUES (SEQ_TRANS_DAILY_HIS_FINANCE_ID.nextval,\n 201126911676466,\n TO_DATE('2020-12-29 19:04:25', 'YYYY-MM-DD HH24:MI:SS'),\n '300001',\n null,\n 'Hoan tien giao dich ',\n '0400',\n null,\n '676466',\n 'Tài khoản KH cá nhân',\n '84385077993',\n 'MM',\n 30000,\n null,\n 2600,\n 'Goi ban tin revert giao dich tru tien MM 201126911676466',\n '0',\n TO_DATE('2020-11-26 19:04:24', 'YYYY-MM-DD HH24:MI:SS'),\n null,\n 201126765399480,\n null,\n '0|MTI|1400, 3|PROCESS CODE|678910, 4|TRANSACTION AMOUNT|3000000, 7|TRANSMISSION DATE/TIME|20201126190425, 11|SYSTEM TRACE AUDIT NUMBER|676466, 28|TRANSACTION FEE|2600, 32|TELCO CODE|BankPlus, 37|REFERENCE NUMBER|126911676466, 55|VIETTEL REQUEST ID|201126911676466, 60|MOBILE NUMBER|84385077993, 64|MESSAGE SIGNATURE|ABC123, 67|TRANSACTION INQUIRY TYPE|2, 83|DISCOUNT_AMOUNT BANK|000, 87|INTEREST TYPE|2, 92|ORINGINAL REQUEST ID|201126765399480, 100|VIETTEL BANK CODE|MM, 124|CONTENT DESCRIPTION SERVICE|Goi ban tin revert giao dich tru tien MM 201126911676466,',\n '4',\n 'BankPlus',\n 70584925,\n 'MM',\n TO_DATE('2020-11-26 19:04:24', 'YYYY-MM-DD HH24:MI:SS'),\n '00');\n```\n\n# Kafka consumer configs\nclass: org.apache.kafka.clients.consumer.ConsumerConfig\n\n# Kafka producer configs\nclass: org.apache.kafka.clients.producer.ProducerConfig\n\n# Spring Cloud Stream producer properties\nclass: org.springframework.cloud.stream.binder.ProducerProperties\n",
7
+ "truncated": false,
8
+ "original_lines": 69,
9
+ "original_bytes": 3310,
10
+ "priority": 1
11
+ },
12
+ {
13
+ "file_path": "Dockerfile",
14
+ "content": "FROM openjdk:8-jre-alpine\n\nWORKDIR /java-app\n\nCOPY dist/policy-data-processing-service-1.0-RELEASE.jar app.jar\n\nENTRYPOINT [\"java\",\"-jar\",\"/java-app/app.jar\"]",
15
+ "truncated": false,
16
+ "original_lines": 7,
17
+ "original_bytes": 158,
18
+ "priority": 3
19
+ },
20
+ {
21
+ "file_path": "pom.xml",
22
+ "content": "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n<project xmlns=\"http://maven.apache.org/POM/4.0.0\"\n xmlns:xsi=\"http://www.w3.org/2001/XMLSchema-instance\"\n xsi:schemaLocation=\"http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd\">\n <modelVersion>4.0.0</modelVersion>\n <parent>\n <groupId>vn.com.viettel.vds</groupId>\n <artifactId>java-spring-parent-pom</artifactId>\n <version>1.0-SNAPSHOT</version>\n </parent>\n <artifactId>policy-data-processing-service</artifactId>\n <version>1.0-RELEASE</version>\n <name>policy-data-processing-service</name>\n <description>Policy Data Processing Service</description>\n\n <properties>\n <java.version>1.8</java.version>\n <spring-cloud.version>Hoxton.SR4</spring-cloud.version>\n <springdoc.version>1.4.8</springdoc.version>\n <mariadb-java-client.version>2.4.3</mariadb-java-client.version>\n <mapstruct.version>1.3.1.Final</mapstruct.version>\n <hibernate.version>5.4.12.Final</hibernate.version>\n <newrelic.version>5.11.0</newrelic.version>\n <log4j2.version>2.23.1</log4j2.version>\n </properties>\n\n <dependencies>\n <!-- Web -->\n <dependency>\n <groupId>org.springframework.boot</groupId>\n <artifactId>spring-boot-starter-web</artifactId>\n <exclusions>\n <exclusion>\n <groupId>org.springframework.boot</groupId>\n <artifactId>spring-boot-starter-logging</artifactId>\n </exclusion>\n </exclusions>\n </dependency>\n <dependency>\n <groupId>org.springframework.boot</groupId>\n <artifactId>spring-boot-starter-log4j2</artifactId>\n </dependency>\n <dependency>\n <groupId>org.springframework.boot</groupId>\n <artifactId>spring-boot-starter-actuator</artifactId>\n </dependency>\n <dependency>\n <groupId>org.springframework.boot</groupId>\n <artifactId>spring-boot-devtools</artifactId>\n <scope>runtime</scope>\n <optional>true</optional>\n </dependency>\n <dependency>\n <groupId>org.springframework.boot</groupId>\n <artifactId>spring-boot-configuration-processor</artifactId>\n <optional>true</optional>\n </dependency>\n <dependency>\n <groupId>org.projectlombok</groupId>\n <artifactId>lombok</artifactId>\n <optional>true</optional>\n </dependency>\n <dependency>\n <groupId>com.fasterxml.jackson.datatype</groupId>\n <artifactId>jackson-datatype-hibernate5</artifactId>\n </dependency>\n <!-- Web -->\n\n <!-- Database -->\n <dependency>\n <groupId>org.mariadb.jdbc</groupId>\n <artifactId>mariadb-java-client</artifactId>\n <version>${mariadb-java-client.version}</version>\n </dependency>\n <dependency>\n <groupId>org.mapstruct</groupId>\n <artifactId>mapstruct</artifactId>\n <version>${mapstruct.version}</version>\n </dependency>\n <dependency>\n <groupId>org.springframework.boot</groupId>\n <artifactId>spring-boot-starter-data-jpa</artifactId>\n </dependency>\n <dependency>\n <groupId>org.hibernate</groupId>\n <artifactId>hibernate-envers</artifactId>\n <version>${hibernate.version}</version>\n </dependency>\n <!-- Database -->\n\n <!-- Cache -->\n <dependency>\n <groupId>org.springframework.boot</groupId>\n <artifactId>spring-boot-starter-cache</artifactId>\n </dependency>\n <!-- Cache -->\n\n <!-- Data migration -->\n <dependency>\n <groupId>org.liquibase</groupId>\n <artifactId>liquibase-core</artifactId>\n </dependency>\n <!-- Data migration -->\n\n <!-- Cloud config -->\n <dependency>\n <groupId>org.springframework.cloud</groupId>\n <artifactId>spring-cloud-starter-config</artifactId>\n </dependency>\n <!-- Cloud config -->\n\n <!-- Others -->\n <dependency>\n <groupId>org.springframework.cloud</groupId>\n <artifactId>spring-cloud-starter-sleuth</artifactId>\n </dependency>\n <dependency>\n <groupId>com.google.code.gson</groupId>\n <artifactId>gson</artifactId>\n <version>2.8.6</version>\n </dependency>\n <dependency>\n <groupId>org.apache.commons</groupId>\n <artifactId>commons-collections4</artifactId>\n <version>4.4</version>\n </dependency>\n\n <!-- Others -->\n\n <!-- Feign -->\n <dependency>\n <groupId>org.springframework.cloud</groupId>\n <artifactId>spring-cloud-starter-openfeign</artifactId>\n </dependency>\n <!-- Feign -->\n\n <!-- Cloud stream -->\n <dependency>\n <groupId>org.springframework.cloud</groupId>\n <artifactId>spring-cloud-stream</artifactId>\n </dependency>\n <dependency>\n <groupId>org.springframework.cloud</groupId>\n <artifactId>spring-cloud-stream-binder-kafka</artifactId>\n </dependency>\n <dependency>\n <groupId>org.springframework.kafka</groupId>\n <artifactId>spring-kafka</artifactId>\n </dependency>\n <!-- Cloud stream -->\n\n <!-- Redis -->\n <dependency>\n <groupId>org.redisson</groupId>\n <artifactId>redisson-spring-data-22</artifactId>\n <version>3.33.0</version>\n </dependency>\n <!-- Redis -->\n\n <!-- Redis -->\n <dependency>\n <groupId>org.springframework.boot</groupId>\n <artifactId>spring-boot-starter-data-redis</artifactId>\n </dependency>\n <!-- Redis -->\n\n <!-- Micrometer -->\n <dependency>\n <groupId>io.micrometer</groupId>\n <artifactId>micrometer-registry-prometheus</artifactId>\n </dependency>\n <!-- Micrometer -->\n\n <!-- Vault -->\n <dependency>\n <groupId>org.springframework.cloud</groupId>\n <artifactId>spring-cloud-starter-vault-config</artifactId>\n </dependency>\n <dependency>\n <groupId>org.springframework.cloud</groupId>\n <artifactId>spring-cloud-vault-config-databases</artifactId>\n </dependency>\n <!-- End Vault -->\n\n <!-- Springdoc -->\n <dependency>\n <groupId>org.springdoc</groupId>\n <artifactId>springdoc-openapi-ui</artifactId>\n <version>${springdoc.version}</version>\n </dependency>\n <!-- Springdoc -->\n\n <!-- log -->\n <dependency>\n <groupId>com.newrelic.agent.java</groupId>\n <artifactId>newrelic-api</artifactId>\n <version>${newrelic.version}</version>\n </dependency>\n <dependency>\n <groupId>org.zalando</groupId>\n <artifactId>logbook-spring-boot-starter</artifactId>\n <version>2.1.0</version>\n </dependency>\n <!-- log -->\n\n <!-- Test -->\n <dependency>\n <groupId>org.springframework.boot</groupId>\n <artifactId>spring-boot-starter-test</artifactId>\n <scope>test</scope>\n <exclusions>\n <exclusion>\n <groupId>org.junit.vintage</groupId>\n <artifactId>junit-vintage-engine</artifactId>\n </exclusion>\n </exclusions>\n </dependency>\n <dependency>\n <groupId>org.springframework.cloud</groupId>\n <artifactId>spring-cloud-stream-test-support</artifactId>\n <scope>test</scope>\n </dependency>\n <dependency>\n <groupId>org.springframework.cloud</groupId>\n <artifactId>spring-cloud-stream</artifactId>\n <type>test-jar</type>\n <scope>test</scope>\n <classifier>test-binder</classifier>\n </dependency>\n <!-- Test -->\n </dependencies>\n\n <dependencyManagement>\n <dependencies>\n <dependency>\n <groupId>org.springframework.cloud</groupId>\n <artifactId>spring-cloud-dependencies</artifactId>\n <version>${spring-cloud.version}</version>\n <type>pom</type>\n <scope>import</scope>\n </dependency>\n </dependencies>\n </dependencyManagement>\n\n <build>\n <plugins>\n <plugin>\n <groupId>org.springframework.boot</groupId>\n <artifactId>spring-boot-maven-plugin</artifactId>\n </plugin>\n <plugin>\n <groupId>org.apache.maven.plugins</groupId>\n <artifactId>maven-compiler-plugin</artifactId>\n <configuration>\n <source>${maven.compiler.source}</source> <!-- depending on your project -->\n <target>${maven.compiler.source}</target> <!-- depending on your project -->\n <annotationProcessorPaths>\n <path>\n <groupId>org.projectlombok</groupId>\n <artifactId>lombok</artifactId>\n <version>${lombok.version}</version>\n </path>\n <path>\n <groupId>org.mapstruct</groupId>\n <artifactId>mapstruct-processor</artifactId>\n <version>1.3.1.Final</version>\n </path>\n <!-- other annotation processors -->\n </annotationProcessorPaths>\n </configuration>\n </plugin>\n </plugins>\n </build>\n\n <profiles>\n <profile>\n <id>remove-resource</id>\n <build>\n <resources>\n <resource>\n <directory>src/main/resources</directory>\n <filtering>true</filtering>\n <includes>\n <include>db/**</include>\n <include>i18n/**</include>\n </includes>\n </resource>\n </resources>\n </build>\n </profile>\n </profiles>\n\n <repositories>\n <repository>\n <id>central</id>\n <url>http://nexus.digital.vn/repository/maven-snapshots</url>\n </repository>\n <repository>\n <id>central2</id>\n <url>http://nexus.digital.vn/repository/maven-public</url>\n </repository>\n </repositories>\n\n</project>\n",
23
+ "truncated": false,
24
+ "original_lines": 304,
25
+ "original_bytes": 9296,
26
+ "priority": 5
27
+ },
28
+ {
29
+ "file_path": "src/main/java/vn/com/viettel/vds/Main.java",
30
+ "content": "package vn.com.viettel.vds;\n\nimport org.springframework.boot.SpringApplication;\nimport org.springframework.boot.autoconfigure.SpringBootApplication;\n\n@SpringBootApplication\npublic class Main {\n\n public static void main(String[] args) {\n SpringApplication.run(Main.class);\n }\n}\n",
31
+ "truncated": false,
32
+ "original_lines": 12,
33
+ "original_bytes": 282,
34
+ "priority": 9
35
+ },
36
+ {
37
+ "file_path": "src/main/java/vn/com/viettel/vds/aop/RepositoryAspect.java",
38
+ "content": "package vn.com.viettel.vds.aop;\n\nimport lombok.extern.slf4j.Slf4j;\nimport org.aspectj.lang.ProceedingJoinPoint;\nimport org.aspectj.lang.annotation.Around;\nimport org.aspectj.lang.annotation.Aspect;\nimport org.springframework.beans.factory.annotation.Value;\nimport org.springframework.context.annotation.Configuration;\n\n/**\n * AOP for logging out slow queries\n *\n * @author thanhnd59\n */\n@Aspect\n@Configuration\n@Slf4j\npublic class RepositoryAspect {\n\n @Value(\"${application.repository.query-limit-warning-ms:1000}\")\n private int executionLimitMs;\n\n @Around(\"execution(* vn.com.viettel.vds.repository.*.*(..))\")\n public Object logExecutionTime(ProceedingJoinPoint joinPoint) throws Throwable {\n long start = System.currentTimeMillis();\n Object proceed = joinPoint.proceed();\n long executionTime = System.currentTimeMillis() - start;\n String message = joinPoint.getSignature() + \" exec in \" + executionTime + \" ms\";\n if (executionTime >= executionLimitMs) {\n log.warn(message + \" : SLOW QUERY\");\n }\n return proceed;\n }\n}\n",
39
+ "truncated": false,
40
+ "original_lines": 34,
41
+ "original_bytes": 1049,
42
+ "priority": 9
43
+ },
44
+ {
45
+ "file_path": "src/main/java/vn/com/viettel/vds/aop/ThreadContextAspect.java",
46
+ "content": "package vn.com.viettel.vds.aop;\n\nimport lombok.extern.log4j.Log4j2;\nimport org.aspectj.lang.ProceedingJoinPoint;\nimport org.aspectj.lang.annotation.Around;\nimport org.aspectj.lang.annotation.Aspect;\nimport org.aspectj.lang.reflect.MethodSignature;\nimport org.springframework.stereotype.Component;\nimport vn.com.viettel.vds.util.common.ThreadContextManage;\n\nimport java.lang.reflect.Method;\n\n@Aspect\n@Component\n@Log4j2\npublic class ThreadContextAspect {\n @Around(\"@annotation(ThreadLocalSpace)\")\n public Object processClearThreadLocalContext(ProceedingJoinPoint joinPoint) throws Throwable {\n try {\n return joinPoint.proceed();\n } catch (Exception e) {\n log.error(\"error process :\", e);\n throw e;\n } finally {\n if (this.isClearContext(joinPoint)) {\n ThreadContextManage.getInstance().clear();\n }\n }\n }\n\n private boolean isClearContext(ProceedingJoinPoint proceedingJoinPoint) {\n return this.getAnnotationThreadLocalSpaceOfMethod(proceedingJoinPoint).isClearContext();\n }\n\n private ThreadLocalSpace getAnnotationThreadLocalSpaceOfMethod(ProceedingJoinPoint proceedingJoinPoint) {\n MethodSignature methodSignature = (MethodSignature) proceedingJoinPoint.getSignature();\n Method method = methodSignature.getMethod();\n return method.getAnnotation(ThreadLocalSpace.class);\n }\n}\n",
47
+ "truncated": false,
48
+ "original_lines": 40,
49
+ "original_bytes": 1419,
50
+ "priority": 9
51
+ },
52
+ {
53
+ "file_path": "src/main/java/vn/com/viettel/vds/aop/ThreadLocalSpace.java",
54
+ "content": "package vn.com.viettel.vds.aop;\n\nimport java.lang.annotation.ElementType;\nimport java.lang.annotation.Retention;\nimport java.lang.annotation.RetentionPolicy;\nimport java.lang.annotation.Target;\n\n@Target(ElementType.METHOD)\n@Retention(RetentionPolicy.RUNTIME)\npublic @interface ThreadLocalSpace {\n boolean isClearContext() default true;\n}\n",
55
+ "truncated": false,
56
+ "original_lines": 12,
57
+ "original_bytes": 341,
58
+ "priority": 9
59
+ },
60
+ {
61
+ "file_path": "src/main/java/vn/com/viettel/vds/client/PolicyManagementServiceClient.java",
62
+ "content": "package vn.com.viettel.vds.client;\n\nimport org.springframework.cloud.openfeign.FeignClient;\nimport org.springframework.stereotype.Component;\nimport org.springframework.web.bind.annotation.*;\nimport vn.com.viettel.vds.domain.dto.CustomerPaymentLimitTransDTO;\nimport vn.com.viettel.vds.domain.input.AccumulatePolicyLimitDTO;\nimport vn.com.viettel.vds.domain.input.CustomerIncentiveAggregationDTO;\nimport vn.com.viettel.vds.domain.input.CustomerPaymentMessageDTO;\nimport vn.com.viettel.vds.domain.dto.GetPoliciesOutputDTO;\nimport vn.com.viettel.vds.domain.dto.PoliciesDataRespDTO;\nimport vn.com.viettel.vds.domain.output.*;\n\nimport java.util.List;\n\n@Component\n@FeignClient(url = \"${app.client.policy-management-service.url}\", name = \"policy-management-service\")\npublic interface PolicyManagementServiceClient {\n\n @GetMapping(\"public/v1/policies/fee/available-list\")\n GetPoliciesOutputDTO getAvailablePolicies(\n @RequestParam(value = \"process-code\") String processCode,\n @RequestParam(value = \"service-code\") String serviceCode,\n @RequestParam(value = \"transaction-date\") String date);\n\n @GetMapping(\"public/v1/sys-param-groups/{code}/params\")\n SysParamGroupDTO getSysParamGroups(@PathVariable(\"code\") String code);\n\n @GetMapping(\"public/v1/sys-param-groups/{code}/params/{paramCode}\")\n SysParamDTO getSysParam(@PathVariable(\"code\") String code,\n @PathVariable(\"paramCode\") String paramCode);\n\n @GetMapping(\"public/v1/policies/fee/upgrade/available-list\")\n GetPoliciesOutputDTO getAvailablePoliciesUpgrade(@RequestParam(value = \"process-code\") String processCode,\n @RequestParam(value = \"service-code\" ,required = false) String serviceCode,\n @RequestParam(value = \"money-source\" ,required = false) String moneySource,\n @RequestParam(value = \"transaction-date\") String date);\n\n @GetMapping(\"public/v1/customer-fees/get-conditions-by-id\")\n ConditionDetailPolicyDTO getConditionsById(@RequestParam(\"id\") Long id);\n\n @GetMapping(\"public/v1/policies/fee/upgrade/available-list-upgrade\")\n PoliciesDataRespDTO getAvailablePoliciesList(\n @RequestParam(value = \"process-code\") String processCode,\n @RequestParam(value = \"service-code\", required = false) String serviceCode,\n @RequestParam(value = \"transaction-date\") String transactionDate);\n\n @PostMapping(\"/public/v1/customer-fees/confirm-accumulate\")\n void confirmAccumulate(@RequestBody List<CustomerPaymentMessageDTO> listMsg);\n\n @PostMapping(\"/public/v1/customer-fees/accumulate-payment-limit\")\n Boolean accumulatePaymentLimit(@RequestBody List<CustomerPaymentMessageDTO> listMsg);\n\n @PostMapping(\"public/v1/policies/fee/upgrade/save-policies-cia\")\n void saveAvailablePolicyCIA(@RequestBody CustomerIncentiveAggregationDTO request);\n\n @PostMapping(\"/public/v1/payment-limit/availableListLimit\")\n List<AccumulatePolicyLimitDTO> availableListLimit(@RequestBody CustomerPaymentLimitTransDTO msg);\n\n @GetMapping(\"/public/v1/services/cache\")\n ServiceCacheDTO getService();\n}\n",
63
+ "truncated": false,
64
+ "original_lines": 62,
65
+ "original_bytes": 3132,
66
+ "priority": 9
67
+ },
68
+ {
69
+ "file_path": "src/main/java/vn/com/viettel/vds/config/AppConfig.java",
70
+ "content": "package vn.com.viettel.vds.config;\n\nimport java.util.ArrayList;\nimport java.util.List;\nimport java.util.TimeZone;\nimport javax.annotation.PostConstruct;\n\nimport lombok.Getter;\nimport org.springframework.beans.factory.annotation.Value;\nimport org.springframework.context.annotation.Bean;\nimport org.springframework.context.annotation.Configuration;\nimport org.springframework.web.filter.CharacterEncodingFilter;\nimport vn.com.viettel.vds.filter.message.AccumulationFilter;\nimport vn.com.viettel.vds.filter.message.CommonValidationFilter;\nimport vn.com.viettel.vds.filter.message.ServiceFilter;\nimport vn.com.viettel.vds.filter.message.TransDailyHisFinanceMessageFilter;\n\n@Configuration\n@Getter\npublic class AppConfig {\n\n /**\n * applicationShortName Type String\n */\n @Value(\"${application-short-name:policy-data-process}\")\n private String applicationShortName;\n\n @Value(\"${policy.redis-key}\")\n private String redisKey;\n\n @Value(\"${policy.redis-prefix-key:policy-payment-fee}\")\n private String redisPrefixKey;\n\n @Value(\"${app.cache.redisson.cacheExpirations.AccumulateLimit:90000}\")\n private long accumulateLimit;\n\n @Value(\"${app.cache.redisson.cacheExpirations.CustomerPaymentAccumulation:90000}\")\n private int customerPaymentAccumulation;\n\n @Value(\"${app.system:''}\")\n private String system;\n\n\n @PostConstruct\n void started() {\n TimeZone.setDefault(TimeZone.getTimeZone(\"Asia/Ho_Chi_Minh\"));\n }\n\n @Bean\n CharacterEncodingFilter characterEncodingFilter() {\n CharacterEncodingFilter filter = new CharacterEncodingFilter();\n filter.setEncoding(\"UTF-8\");\n filter.setForceEncoding(true);\n return filter;\n }\n\n @Bean\n List<TransDailyHisFinanceMessageFilter> transDailyHisFinanceMessageFilter(\n CommonValidationFilter commonValidationFilter, ServiceFilter serviceFilter,\n AccumulationFilter accumulationFilter) {\n //filter chain\n List<TransDailyHisFinanceMessageFilter> filters = new ArrayList<>();\n filters.add(commonValidationFilter);\n filters.add(serviceFilter);\n filters.add(accumulationFilter);\n return filters;\n }\n\n public String getLimitCode(String code, String transType) {\n if (\"VTM\".equals(system) && \"OUT\".equals(transType)) return code;\n return code.concat(\"_\".concat(transType));\n }\n}\n",
71
+ "truncated": false,
72
+ "original_lines": 73,
73
+ "original_bytes": 2266,
74
+ "priority": 9
75
+ },
76
+ {
77
+ "file_path": "src/main/java/vn/com/viettel/vds/config/AsyncConfiguration.java",
78
+ "content": "package vn.com.viettel.vds.config;\n\nimport org.springframework.beans.factory.annotation.Value;\nimport org.springframework.context.annotation.Bean;\nimport org.springframework.context.annotation.Configuration;\nimport org.springframework.core.task.TaskExecutor;\nimport org.springframework.scheduling.annotation.EnableAsync;\nimport org.springframework.scheduling.concurrent.ThreadPoolTaskExecutor;\n\n@Configuration\n@EnableAsync\npublic class AsyncConfiguration {\n @Value(\"20\")\n private int corePoolSize;\n\n @Value(\"50\")\n private int maxPoolSize;\n\n @Value(\"10000\")\n private int queueCapacity;\n\n @Bean(name = \"threadPoolTaskExecutor\")\n public TaskExecutor getAsyncExecutor() {\n return asyncExecutor(\"async-thread\");\n }\n\n public TaskExecutor asyncExecutor(String threadNamePrefix) {\n ThreadPoolTaskExecutor executor = new ThreadPoolTaskExecutor();\n executor.setCorePoolSize(corePoolSize);\n executor.setMaxPoolSize(maxPoolSize);\n executor.setQueueCapacity(queueCapacity);\n executor.setWaitForTasksToCompleteOnShutdown(true);\n executor.setThreadNamePrefix(threadNamePrefix);\n executor.initialize();\n return executor;\n }\n}\n",
79
+ "truncated": false,
80
+ "original_lines": 37,
81
+ "original_bytes": 1148,
82
+ "priority": 9
83
+ },
84
+ {
85
+ "file_path": "src/main/java/vn/com/viettel/vds/config/CustomIdGenerator.java",
86
+ "content": "package vn.com.viettel.vds.config;\n\nimport org.hibernate.engine.spi.SharedSessionContractImplementor;\nimport org.hibernate.id.IdentifierGenerator;\nimport vn.com.viettel.vds.util.ULIDUtil;\n\nimport java.io.Serializable;\n\npublic class CustomIdGenerator implements IdentifierGenerator {\n @Override\n public Serializable generate(SharedSessionContractImplementor sharedSessionContractImplementor, Object o) {\n return ULIDUtil.nextULID();\n }\n}\n",
87
+ "truncated": false,
88
+ "original_lines": 14,
89
+ "original_bytes": 453,
90
+ "priority": 9
91
+ },
92
+ {
93
+ "file_path": "src/main/java/vn/com/viettel/vds/config/FeignClientConfig.java",
94
+ "content": "package vn.com.viettel.vds.config;\n\nimport org.springframework.cloud.openfeign.EnableFeignClients;\nimport org.springframework.context.annotation.Configuration;\n\n@Configuration\n@EnableFeignClients(basePackages = \"vn.com.viettel.vds.client\")\npublic class FeignClientConfig {\n\n}\n",
95
+ "truncated": false,
96
+ "original_lines": 10,
97
+ "original_bytes": 276,
98
+ "priority": 9
99
+ },
100
+ {
101
+ "file_path": "src/main/java/vn/com/viettel/vds/config/JacksonConfig.java",
102
+ "content": "package vn.com.viettel.vds.config;\n\nimport com.fasterxml.jackson.annotation.JsonInclude;\nimport com.fasterxml.jackson.databind.DeserializationFeature;\nimport com.fasterxml.jackson.databind.MapperFeature;\nimport com.fasterxml.jackson.databind.Module;\nimport com.fasterxml.jackson.databind.ObjectMapper;\nimport com.fasterxml.jackson.databind.SerializationFeature;\nimport com.fasterxml.jackson.datatype.hibernate5.Hibernate5Module;\nimport com.fasterxml.jackson.datatype.jdk8.Jdk8Module;\nimport com.fasterxml.jackson.datatype.jsr310.JavaTimeModule;\nimport com.fasterxml.jackson.module.paramnames.ParameterNamesModule;\nimport lombok.Getter;\nimport org.springframework.context.annotation.Bean;\nimport org.springframework.context.annotation.Configuration;\n\n@Getter\n@Configuration\npublic class JacksonConfig {\n\n @Bean\n public Module module() {\n return new Hibernate5Module();\n }\n\n @Bean\n public ObjectMapper objectMapper() {\n ObjectMapper mapper = new ObjectMapper();\n mapper.configure(DeserializationFeature.FAIL_ON_UNKNOWN_PROPERTIES, false);\n mapper.configure(MapperFeature.DEFAULT_VIEW_INCLUSION, true);\n mapper.registerModule(new ParameterNamesModule())\n .registerModule(new Jdk8Module())\n .registerModule(new JavaTimeModule());\n mapper.disable(SerializationFeature.WRITE_DATES_AS_TIMESTAMPS);\n mapper.setSerializationInclusion(JsonInclude.Include.NON_NULL);\n return mapper;\n }\n}\n",
103
+ "truncated": false,
104
+ "original_lines": 38,
105
+ "original_bytes": 1429,
106
+ "priority": 9
107
+ },
108
+ {
109
+ "file_path": "src/main/java/vn/com/viettel/vds/config/LogBookConfig.java",
110
+ "content": "package vn.com.viettel.vds.config;\n\nimport java.util.List;\nimport org.springframework.beans.factory.annotation.Value;\nimport org.springframework.context.annotation.Bean;\nimport org.springframework.context.annotation.Configuration;\nimport org.zalando.logbook.BodyFilter;\nimport org.zalando.logbook.json.JacksonJsonFieldBodyFilter;\n\n@Configuration\npublic class LogBookConfig {\n\n List<String> filterResponseHeader;\n\n @Value(\"#{'${logbook.filter.body}'.split(',')}\")\n List<String> filterBody;\n\n @Bean\n BodyFilter bodyFilter() {\n return new JacksonJsonFieldBodyFilter(filterBody, \"******\");\n }\n}\n",
111
+ "truncated": false,
112
+ "original_lines": 22,
113
+ "original_bytes": 600,
114
+ "priority": 9
115
+ },
116
+ {
117
+ "file_path": "src/main/java/vn/com/viettel/vds/config/OpenApiConfig.java",
118
+ "content": "package vn.com.viettel.vds.config;\n\nimport io.swagger.v3.oas.models.Components;\nimport io.swagger.v3.oas.models.OpenAPI;\nimport io.swagger.v3.oas.models.info.Contact;\nimport io.swagger.v3.oas.models.info.Info;\nimport io.swagger.v3.oas.models.security.SecurityScheme;\nimport org.springframework.beans.factory.annotation.Value;\nimport org.springframework.context.annotation.Bean;\nimport org.springframework.context.annotation.Configuration;\n\n@Configuration\npublic class OpenApiConfig {\n\n @Value(\"${info.build.version}\")\n private String projectVersion;\n\n @Bean\n public OpenAPI customOpenAPI() {\n return new OpenAPI()\n .components(new Components()\n .addSecuritySchemes(\"bearer-key\", new SecurityScheme()\n .type(SecurityScheme.Type.HTTP)\n .scheme(\"bearer\")\n .bearerFormat(\"JWT\")))\n .info(new Info()\n .title(\"Policy Data Processing Service\")\n .description(\"Dịch vụ Xử lý dữ liệu\")\n .contact(new Contact()\n .name(\"CDCN\")\n .url(\"http://swagger.digital.vn/\"))\n .version(projectVersion));\n }\n}\n",
119
+ "truncated": false,
120
+ "original_lines": 34,
121
+ "original_bytes": 1147,
122
+ "priority": 9
123
+ },
124
+ {
125
+ "file_path": "src/main/java/vn/com/viettel/vds/config/auditor/JpaAuditConfig.java",
126
+ "content": "package vn.com.viettel.vds.config.auditor;\n\nimport java.util.Optional;\nimport org.apache.logging.log4j.ThreadContext;\nimport org.springframework.context.annotation.Bean;\nimport org.springframework.context.annotation.Configuration;\nimport org.springframework.data.domain.AuditorAware;\nimport org.springframework.data.jpa.repository.config.EnableJpaAuditing;\nimport vn.com.viettel.vds.constant.Constants;\n\n/**\n * Description class\n *\n * @author : HoangTD\n * @since : 10/31/2020, Sat\n **/\n@Configuration\n@EnableJpaAuditing(auditorAwareRef = \"auditProvider\")\npublic class JpaAuditConfig {\n\n @Bean\n public AuditorAware<String> auditProvider() {\n return () -> Optional.of(Optional.ofNullable(ThreadContext.get(Constants.ACTION_USER))\n .orElse(Constants.USER_DEFAULT));\n }\n}\n",
127
+ "truncated": false,
128
+ "original_lines": 26,
129
+ "original_bytes": 781,
130
+ "priority": 9
131
+ },
132
+ {
133
+ "file_path": "src/main/java/vn/com/viettel/vds/config/database/DatabaseLookup.java",
134
+ "content": "package vn.com.viettel.vds.config.database;\n\nimport java.util.Collections;\nimport java.util.EnumMap;\nimport java.util.Map;\nimport javax.sql.DataSource;\nimport org.apache.commons.logging.Log;\nimport org.apache.commons.logging.LogFactory;\nimport org.springframework.boot.jdbc.DatabaseDriver;\nimport org.springframework.jdbc.support.JdbcUtils;\nimport org.springframework.jdbc.support.MetaDataAccessException;\nimport org.springframework.orm.jpa.vendor.Database;\n\nfinal class DatabaseLookup {\n\n private static final Log logger = LogFactory.getLog(DatabaseLookup.class);\n\n private static final Map<DatabaseDriver, Database> LOOKUP;\n\n static {\n Map<DatabaseDriver, Database> map = new EnumMap<>(DatabaseDriver.class);\n map.put(DatabaseDriver.DERBY, Database.DERBY);\n map.put(DatabaseDriver.H2, Database.H2);\n map.put(DatabaseDriver.HSQLDB, Database.HSQL);\n map.put(DatabaseDriver.MYSQL, Database.MYSQL);\n map.put(DatabaseDriver.ORACLE, Database.ORACLE);\n map.put(DatabaseDriver.POSTGRESQL, Database.POSTGRESQL);\n map.put(DatabaseDriver.SQLSERVER, Database.SQL_SERVER);\n map.put(DatabaseDriver.DB2, Database.DB2);\n map.put(DatabaseDriver.INFORMIX, Database.INFORMIX);\n map.put(DatabaseDriver.HANA, Database.HANA);\n map.put(DatabaseDriver.MARIADB, Database.MYSQL);\n LOOKUP = Collections.unmodifiableMap(map);\n }\n\n private DatabaseLookup() {\n }\n\n /**\n * Return the most suitable {@link Database} for the given {@link DataSource}.\n *\n * @param dataSource the source {@link DataSource}\n * @return the most suitable {@link Database}\n */\n static Database getDatabase(DataSource dataSource) {\n if (dataSource == null) {\n return Database.DEFAULT;\n }\n try {\n String url = JdbcUtils.extractDatabaseMetaData(dataSource, \"getURL\");\n DatabaseDriver driver = DatabaseDriver.fromJdbcUrl(url);\n Database database = LOOKUP.get(driver);\n if (database != null) {\n return database;\n }\n } catch (MetaDataAccessException ex) {\n logger.warn(\"Unable to determine jdbc url from datasource\", ex);\n }\n return Database.DEFAULT;\n }\n\n}\n",
135
+ "truncated": false,
136
+ "original_lines": 62,
137
+ "original_bytes": 2116,
138
+ "priority": 9
139
+ },
140
+ {
141
+ "file_path": "src/main/java/vn/com/viettel/vds/config/database/MainDatabaseConfig.java",
142
+ "content": "package vn.com.viettel.vds.config.database;\n\nimport com.zaxxer.hikari.HikariDataSource;\nimport javax.persistence.EntityManagerFactory;\nimport javax.sql.DataSource;\nimport org.springframework.beans.factory.annotation.Autowired;\nimport org.springframework.beans.factory.annotation.Qualifier;\nimport org.springframework.boot.autoconfigure.condition.ConditionalOnProperty;\nimport org.springframework.boot.autoconfigure.jdbc.DataSourceProperties;\nimport org.springframework.boot.context.properties.ConfigurationProperties;\nimport org.springframework.boot.context.properties.EnableConfigurationProperties;\nimport org.springframework.boot.orm.jpa.EntityManagerFactoryBuilder;\nimport org.springframework.context.annotation.Bean;\nimport org.springframework.context.annotation.Configuration;\nimport org.springframework.context.annotation.Primary;\nimport org.springframework.core.env.Environment;\nimport org.springframework.data.jpa.repository.config.EnableJpaRepositories;\nimport org.springframework.orm.jpa.JpaTransactionManager;\nimport org.springframework.orm.jpa.LocalContainerEntityManagerFactoryBean;\nimport org.springframework.transaction.PlatformTransactionManager;\nimport org.springframework.transaction.annotation.EnableTransactionManagement;\n\n@Configuration\n@ConditionalOnProperty(value = \"app.datasource.main.enabled\", havingValue = \"true\", matchIfMissing = true)\n@EnableTransactionManagement\n@EnableJpaRepositories(\n entityManagerFactoryRef = \"mainEntityManagerFactory\",\n transactionManagerRef = \"mainTransactionManager\",\n basePackages = {\"vn.com.viettel.vds.repository.main\"})\n@EnableConfigurationProperties(MainJpaProperties.class)\npublic class MainDatabaseConfig {\n\n @Autowired\n private Environment env;\n\n @Bean\n @Primary\n @ConfigurationProperties(\"app.datasource.main\")\n public DataSourceProperties defaultDataSourceProperties() {\n return new DataSourceProperties();\n }\n\n @Primary\n @Bean(name = \"mainDataSource\")\n @ConfigurationProperties(prefix = \"app.datasource.main.hikari\")\n public DataSource dataSource() {\n return defaultDataSourceProperties().initializeDataSourceBuilder().type(HikariDataSource.class)\n .build();\n }\n\n @Primary\n @Bean(name = \"mainEntityManagerFactory\")\n public LocalContainerEntityManagerFactoryBean mainEntityManagerFactory(\n EntityManagerFactoryBuilder builder, @Qualifier(\"mainDataSource\") DataSource dataSource,\n MainJpaProperties mainJpaProperties) {\n LocalContainerEntityManagerFactoryBean factory = builder\n .dataSource(dataSource)\n .packages(\"vn.com.viettel.vds.model.main\")\n .persistenceUnit(\"dbMain\")\n .build();\n factory.setJpaPropertyMap(mainJpaProperties.getProperties());\n return factory;\n }\n\n @Primary\n @Bean(name = \"mainTransactionManager\")\n public PlatformTransactionManager mainTransactionManager(\n @Qualifier(\"mainEntityManagerFactory\") EntityManagerFactory entityManagerFactory) {\n return new JpaTransactionManager(entityManagerFactory);\n }\n\n}\n",
143
+ "truncated": false,
144
+ "original_lines": 72,
145
+ "original_bytes": 2989,
146
+ "priority": 9
147
+ },
148
+ {
149
+ "file_path": "src/main/java/vn/com/viettel/vds/config/database/MainJpaProperties.java",
150
+ "content": "package vn.com.viettel.vds.config.database;\n\nimport java.util.ArrayList;\nimport java.util.HashMap;\nimport java.util.List;\nimport java.util.Map;\nimport org.springframework.boot.context.properties.ConfigurationProperties;\nimport org.springframework.orm.jpa.vendor.Database;\n\n@ConfigurationProperties(prefix = \"app.datasource.main.jpa\")\npublic class MainJpaProperties {\n\n\t/**\n\t * Additional native properties to set on the JPA provider.\n\t */\n\tprivate Map<String, String> properties = new HashMap<>();\n\n\t/**\n\t * Mapping resources (equivalent to \"mapping-file\" entries in persistence.xml).\n\t */\n\tprivate final List<String> mappingResources = new ArrayList<>();\n\n\t/**\n\t * Name of the target database to operate on, auto-detected by default. Can be\n\t * alternatively set using the \"Database\" enum.\n\t */\n\tprivate String databasePlatform;\n\n\t/**\n\t * Target database to operate on, auto-detected by default. Can be alternatively set\n\t * using the \"databasePlatform\" property.\n\t */\n\tprivate Database database;\n\n\t/**\n\t * Whether to initialize the schema on startup.\n\t */\n\tprivate boolean generateDdl = false;\n\n\t/**\n\t * Whether to enable logging of SQL statements.\n\t */\n\tprivate boolean showSql = false;\n\n\t/**\n\t * Register OpenEntityManagerInViewInterceptor. Binds a JPA EntityManager to the\n\t * thread for the entire processing of the request.\n\t */\n\tprivate Boolean openInView;\n\n\tpublic Map<String, String> getProperties() {\n\t\treturn this.properties;\n\t}\n\n\tpublic void setProperties(Map<String, String> properties) {\n\t\tthis.properties = properties;\n\t}\n\n\tpublic List<String> getMappingResources() {\n\t\treturn this.mappingResources;\n\t}\n\n\tpublic String getDatabasePlatform() {\n\t\treturn this.databasePlatform;\n\t}\n\n\tpublic void setDatabasePlatform(String databasePlatform) {\n\t\tthis.databasePlatform = databasePlatform;\n\t}\n\n\tpublic Database getDatabase() {\n\t\treturn this.database;\n\t}\n\n\tpublic void setDatabase(Database database) {\n\t\tthis.database = database;\n\t}\n\n\tpublic boolean isGenerateDdl() {\n\t\treturn this.generateDdl;\n\t}\n\n\tpublic void setGenerateDdl(boolean generateDdl) {\n\t\tthis.generateDdl = generateDdl;\n\t}\n\n\tpublic boolean isShowSql() {\n\t\treturn this.showSql;\n\t}\n\n\tpublic void setShowSql(boolean showSql) {\n\t\tthis.showSql = showSql;\n\t}\n\n\tpublic Boolean getOpenInView() {\n\t\treturn this.openInView;\n\t}\n\n\tpublic void setOpenInView(Boolean openInView) {\n\t\tthis.openInView = openInView;\n\t}\n\n}\n",
151
+ "truncated": false,
152
+ "original_lines": 103,
153
+ "original_bytes": 2377,
154
+ "priority": 9
155
+ },
156
+ {
157
+ "file_path": "src/main/java/vn/com/viettel/vds/config/database/SecondDatabaseConfig.java",
158
+ "content": "package vn.com.viettel.vds.config.database;\n\nimport org.springframework.context.annotation.Configuration;\nimport org.springframework.data.redis.repository.configuration.EnableRedisRepositories;\n\n/*cache database*/\n\n@Configuration\n@EnableRedisRepositories(basePackages = {\"vn.com.viettel.vds.repository.secondary\"})\npublic class SecondDatabaseConfig {\n\n}\n",
159
+ "truncated": false,
160
+ "original_lines": 12,
161
+ "original_bytes": 354,
162
+ "priority": 9
163
+ },
164
+ {
165
+ "file_path": "src/main/java/vn/com/viettel/vds/config/formatdate/LocalDateTimeDeserializer.java",
166
+ "content": "package vn.com.viettel.vds.config.formatdate;\n\nimport com.fasterxml.jackson.core.JsonParser;\nimport com.fasterxml.jackson.databind.DeserializationContext;\nimport com.fasterxml.jackson.databind.JsonDeserializer;\nimport java.io.IOException;\nimport java.time.LocalDateTime;\nimport java.time.format.DateTimeParseException;\nimport lombok.extern.slf4j.Slf4j;\nimport vn.com.viettel.vds.util.common.DateTimeUtils;\n\n/**\n * Thực hiện parse data json request to localDateTime\n *\n * @author HoangTD5\n * @version 0.1\n * @date 8/26/2020\n */\n@Slf4j\npublic class LocalDateTimeDeserializer extends JsonDeserializer<LocalDateTime> {\n\n public static final String YYYY_MM_DD_HH_MM_SS = \"yyyy-MM-dd HH:mm:ss\";\n public static final String YYYY_MM_DD_T_HH_MM_SS = \"yyyy-MM-dd'T'HH:mm:ss\";\n public static final String YYYY_MM_DD_FULL = \"yyyy-MM-dd'T'HH:mm:ss.SSSZ\";\n\n @Override\n public LocalDateTime deserialize(JsonParser jsonParser,\n DeserializationContext deserializationContext) throws IOException {\n String str = jsonParser.getText();\n try {\n return DateTimeUtils.convertStringToLocalDateTime(str, YYYY_MM_DD_T_HH_MM_SS);\n } catch (DateTimeParseException e) {\n return deserialize(str);\n }\n }\n\n private LocalDateTime deserialize(String str) {\n try {\n return DateTimeUtils.convertStringToLocalDateTime(str, YYYY_MM_DD_HH_MM_SS);\n } catch (DateTimeParseException e) {\n return deserialize2(str);\n }\n }\n\n private LocalDateTime deserialize2(String str) {\n try {\n return DateTimeUtils.convertStringToLocalDateTime(str, YYYY_MM_DD_FULL);\n } catch (DateTimeParseException e) {\n return null;\n }\n }\n}\n",
167
+ "truncated": false,
168
+ "original_lines": 52,
169
+ "original_bytes": 1650,
170
+ "priority": 9
171
+ },
172
+ {
173
+ "file_path": "src/main/java/vn/com/viettel/vds/config/formatdate/LocalDateTimeSerializer.java",
174
+ "content": "package vn.com.viettel.vds.config.formatdate;\n\nimport com.fasterxml.jackson.core.JsonGenerator;\nimport com.fasterxml.jackson.databind.JsonSerializer;\nimport com.fasterxml.jackson.databind.SerializerProvider;\nimport java.io.IOException;\nimport java.time.LocalDateTime;\nimport java.time.format.DateTimeParseException;\nimport lombok.extern.slf4j.Slf4j;\nimport vn.com.viettel.vds.util.common.DateTimeUtils;\n\n/**\n * Thực hiện parse data response to string json\n *\n * @author HoangTD5\n * @version 0.1\n * @date 8/26/2020\n */\n@Slf4j\npublic class LocalDateTimeSerializer extends JsonSerializer<LocalDateTime> {\n\n public static final String YYYY_MM_DD_T_HH_MM_SS = \"yyyy-MM-dd'T'HH:mm:ss\";\n\n @Override\n public void serialize(LocalDateTime localDateTime, JsonGenerator jsonGenerator,\n SerializerProvider serializerProvider) throws IOException {\n try {\n String result = DateTimeUtils.localDateTimeToString(localDateTime, YYYY_MM_DD_T_HH_MM_SS);\n jsonGenerator.writeString(result);\n } catch (DateTimeParseException e) {\n log.error(e.getMessage(), e);\n jsonGenerator.writeString(\"\");\n }\n }\n}\n",
175
+ "truncated": false,
176
+ "original_lines": 35,
177
+ "original_bytes": 1120,
178
+ "priority": 9
179
+ },
180
+ {
181
+ "file_path": "src/main/java/vn/com/viettel/vds/config/kafka/KafkaConsumerConfig.java",
182
+ "content": "package vn.com.viettel.vds.config.kafka;\n\nimport org.apache.kafka.clients.consumer.ConsumerConfig;\nimport org.apache.kafka.common.serialization.StringDeserializer;\nimport org.springframework.boot.autoconfigure.condition.ConditionalOnProperty;\nimport org.springframework.boot.context.properties.EnableConfigurationProperties;\nimport org.springframework.context.annotation.Bean;\nimport org.springframework.context.annotation.Configuration;\nimport org.springframework.kafka.annotation.EnableKafka;\nimport org.springframework.kafka.config.ConcurrentKafkaListenerContainerFactory;\nimport org.springframework.kafka.core.ConsumerFactory;\nimport org.springframework.kafka.core.DefaultKafkaConsumerFactory;\nimport org.springframework.kafka.listener.ContainerProperties;\n\nimport java.util.HashMap;\nimport java.util.Map;\nimport java.util.Objects;\n\n@Configuration\n@EnableKafka\n@EnableConfigurationProperties(MultiKafkaProperties.class)\npublic class KafkaConsumerConfig {\n\n private final MultiKafkaProperties multiKafkaProperties;\n\n public KafkaConsumerConfig(MultiKafkaProperties multiKafkaProperties) {\n this.multiKafkaProperties = multiKafkaProperties;\n }\n\n /**\n * Cấu hình mặc định cho consumer\n */\n private Map<String, Object> defaultConsumerProps(MultiKafkaProperties.ConsumerConfig consumer) {\n Map<String, Object> props = new HashMap<>();\n\n // Deserialize\n props.put(ConsumerConfig.KEY_DESERIALIZER_CLASS_CONFIG, StringDeserializer.class);\n props.put(ConsumerConfig.VALUE_DESERIALIZER_CLASS_CONFIG, StringDeserializer.class);\n\n // Quản lý offset thủ công\n props.put(ConsumerConfig.ENABLE_AUTO_COMMIT_CONFIG, consumer.isEnableAutoCommit());\n props.put(ConsumerConfig.AUTO_OFFSET_RESET_CONFIG, consumer.getAutoOffsetReset());\n\n // Poll / heartbeat\n if (Objects.nonNull(consumer.getMaxPollIntervalMs())) {\n props.put(ConsumerConfig.MAX_POLL_INTERVAL_MS_CONFIG, consumer.getMaxPollIntervalMs());\n }\n if (Objects.nonNull(consumer.getMaxPollRecords())) {\n props.put(ConsumerConfig.MAX_POLL_RECORDS_CONFIG, consumer.getMaxPollRecords());\n }\n if (Objects.nonNull(consumer.getSessionTimeoutMs())) {\n props.put(ConsumerConfig.SESSION_TIMEOUT_MS_CONFIG, consumer.getSessionTimeoutMs());\n }\n if (Objects.nonNull(consumer.getHeartbeatIntervalMs())) {\n props.put(ConsumerConfig.HEARTBEAT_INTERVAL_MS_CONFIG, consumer.getHeartbeatIntervalMs());\n }\n\n // Retry network / reconnect\n if (Objects.nonNull(consumer.getReconnectBackoffMs())) {\n props.put(ConsumerConfig.RECONNECT_BACKOFF_MS_CONFIG, consumer.getReconnectBackoffMs());\n }\n if (Objects.nonNull(consumer.getReconnectBackoffMaxMs())) {\n props.put(ConsumerConfig.RECONNECT_BACKOFF_MAX_MS_CONFIG, consumer.getReconnectBackoffMaxMs());\n }\n if (Objects.nonNull(consumer.getRetryBackoffMs())) {\n props.put(ConsumerConfig.RETRY_BACKOFF_MS_CONFIG, consumer.getRetryBackoffMs());\n }\n\n // Tăng độ an toàn\n if (Objects.nonNull(consumer.getFetchMaxWaitMs())) {\n props.put(ConsumerConfig.FETCH_MAX_WAIT_MS_CONFIG, consumer.getFetchMaxWaitMs());\n }\n if (Objects.nonNull(consumer.getFetchMinBytes())) {\n props.put(ConsumerConfig.FETCH_MIN_BYTES_CONFIG, consumer.getFetchMinBytes());\n }\n\n return props;\n }\n\n /**\n * Build properties cho từng cluster\n */\n private Map<String, Object> buildConsumerProps(MultiKafkaProperties.ClusterConfig cluster) {\n\n Map<String, Object> props = new HashMap<>(defaultConsumerProps(cluster.getConsumer()));\n props.put(ConsumerConfig.BOOTSTRAP_SERVERS_CONFIG, cluster.getBootstrapServers());\n props.put(ConsumerConfig.GROUP_ID_CONFIG, cluster.getGroupId());\n if (cluster.getAuth() != null && cluster.getAuth().isEnabled()) {\n props.putAll(buildAuthProps(cluster.getAuth()));\n }\n return props;\n }\n\n /**\n * Build Auth nếu có\n */\n private Map<String, Object> buildAuthProps(MultiKafkaProperties.AuthConfig auth) {\n Map<String, Object> authProps = new HashMap<>();\n authProps.put(\"security.protocol\", auth.getProtocol());\n authProps.put(\"sasl.mechanism\", auth.getMechanism());\n authProps.put(\"sasl.jaas.config\",\n String.format(\"org.apache.kafka.common.security.plain.PlainLoginModule required username=\\\"%s\\\" password=\\\"%s\\\";\",\n auth.getUsername(), auth.getPassword()));\n return authProps;\n }\n\n /**\n * Build KafkaListener factory từ ConsumerFactory\n */\n private ConcurrentKafkaListenerContainerFactory<String, String> buildFactory(ConsumerFactory<String, String> consumerFactory, MultiKafkaProperties.ClusterConfig clusterConfig) {\n ConcurrentKafkaListenerContainerFactory<String, String> factory = new ConcurrentKafkaListenerContainerFactory<>();\n factory.setConsumerFactory(consumerFactory);\n if (Objects.nonNull(clusterConfig.getAckMode())) {\n factory.getContainerProperties().setAckMode(ContainerProperties.AckMode.RECORD);\n }\n return factory;\n }\n\n /**\n * Factory cluster policyService\n */\n @Bean\n @ConditionalOnProperty(name = \"spring.kafka.clusters.policyService.enabled\", havingValue = \"true\")\n public ConcurrentKafkaListenerContainerFactory<String, String> clusterPolicyFactory() {\n MultiKafkaProperties.ClusterConfig cluster = multiKafkaProperties.getClusters().get(\"policyService\");\n ConsumerFactory<String, String> consumerFactory = new DefaultKafkaConsumerFactory<>(buildConsumerProps(cluster));\n return buildFactory(consumerFactory, cluster);\n }\n\n /**\n * Factory cluster tranHis\n */\n @Bean\n @ConditionalOnProperty(name = \"spring.kafka.clusters.tranHis.enabled\", havingValue = \"true\")\n public ConcurrentKafkaListenerContainerFactory<String, String> clusterTranHisFactory() {\n MultiKafkaProperties.ClusterConfig cluster = multiKafkaProperties.getClusters().get(\"tranHis\");\n ConsumerFactory<String, String> consumerFactory = new DefaultKafkaConsumerFactory<>(buildConsumerProps(cluster));\n return buildFactory(consumerFactory, cluster);\n }\n}\n",
183
+ "truncated": false,
184
+ "original_lines": 140,
185
+ "original_bytes": 6369,
186
+ "priority": 9
187
+ },
188
+ {
189
+ "file_path": "src/main/java/vn/com/viettel/vds/config/kafka/MultiKafkaProperties.java",
190
+ "content": "package vn.com.viettel.vds.config.kafka;\n\nimport lombok.Data;\nimport org.springframework.boot.context.properties.ConfigurationProperties;\nimport org.springframework.stereotype.Component;\n\nimport java.util.HashMap;\nimport java.util.Map;\n\n@Component\n@ConfigurationProperties(prefix = \"spring.kafka\")\n@Data\npublic class MultiKafkaProperties {\n\n private Map<String, ClusterConfig> clusters = new HashMap<>();\n private String groupId;\n\n\n @Data\n public static class ClusterConfig {\n private boolean enabled;\n private String bootstrapServers;\n private String groupId;\n private AuthConfig auth;\n private ConsumerConfig consumer;\n private ProducerConfig producer;\n private String ackMode;\n }\n\n @Data\n public static class ConsumerConfig {\n private Map<String, TopicConfig> topics = new HashMap<>();\n private String autoOffsetReset;\n private boolean enableAutoCommit;\n private int maxPollIntervalMs;\n private int maxPollRecords;\n private int sessionTimeoutMs;\n private int heartbeatIntervalMs;\n private int reconnectBackoffMs;\n private int reconnectBackoffMaxMs;\n private int retryBackoffMs;\n private int fetchMaxWaitMs;\n private int fetchMinBytes;\n }\n\n @Data\n public static class ProducerConfig {\n private Map<String, TopicConfig> topics = new HashMap<>();\n }\n\n @Data\n public static class AuthConfig {\n private boolean enabled;\n private String protocol;\n private String mechanism;\n private String username;\n private String password;\n }\n\n @Data\n public static class TopicConfig {\n private String value;\n private boolean autoStartup;\n }\n}\n\n",
191
+ "truncated": false,
192
+ "original_lines": 66,
193
+ "original_bytes": 1768,
194
+ "priority": 9
195
+ },
196
+ {
197
+ "file_path": "src/main/java/vn/com/viettel/vds/config/locale/CustomLocaleResolver.java",
198
+ "content": "package vn.com.viettel.vds.config.locale;\n\nimport java.util.Arrays;\nimport java.util.List;\nimport java.util.Locale;\nimport javax.servlet.http.HttpServletRequest;\nimport org.springframework.context.annotation.Configuration;\nimport org.springframework.web.servlet.config.annotation.InterceptorRegistry;\nimport org.springframework.web.servlet.config.annotation.WebMvcConfigurer;\nimport org.springframework.web.servlet.i18n.AcceptHeaderLocaleResolver;\nimport org.springframework.web.servlet.i18n.LocaleChangeInterceptor;\n\n@Configuration\n@SuppressWarnings(\"java:S1874\")\npublic class CustomLocaleResolver\n extends AcceptHeaderLocaleResolver\n implements WebMvcConfigurer {\n\n private static final List<Locale> LOCALES = Arrays.asList(\n new Locale(\"en\"),\n new Locale(\"vi\"));\n\n @Override\n public Locale resolveLocale(HttpServletRequest request) {\n String headerLang = request.getHeader(\"Accept-Language\");\n return headerLang == null || headerLang.isEmpty()\n ? Locale.getDefault()\n : Locale.lookup(Locale.LanguageRange.parse(headerLang), LOCALES);\n }\n\n /**\n * @param registry\n */\n @Override\n public void addInterceptors(InterceptorRegistry registry) {\n LocaleChangeInterceptor localeChangeInterceptor = new LocaleChangeInterceptor();\n localeChangeInterceptor.setParamName(\"lang\");\n registry.addInterceptor(localeChangeInterceptor);\n }\n\n}\n",
199
+ "truncated": false,
200
+ "original_lines": 41,
201
+ "original_bytes": 1384,
202
+ "priority": 9
203
+ },
204
+ {
205
+ "file_path": "src/main/java/vn/com/viettel/vds/config/redis/RedisCacheErrorHandler.java",
206
+ "content": "package vn.com.viettel.vds.config.redis;\n\nimport lombok.extern.slf4j.Slf4j;\nimport org.springframework.cache.Cache;\nimport org.springframework.cache.interceptor.CacheErrorHandler;\n\n/**\n * @author SonNV41\n * @version v1\n * @date 4/22/2022\n */\n@Slf4j\npublic class RedisCacheErrorHandler implements CacheErrorHandler {\n\n @Override\n public void handleCacheGetError(RuntimeException exception, Cache cache, Object key) {\n handleTimeOutException(exception);\n log.info(\"Unable to get into cache {}:{}\", cache.getName(), exception.getMessage());\n }\n\n @Override\n public void handleCachePutError(\n RuntimeException exception, Cache cache, Object key, Object value) {\n handleTimeOutException(exception);\n log.info(\"Unable to put into cache {}:{}\", cache.getName(), exception.getMessage());\n }\n\n @Override\n public void handleCacheEvictError(RuntimeException exception, Cache cache, Object key) {\n handleTimeOutException(exception);\n log.info(\"Unable to evict cache {}:{}:{}\", cache.getName(), key, exception.getMessage());\n }\n\n @Override\n public void handleCacheClearError(RuntimeException exception, Cache cache) {\n handleTimeOutException(exception);\n log.info(\"Unable to clean cache {}:{}\", cache.getName(), exception.getMessage());\n }\n\n /**\n * We handle redis connection timeout exception , if the exception is handled then it is treated\n * as a cache miss and gets the data from actual storage\n *\n * @param e\n */\n private void handleTimeOutException(RuntimeException e) {\n log.error(e.getMessage(), e);\n }\n}\n",
207
+ "truncated": false,
208
+ "original_lines": 49,
209
+ "original_bytes": 1635,
210
+ "priority": 9
211
+ },
212
+ {
213
+ "file_path": "src/main/java/vn/com/viettel/vds/config/redis/RedissonCacheConfig.java",
214
+ "content": "package vn.com.viettel.vds.config.redis;\n\nimport lombok.extern.slf4j.Slf4j;\nimport org.apache.commons.lang3.StringUtils;\nimport org.redisson.Redisson;\nimport org.redisson.api.RedissonClient;\nimport org.redisson.config.Config;\nimport org.redisson.spring.data.connection.RedissonConnectionFactory;\nimport org.springframework.beans.factory.annotation.Value;\nimport org.springframework.boot.autoconfigure.condition.ConditionalOnProperty;\nimport org.springframework.boot.context.properties.EnableConfigurationProperties;\nimport org.springframework.cache.CacheManager;\nimport org.springframework.cache.annotation.CachingConfigurerSupport;\nimport org.springframework.cache.annotation.EnableCaching;\nimport org.springframework.cache.interceptor.CacheErrorHandler;\nimport org.springframework.context.annotation.Bean;\nimport org.springframework.context.annotation.Configuration;\nimport org.springframework.data.redis.cache.RedisCacheConfiguration;\nimport org.springframework.data.redis.cache.RedisCacheManager;\nimport org.springframework.data.redis.core.RedisTemplate;\nimport org.springframework.data.redis.serializer.JdkSerializationRedisSerializer;\nimport org.springframework.data.redis.serializer.RedisSerializationContext.SerializationPair;\nimport org.springframework.data.redis.serializer.RedisSerializer;\nimport vn.com.viettel.vds.constant.Constants;\n\nimport java.time.Duration;\nimport java.util.Arrays;\nimport java.util.HashMap;\nimport java.util.Map;\n\n/**\n * @author SonNV41\n * @version v1\n * @date 4/22/2022\n */\n@Configuration\n@EnableCaching\n@ConditionalOnProperty(value = \"app.cache.redisson.enable\", havingValue = \"true\")\n@EnableConfigurationProperties(RedissonClusterConfigurationProperties.class)\n@Slf4j\npublic class RedissonCacheConfig extends CachingConfigurerSupport {\n\n @Value(\"${app.cache.redisson.clientName}\")\n private String applicationShortName;\n\n public SerializationPair<Object> getJdkSerialization() {\n ClassLoader loader = Thread.currentThread().getContextClassLoader();\n JdkSerializationRedisSerializer jdkSerializer = new JdkSerializationRedisSerializer(loader);\n return SerializationPair.fromSerializer(jdkSerializer);\n }\n\n public RedisCacheConfiguration createDefaultCacheConfiguration(long ttl) {\n return RedisCacheConfiguration.defaultCacheConfig()\n .serializeValuesWith(getJdkSerialization())\n .computePrefixWith(cacheName -> {\n String prefix = applicationShortName + \"::\";\n if (!StringUtils.isEmpty(cacheName)) {\n prefix += cacheName + \"::\";\n }\n return prefix;\n })\n .entryTtl(Duration.ofMillis(ttl));\n }\n\n @Bean(\"redisStringTemplate\")\n public RedisTemplate<String, String> redisStringTemplate(RedissonConnectionFactory cf) {\n RedisTemplate<String, String> redisTemplate = new RedisTemplate<>();\n redisTemplate.setKeySerializer(RedisSerializer.string());\n redisTemplate.setHashKeySerializer(RedisSerializer.string());\n redisTemplate.setConnectionFactory(cf);\n return redisTemplate;\n }\n\n @Bean(\"redisObjectTemplate\")\n public RedisTemplate<String, Object> redisTemplate(RedissonConnectionFactory cf) {\n RedisTemplate<String, Object> redisTemplate = new RedisTemplate<>();\n redisTemplate.setKeySerializer(RedisSerializer.string());\n redisTemplate.setHashKeySerializer(RedisSerializer.string());\n redisTemplate.setConnectionFactory(cf);\n return redisTemplate;\n }\n\n @Bean(destroyMethod = \"shutdown\")\n public RedissonClient redisson(\n RedissonClusterConfigurationProperties prop) {\n Config config = new Config();\n config.useClusterServers()\n .setCheckSlotsCoverage(prop.isCheckSlotsCoverage())\n .setIdleConnectionTimeout(prop.getIdleConnectTimeout())\n .setConnectTimeout(prop.getConnectTimeout())\n .setTimeout(prop.getTimeout())\n .setRetryAttempts(prop.getRetryAttempts())\n .setRetryInterval(prop.getRetryInterval())\n .setFailedSlaveReconnectionInterval(prop.getFailedSlaveReconnectionInterval())\n .setFailedSlaveCheckInterval(prop.getFailedSlaveCheckInterval())\n .setSubscriptionsPerConnection(prop.getSubscriptionsPerConnection())\n .setClientName(prop.getClientName())\n .setSubscriptionConnectionPoolSize(prop.getSubscriptionConnectionPoolSize())\n .setSlaveConnectionMinimumIdleSize(prop.getSlaveConnectionMinimumIdleSize())\n .setSlaveConnectionPoolSize(prop.getSlaveConnectionPoolSize())\n .setMasterConnectionMinimumIdleSize(prop.getMasterConnectionMinimumIdleSize())\n .setMasterConnectionPoolSize(prop.getMasterConnectionPoolSize())\n .setScanInterval(prop.getScanInterval())\n .setPingConnectionInterval(prop.getPingConnectionInterval())\n .setKeepAlive(prop.isKeepAlive())\n .setTcpNoDelay(prop.isTcpNoDelay())\n .setNodeAddresses(Arrays.asList(prop.getNodeAddresses().split(\",\")));\n if (StringUtils.isNotBlank(prop.getPassword())) {\n config.useClusterServers().setPassword(prop.getPassword());\n }\n return Redisson.create(config);\n }\n\n @Bean\n public RedissonConnectionFactory redissonConnectionFactory(RedissonClient redisson) {\n\n return new RedissonConnectionFactory(redisson);\n }\n\n @Bean(name = Constants.CacheManagerName.POLICY_PAYMENT_CACHE_MANAGER)\n public CacheManager redisCacheManager(\n RedissonConnectionFactory redissonConnectionFactory,\n RedissonClusterConfigurationProperties properties) {\n Map<String, RedisCacheConfiguration> config = new HashMap<>();\n for (Map.Entry<String, Long> cachesWithTtl : properties.getCacheExpirations()\n .entrySet()) {\n config.put(cachesWithTtl.getKey(),\n createDefaultCacheConfiguration(cachesWithTtl.getValue()));\n }\n return RedisCacheManager\n .builder(redissonConnectionFactory)\n .cacheDefaults(createDefaultCacheConfiguration(properties.getTtl()))\n .withInitialCacheConfigurations(config).build();\n }\n\n @Override\n public CacheErrorHandler errorHandler() {\n return new RedisCacheErrorHandler();\n }\n}\n",
215
+ "truncated": false,
216
+ "original_lines": 140,
217
+ "original_bytes": 6354,
218
+ "priority": 9
219
+ },
220
+ {
221
+ "file_path": "src/main/java/vn/com/viettel/vds/config/redis/RedissonClusterConfigurationProperties.java",
222
+ "content": "package vn.com.viettel.vds.config.redis;\n\nimport lombok.Data;\nimport org.springframework.boot.context.properties.ConfigurationProperties;\n\nimport java.util.HashMap;\nimport java.util.Map;\n\n/**\n * @author SonNV41\n * @version v1\n * @date 4/22/2022\n */\n@ConfigurationProperties(prefix = \"app.cache.redisson\")\n@Data\npublic class RedissonClusterConfigurationProperties {\n\n // redis cluster default config\n private boolean checkSlotsCoverage = true;\n private int idleConnectTimeout = 10000;\n private int connectTimeout = 10000;\n private int timeout = 3000;\n private int retryAttempts = 3;\n private int retryInterval = 1500;\n private int failedSlaveReconnectionInterval = 3000;\n private int failedSlaveCheckInterval = 60000;\n private String password = null;\n private int subscriptionsPerConnection = 5;\n private String clientName = null;\n private int subscriptionConnectionPoolSize = 50;\n private int slaveConnectionMinimumIdleSize = 24;\n private int slaveConnectionPoolSize = 64;\n private int masterConnectionMinimumIdleSize = 24;\n private int masterConnectionPoolSize = 64;\n private String nodeAddresses = null;\n private int scanInterval = 1000;\n private int pingConnectionInterval = 30000;\n private boolean keepAlive = false;\n private boolean tcpNoDelay = false;\n\n // cache\n private long ttl = 60000;\n private Map<String, Long> cacheExpirations = new HashMap<>();\n}\n",
223
+ "truncated": false,
224
+ "original_lines": 44,
225
+ "original_bytes": 1436,
226
+ "priority": 9
227
+ },
228
+ {
229
+ "file_path": "src/main/java/vn/com/viettel/vds/config/streaming/EventStreamConfig.java",
230
+ "content": "package vn.com.viettel.vds.config.streaming;\n\nimport org.springframework.boot.autoconfigure.condition.ConditionalOnExpression;\nimport org.springframework.boot.context.properties.EnableConfigurationProperties;\nimport org.springframework.cloud.stream.annotation.EnableBinding;\nimport org.springframework.cloud.stream.config.ListenerContainerCustomizer;\nimport org.springframework.context.annotation.Bean;\nimport org.springframework.kafka.listener.ConcurrentMessageListenerContainer;\n\n@ConditionalOnExpression(\"${spring.cloud.stream.enabled:false}\")\n@EnableBinding({TransDailyHisFinanceInputBinding.class, PolAccumulationBinding.class, PmtPaymentOrderCmdInput.class})\n@EnableConfigurationProperties(KafkaStreamProperties.class)\n@SuppressWarnings(\"squid:S3740\")\npublic class EventStreamConfig {\n\n @Bean\n ListenerContainerCustomizer listenerContainerCustomizer(KafkaStreamProperties kafkaStreamProperties) {\n return (container, destinationName, group) -> {\n if (container instanceof ConcurrentMessageListenerContainer) {\n ((ConcurrentMessageListenerContainer) container).getContainerProperties()\n .setShutdownTimeout(kafkaStreamProperties.getShutdownTimeout());\n }\n };\n }\n\n}\n",
231
+ "truncated": false,
232
+ "original_lines": 26,
233
+ "original_bytes": 1207,
234
+ "priority": 9
235
+ },
236
+ {
237
+ "file_path": "src/main/java/vn/com/viettel/vds/config/streaming/KafkaStreamProperties.java",
238
+ "content": "package vn.com.viettel.vds.config.streaming;\n\nimport org.springframework.boot.context.properties.ConfigurationProperties;\n\n@ConfigurationProperties(prefix = \"spring.cloud.stream\")\npublic class KafkaStreamProperties {\n private Long shutdownTimeout;\n\n public Long getShutdownTimeout() {\n return shutdownTimeout;\n }\n\n public void setShutdownTimeout(Long shutdownTimeout) {\n this.shutdownTimeout = shutdownTimeout;\n }\n}\n",
239
+ "truncated": false,
240
+ "original_lines": 16,
241
+ "original_bytes": 427,
242
+ "priority": 9
243
+ },
244
+ {
245
+ "file_path": "src/main/java/vn/com/viettel/vds/config/streaming/PmtPaymentOrderCmdInput.java",
246
+ "content": "package vn.com.viettel.vds.config.streaming;\n\nimport org.springframework.cloud.stream.annotation.Input;\nimport org.springframework.messaging.SubscribableChannel;\n\nimport static vn.com.viettel.vds.constant.Constants.StreamingBindingAddress.PMT_PAYMENT_ORDER_CMD;\n\npublic interface PmtPaymentOrderCmdInput {\n @Input(PMT_PAYMENT_ORDER_CMD)\n SubscribableChannel consumer();\n}\n",
247
+ "truncated": false,
248
+ "original_lines": 11,
249
+ "original_bytes": 378,
250
+ "priority": 9
251
+ },
252
+ {
253
+ "file_path": "src/main/java/vn/com/viettel/vds/config/streaming/PolAccumulationBinding.java",
254
+ "content": "package vn.com.viettel.vds.config.streaming;\n\nimport static vn.com.viettel.vds.constant.Constants.StreamingBindingAddress.POL_ACCUMULATION_UPDATE_CONSUMER;\nimport static vn.com.viettel.vds.constant.Constants.StreamingBindingAddress.POL_ACCUMULATION_UPDATE_PRODUCER;\n\nimport org.springframework.cloud.stream.annotation.Input;\nimport org.springframework.cloud.stream.annotation.Output;\nimport org.springframework.messaging.MessageChannel;\nimport org.springframework.messaging.SubscribableChannel;\n\npublic interface PolAccumulationBinding {\n\n @Output(POL_ACCUMULATION_UPDATE_PRODUCER)\n MessageChannel producer();\n\n @Input(POL_ACCUMULATION_UPDATE_CONSUMER)\n SubscribableChannel consumer();\n}\n",
255
+ "truncated": false,
256
+ "original_lines": 18,
257
+ "original_bytes": 692,
258
+ "priority": 9
259
+ },
260
+ {
261
+ "file_path": "src/main/java/vn/com/viettel/vds/config/streaming/TransDailyHisFinanceInputBinding.java",
262
+ "content": "package vn.com.viettel.vds.config.streaming;\n\nimport static vn.com.viettel.vds.constant.Constants.StreamingBindingAddress.BANKPLUS_TRANS_DAILY_HIS_FINANCE;\n\nimport org.springframework.cloud.stream.annotation.Input;\nimport org.springframework.messaging.SubscribableChannel;\n\npublic interface TransDailyHisFinanceInputBinding {\n\n @Input(BANKPLUS_TRANS_DAILY_HIS_FINANCE)\n SubscribableChannel consumer();\n}\n",
263
+ "truncated": false,
264
+ "original_lines": 12,
265
+ "original_bytes": 406,
266
+ "priority": 9
267
+ },
268
+ {
269
+ "file_path": "src/main/java/vn/com/viettel/vds/constant/Constants.java",
270
+ "content": "package vn.com.viettel.vds.constant;\n\nimport com.google.gson.Gson;\nimport lombok.AccessLevel;\nimport lombok.NoArgsConstructor;\nimport lombok.experimental.UtilityClass;\n\n@NoArgsConstructor(access = AccessLevel.PRIVATE)\npublic final class Constants {\n\n public static final Gson GSON = new Gson();\n public static final String ERROR_CODE_SUCCESS = \"00\";\n public static final String CORRECT_CODE_SUCCESS = \"00\";\n public static final Boolean CALCULATOR_TRANS = true;\n\n public static final String TIME_PERIOD_SUB = \"FEE_SUB\";\n public static final String MTI_PAYMENT = \"0400\";\n public static final String SYSTEM = \"SYSTEM\";\n public static final String BANK_CODE_VTT = \"VTT\";\n\n public static final String ACTION_USER_INFO = \"ACTION_USER_INFO\";\n public static final String ACTION_USER = \"ACTION_USER\";\n public static final String USER_DEFAULT = \"ADMIN\";\n public static final String PATH_MESSAGE = \"i18n/messages\";\n public static final String PATH_ERROR = \"i18n/errors\";\n\n public static final String HEADER_PARTITION_KEY = \"partitionKey\";\n\n public static final String POLICY_SRC_KEY = \"POLICY_SRC::\";\n\n public static final Integer POLICY_TYPE_FEE = 1;\n\n public static final Integer POLICY_TYPE_DISCOUNT = 2;\n\n public static final String ACCUMULATE_SOURCE = \"1\"; //Chính sách phí lũy kế đến nguồn tiền\n public static final String MONEY_SOURCE_BANK_CODE_NAPAS = \"NAPAS\";\n public static final String PROCESS_CODE_PM1001 = \"PM1001\";\n public static final String PAYMENT_LIMIT_PREFIX = \"PAYMENT_LIMIT_\";\n\n public static final String PREFIX_FEE = \"PF\";\n public static final String PREFIX_DIS = \"CK\";\n\n @NoArgsConstructor(access = AccessLevel.PRIVATE)\n public static class RegexPattern {\n\n public static final String DIGITS = \"\\\\d+\";\n public static final String HOURS_PARAM = \"^([01][0-9]|2[0-3]):(00|15|30|45)$\";\n public static final String NUMBER_SEPERATE_COMMA = \"^(\\\\d+,)*\\\\d+$\";\n public static final String PHONE_NUMBER = \"^(0|84)[0-9]{0,13}$\";\n public static final String COMMA = \",\";\n }\n\n @NoArgsConstructor(access = AccessLevel.PRIVATE)\n public static class StreamingBindingAddress {\n\n public static final String BANKPLUS_TRANS_DAILY_HIS_FINANCE = \"bankplus-trans-daily-his-finance\";\n\n public static final String POL_ACCUMULATION_UPDATE_CONSUMER = \"pol-accumulation-in\";\n public static final String POL_ACCUMULATION_UPDATE_PRODUCER = \"pol-accumulation-out\";\n public static final String PMT_PAYMENT_ORDER_CMD = \"cmd-payment-order-cmd\";\n }\n\n @NoArgsConstructor(access = AccessLevel.PRIVATE)\n public static class TransactionStatus {\n\n public static final String TRANSACTION_STATUS = \"TRANSACTION_STATUS\";\n\n public static final String SUCCESS = \"SUCCESS\";\n public static final String TIMEOUT = \"TIMEOUT\";\n public static final String FAILED = \"FAILED\";\n public static final String UNDEFINED = \"UNDEFINED\";\n }\n\n @NoArgsConstructor(access = AccessLevel.PRIVATE)\n public static class PmtPaymentOrderCmdStatusEnum {\n public static final String THAT_BAI = \"THAT_BAI\";\n public static final String THANH_CONG = \"THANH_CONG\";\n public static final String THANH_CONG_MOT_PHAN = \"THANH_CONG_MOT_PHAN\";\n public static final String TIMEOUT = \"TIMEOUT\";\n public static final String TRU_TIEN_THANH_CONG = \"TRU_TIEN_THANH_CONG\";\n public static final String TRU_TIEN_TIMEOUT = \"TRU_TIEN_TIMEOUT\";\n }\n @NoArgsConstructor(access = AccessLevel.PRIVATE)\n public static class ConditionCode {\n public static final String DIS_CUMULATIVE_DISCOUNT=\"DIS_CUMULATIVE_DISCOUNT\";\n\n }\n\n @NoArgsConstructor(access = AccessLevel.PRIVATE)\n public static class PolicyType {\n\n public static final int FEE = 1;\n\n public static final int DISCOUNT = 2;\n }\n\n @UtilityClass\n public class CustomerIncentiveAggregationConstants {\n public final String KEY_LOG_PROCESS = \"CustomerIncentiveAggregation process message - \";\n public final String MESSAGE_NOT_NULL=\"không được để trống\";\n public final String MESSAGE_NOT_REGEX=\"không đúng định dạng\";\n public final String REGEX_DATE = \"^(0[1-9]|[12][0-9]|3[01])-(0[1-9]|1[0-2])-(\\\\d{4})$\";\n\n public final String REGEX_NUMBER = \"^[0-9]+$\";\n\n public final String REGEX_LOCAL_DATE_TIME = \"^\\\\d{4}-\\\\d{2}-\\\\d{2}T\\\\d{2}:\\\\d{2}:\\\\d{2}$\";\n\n }\n\n @NoArgsConstructor(access = AccessLevel.PRIVATE)\n public static final class Redis {\n public static final String ACCUMULATE_POLICY_LIMIT_PREFIX = \"ACCUMULATE_LIMIT_V2\";\n public static final String ACCUMULATE_POLICY_FEE_PREFIX = \"ACCUMULATE_FEE\";\n }\n\n @NoArgsConstructor(access = AccessLevel.PRIVATE)\n public static class CacheManagerName {\n\n public static final String POLICY_PAYMENT_CACHE_MANAGER = \"policyPaymentCacheManager\";\n }\n\n @UtilityClass\n public class ThreadContext {\n public static final String KEY_PARAM_TRANS_STATUS = \"PARAM_TRANS_STATUS\";\n }\n @NoArgsConstructor(access = AccessLevel.PRIVATE)\n public static class LimitFormula {\n public static final String TRANS_AMOUNT = \"TRANS_AMOUNT\";\n public static final String TRANS_AMOUNT_ADD_FEE = \"TRANS_AMOUNT_ADD_FEE\";\n public static final String TRANS_AMOUNT_ADD_FEE_SUB_DISCOUNT = \"TRANS_AMOUNT_ADD_FEE_SUB_DISCOUNT\";\n public static final String TRANS_AMOUNT_SUB_DISCOUNT = \"TRANS_AMOUNT_SUB_DISCOUNT\";\n public static final String TRANS_AMOUNT_ADD_FEE_ADD_TAX_SUB_DISCOUNT = \"TRANS_AMOUNT_ADD_FEE_ADD_TAX_SUB_DISCOUNT\";\n public static final String TRANS_AMOUNT_SUB_DISCOUNT_SUB_SHARE_VALUE = \"TRANS_AMOUNT_SUB_DISCOUNT_SUB_SHARE_VALUE\";\n public static final String TRANS_AMOUNT_SUB_SHARE_VALUE = \"TRANS_AMOUNT_SUB_SHARE_VALUE\";\n }\n}\n",
271
+ "truncated": false,
272
+ "original_lines": 136,
273
+ "original_bytes": 5619,
274
+ "priority": 9
275
+ },
276
+ {
277
+ "file_path": "src/main/java/vn/com/viettel/vds/constant/enums/AccumulationOperationEnum.java",
278
+ "content": "package vn.com.viettel.vds.constant.enums;\n\npublic enum AccumulationOperationEnum {\n INCREASE,\n DECREASE\n}\n",
279
+ "truncated": false,
280
+ "original_lines": 6,
281
+ "original_bytes": 109,
282
+ "priority": 9
283
+ },
284
+ {
285
+ "file_path": "src/main/java/vn/com/viettel/vds/constant/enums/CommonStatusEnum.java",
286
+ "content": "package vn.com.viettel.vds.constant.enums;\n\nimport lombok.AllArgsConstructor;\nimport lombok.Getter;\n\n@Getter\n@AllArgsConstructor\npublic enum CommonStatusEnum {\n\n ENABLED(1, \"ENABLED\"),\n DISABLED(0, \"DISABLED\"),\n ;\n\n private final int value;\n private final String code;\n\n}\n",
287
+ "truncated": false,
288
+ "original_lines": 17,
289
+ "original_bytes": 277,
290
+ "priority": 9
291
+ },
292
+ {
293
+ "file_path": "src/main/java/vn/com/viettel/vds/constant/enums/ErrorCodeEnum.java",
294
+ "content": "package vn.com.viettel.vds.constant.enums;\n\nimport lombok.AllArgsConstructor;\nimport lombok.Getter;\n\n/**\n * Cấu hình enum error\n *\n * @author : HoangTD\n * @since : 11/5/2020, Thu\n **/\n@Getter\n@AllArgsConstructor\npublic enum ErrorCodeEnum implements Message {\n PS0001,\n PS0002,\n PS0003,\n PS0004,\n PS0005,\n PS0006,\n TB026,\n E01,\n TB099,\n TB001,\n TB002,\n TB003,\n TB004,\n TB005,\n TB006,\n TB007,\n TB008,\n TB009\n}\n",
295
+ "truncated": false,
296
+ "original_lines": 33,
297
+ "original_bytes": 429,
298
+ "priority": 9
299
+ },
300
+ {
301
+ "file_path": "src/main/java/vn/com/viettel/vds/constant/enums/ErrorCodeTdhfEnum.java",
302
+ "content": "package vn.com.viettel.vds.constant.enums;\n\npublic enum ErrorCodeTdhfEnum {\n\n TRU_TIEN_THAT_BAI(\"604\"),\n TRU_TIEN_THANH_CONG(\"00\"),\n TRU_TIEN_TIMEOUT(\"32\");\n\n private String errorCode;\n\n ErrorCodeTdhfEnum(String errorCode) {\n this.errorCode = errorCode;\n }\n\n public String getErrorCode() {\n return errorCode;\n }\n}\n",
303
+ "truncated": false,
304
+ "original_lines": 18,
305
+ "original_bytes": 352,
306
+ "priority": 9
307
+ },
308
+ {
309
+ "file_path": "src/main/java/vn/com/viettel/vds/constant/enums/Message.java",
310
+ "content": "package vn.com.viettel.vds.constant.enums;\n\n/**\n * Base message i18n\n *\n * @author HoangTD5\n * @version v1\n * @date 11/6/2020\n */\npublic interface Message {\n\n}\n",
311
+ "truncated": false,
312
+ "original_lines": 12,
313
+ "original_bytes": 160,
314
+ "priority": 9
315
+ },
316
+ {
317
+ "file_path": "src/main/java/vn/com/viettel/vds/constant/enums/MessageCodeEnum.java",
318
+ "content": "package vn.com.viettel.vds.constant.enums;\n\nimport lombok.AllArgsConstructor;\nimport lombok.Getter;\n\n/**\n * Cấu hình enum message\n *\n * @author : HoangTD\n * @since : 11/5/2020, Thu\n **/\n@Getter\n@AllArgsConstructor\npublic enum MessageCodeEnum implements Message {\n MIS0101\n}\n",
319
+ "truncated": false,
320
+ "original_lines": 16,
321
+ "original_bytes": 278,
322
+ "priority": 9
323
+ },
324
+ {
325
+ "file_path": "src/main/java/vn/com/viettel/vds/constant/enums/PeriodEnum.java",
326
+ "content": "package vn.com.viettel.vds.constant.enums;\n\nimport lombok.AllArgsConstructor;\nimport lombok.Getter;\n\n@Getter\n@AllArgsConstructor\npublic enum PeriodEnum {\n ALL(\"ALL\"),\n QUARTERLY(\"QUARTERLY\"),\n MONTHLY(\"MONTHLY\"),\n WEEKLY(\"WEEKLY\"),\n DAILY(\"DAILY\"),\n ;\n\n private final String value;\n\n public static PeriodEnum resolve(String value) {\n for (PeriodEnum periodEnum :\n values()) {\n if (periodEnum.getValue().equals(value)) {\n return periodEnum;\n }\n }\n return null;\n }\n}\n",
327
+ "truncated": false,
328
+ "original_lines": 27,
329
+ "original_bytes": 507,
330
+ "priority": 9
331
+ },
332
+ {
333
+ "file_path": "src/main/java/vn/com/viettel/vds/constant/enums/PmtPaymentOrderCmdStatusEnum.java",
334
+ "content": "package vn.com.viettel.vds.constant.enums;\n\npublic enum PmtPaymentOrderCmdStatusEnum {\n TRU_TIEN_THAT_BAI,\n THANH_CONG,\n THANH_CONG_MOT_PHAN,\n TIMEOUT,\n TRU_TIEN_THANH_CONG,\n TRU_TIEN_TIMEOUT\n}\n",
335
+ "truncated": false,
336
+ "original_lines": 10,
337
+ "original_bytes": 212,
338
+ "priority": 9
339
+ },
340
+ {
341
+ "file_path": "src/main/java/vn/com/viettel/vds/constant/enums/TrackingContextEnum.java",
342
+ "content": "package vn.com.viettel.vds.constant.enums;\n\nimport lombok.AllArgsConstructor;\nimport lombok.Getter;\n\n@Getter\n@AllArgsConstructor\npublic enum TrackingContextEnum {\n\n X_FORWARD_FOR(\"x-forwarded-for\", \"forwardIP\"),\n X_REAL_IP(\"x-real-ip\", \"clientIP\"),\n X_REQUEST_ID(\"x-request-id\", \"requestID\"),\n X_CORRELATION_ID(\"X-Correlation-ID\", \"correlationID\");\n\n private final String headerKey;\n private final String threadKey;\n}\n",
343
+ "truncated": false,
344
+ "original_lines": 17,
345
+ "original_bytes": 424,
346
+ "priority": 9
347
+ },
348
+ {
349
+ "file_path": "src/main/java/vn/com/viettel/vds/constant/enums/TransactionStatusEnum.java",
350
+ "content": "package vn.com.viettel.vds.constant.enums;\n\nimport com.fasterxml.jackson.annotation.JsonCreator;\nimport com.fasterxml.jackson.annotation.JsonValue;\nimport lombok.AllArgsConstructor;\nimport lombok.Getter;\n\nimport java.util.HashMap;\nimport java.util.Map;\n\n@Getter\n@AllArgsConstructor\npublic enum TransactionStatusEnum {\n // that bai\n UNKNOWN(null, null),\n SUCCESS(\"SUCCESS\", \"Thành công\"),\n TIMEOUT(\"TIMEOUT\", \"Timeout\");\n\n @JsonValue\n private final String value;\n\n private final String text;\n\n private static final Map<String, TransactionStatusEnum> TRANSACTION_STATUS_ENUM_MAP = new HashMap<>();\n\n static {\n for (TransactionStatusEnum status : TransactionStatusEnum.values()) {\n TRANSACTION_STATUS_ENUM_MAP.put(status.value, status);\n }\n }\n\n @JsonCreator\n public static TransactionStatusEnum fromValue(String value) {\n if (value == null) {\n return TransactionStatusEnum.UNKNOWN;\n }\n TransactionStatusEnum transactionStatusEnum = TRANSACTION_STATUS_ENUM_MAP.get(value);\n if (transactionStatusEnum == null) {\n return TransactionStatusEnum.UNKNOWN;\n }\n return transactionStatusEnum;\n }\n}\n",
351
+ "truncated": false,
352
+ "original_lines": 43,
353
+ "original_bytes": 1215,
354
+ "priority": 9
355
+ },
356
+ {
357
+ "file_path": "src/main/java/vn/com/viettel/vds/constant/enums/filter/FilterVisaEnum.java",
358
+ "content": "package vn.com.viettel.vds.constant.enums.filter;\n\npublic enum FilterVisaEnum {\n VALID_COMMON,\n VALID_PROCESS_SERVICE_CODE,\n VALID_ACCUMULATION\n}\n",
359
+ "truncated": false,
360
+ "original_lines": 7,
361
+ "original_bytes": 149,
362
+ "priority": 9
363
+ },
364
+ {
365
+ "file_path": "src/main/java/vn/com/viettel/vds/constant/enums/state/TransDailyHisFinanceStateEnum.java",
366
+ "content": "package vn.com.viettel.vds.constant.enums.state;\n\npublic enum TransDailyHisFinanceStateEnum {\n START,\n FILTER_PASSED,\n\n LAST_STATUS_IS_SUCCESS_TIMEOUT,\n CURRENT_STATUS_IS_FAILED,\n CURRENT_STATUS_IS_SUCCESS_TIMEOUT,\n FINISH\n}\n",
367
+ "truncated": false,
368
+ "original_lines": 11,
369
+ "original_bytes": 231,
370
+ "priority": 9
371
+ },
372
+ {
373
+ "file_path": "src/main/java/vn/com/viettel/vds/consumer/AccumulateConsumer.java",
374
+ "content": "package vn.com.viettel.vds.consumer;\n\nimport com.fasterxml.jackson.databind.JsonNode;\nimport com.fasterxml.jackson.databind.ObjectMapper;\nimport lombok.RequiredArgsConstructor;\nimport lombok.extern.slf4j.Slf4j;\nimport org.springframework.kafka.annotation.KafkaListener;\nimport org.springframework.kafka.support.KafkaHeaders;\nimport org.springframework.messaging.handler.annotation.Header;\nimport org.springframework.messaging.handler.annotation.Payload;\nimport org.springframework.stereotype.Component;\nimport vn.com.viettel.vds.domain.input.CustomerPaymentMessageDTO;\nimport vn.com.viettel.vds.model.main.CustomerPaymentAggregation;\nimport vn.com.viettel.vds.repository.main.CustomerPaymentAggregationRepository;\nimport vn.com.viettel.vds.service.main.AccumulateService;\nimport vn.com.viettel.vds.util.common.DataUtils;\n\nimport java.util.Arrays;\nimport java.util.Collections;\nimport java.util.List;\n\n\n@Slf4j\n@Component\n@RequiredArgsConstructor\npublic class AccumulateConsumer {\n\n private final AccumulateService accumulateService;\n private final CustomerPaymentAggregationRepository customerPaymentAggregationRepository;\n private final ObjectMapper objectMapper;\n\n @KafkaListener(autoStartup = \"${spring.kafka.clusters.policyService.consumer.topics.v1_policy_customer_payment.autoStartup}\",\n topics = \"${spring.kafka.clusters.policyService.consumer.topics.v1_policy_customer_payment.value}\",\n groupId = \"${spring.kafka.clusters.policyService.groupId}\",\n containerFactory = \"clusterPolicyFactory\")\n public void listenerAccumulate(@Payload String message, @Header(KafkaHeaders.RECEIVED_TOPIC) String topic) {\n try {\n log.info(\"listenerAccumulate From message {}\", message);\n JsonNode node = objectMapper.readTree(message);\n List<CustomerPaymentMessageDTO> listMsg =\n node.isArray()\n ? Arrays.asList(DataUtils.OBJECT_MAPPER_CUSTOM.readValue(message, CustomerPaymentMessageDTO[].class))\n : Collections.singletonList(DataUtils.OBJECT_MAPPER_CUSTOM.readValue(message, CustomerPaymentMessageDTO.class));\n accumulateService.processAccumulate(listMsg, topic);\n } catch (Exception ex) {\n log.error(\"listenerAccumulate Exception {} message {}\", ex.getMessage(), message, ex);\n }\n }\n\n @KafkaListener(autoStartup = \"${spring.kafka.clusters.policyService.consumer.topics.v1_policy_customer_confirm_trans.autoStartup}\",\n topics = \"${spring.kafka.clusters.policyService.consumer.topics.v1_policy_customer_confirm_trans.value}\",\n groupId = \"${spring.kafka.clusters.policyService.groupId}\",\n containerFactory = \"clusterPolicyFactory\")\n public void listenerConfirmAccumulate(@Payload String message, @Header(KafkaHeaders.RECEIVED_TOPIC) String topic) {\n try {\n log.info(\"listenerConfirmAccumulate From messages {}\", message);\n List<CustomerPaymentMessageDTO> listMsg = Arrays.asList(DataUtils.OBJECT_MAPPER_CUSTOM.readValue(message, CustomerPaymentMessageDTO[].class));\n accumulateService.processAccumulate(listMsg, topic);\n } catch (Exception ex) {\n log.error(\"listenerConfirmAccumulate Exception {} Payload {}\", ex.getMessage(), message, ex);\n }\n }\n\n @KafkaListener(autoStartup = \"${spring.kafka.clusters.policyService.consumer.topics.v1_customer_payment_aggregation.autoStartup}\",\n topics = \"${spring.kafka.clusters.policyService.consumer.topics.v1_customer_payment_aggregation.value}\",\n groupId = \"${spring.kafka.clusters.policyService.groupId}\",\n containerFactory = \"clusterPolicyFactory\")\n public void listenerCustomerPaymentAggregation(@Payload String message) {\n try {\n log.info(\"listenerCustomerPaymentAggregation From message {}\", message);\n List<CustomerPaymentAggregation> listMsg = Arrays.asList(objectMapper.readValue(message, CustomerPaymentAggregation[].class));\n customerPaymentAggregationRepository.saveAll(listMsg);\n } catch (Exception ex) {\n log.error(\"listenerCustomerPaymentAggregation Exception {} message {}\", ex.getMessage(), message, ex);\n }\n }\n}\n",
375
+ "truncated": false,
376
+ "original_lines": 77,
377
+ "original_bytes": 4269,
378
+ "priority": 9
379
+ },
380
+ {
381
+ "file_path": "src/main/java/vn/com/viettel/vds/consumer/CustomerIncentiveAggregationConsumer.java",
382
+ "content": "package vn.com.viettel.vds.consumer;\n\nimport lombok.extern.slf4j.Slf4j;\nimport org.springframework.beans.factory.annotation.Autowired;\nimport org.springframework.kafka.annotation.KafkaListener;\nimport org.springframework.messaging.handler.annotation.Payload;\nimport org.springframework.stereotype.Component;\nimport vn.com.viettel.vds.client.PolicyManagementServiceClient;\nimport vn.com.viettel.vds.domain.input.CustomerIncentiveAggregationDTO;\nimport vn.com.viettel.vds.util.common.DataUtils;\n\n@Slf4j\n@Component\npublic class CustomerIncentiveAggregationConsumer {\n\n private final PolicyManagementServiceClient policyManagementServiceClient;\n\n @Autowired\n public CustomerIncentiveAggregationConsumer(PolicyManagementServiceClient policyManagementServiceClient) {\n this.policyManagementServiceClient = policyManagementServiceClient;\n }\n\n @KafkaListener(autoStartup = \"${spring.kafka.clusters.policyService.consumer.topics.v1_policy_customer_incentive_aggregations.autoStartup}\",\n topics = \"${spring.kafka.clusters.policyService.consumer.topics.v1_policy_customer_incentive_aggregations.value}\",\n groupId = \"${spring.kafka.clusters.policyService.groupId}\",\n containerFactory = \"clusterPolicyFactory\")\n public void consumer(@Payload String message) {\n try {\n log.info(\"CustomerIncentiveAggregationConsumer From message {}\", message);\n CustomerIncentiveAggregationDTO msg = DataUtils.OBJECT_MAPPER_CUSTOM.readValue(message, CustomerIncentiveAggregationDTO.class);\n this.policyManagementServiceClient.saveAvailablePolicyCIA(msg);\n } catch (Exception ex) {\n log.info(\"CustomerIncentiveAggregation Exception {}, message {}\", ex.getMessage(), message);\n }\n }\n\n\n}\n",
383
+ "truncated": false,
384
+ "original_lines": 38,
385
+ "original_bytes": 1780,
386
+ "priority": 9
387
+ },
388
+ {
389
+ "file_path": "src/main/java/vn/com/viettel/vds/consumer/CustomerPaymentLimitConsumer.java",
390
+ "content": "package vn.com.viettel.vds.consumer;\n\nimport com.fasterxml.jackson.core.JsonProcessingException;\nimport com.fasterxml.jackson.databind.JsonNode;\nimport com.fasterxml.jackson.databind.ObjectMapper;\nimport lombok.extern.slf4j.Slf4j;\nimport org.springframework.beans.factory.annotation.Autowired;\nimport org.springframework.kafka.annotation.KafkaListener;\nimport org.springframework.messaging.handler.annotation.Payload;\nimport org.springframework.stereotype.Component;\nimport vn.com.viettel.vds.client.PolicyManagementServiceClient;\nimport vn.com.viettel.vds.constant.Constants;\nimport vn.com.viettel.vds.constant.enums.TransactionStatusEnum;\nimport vn.com.viettel.vds.domain.dto.CustomerDTO;\nimport vn.com.viettel.vds.domain.dto.CustomerPaymentLimitTransDTO;\nimport vn.com.viettel.vds.domain.input.AccumulateLimitInputDTO;\nimport vn.com.viettel.vds.domain.input.AccumulatePolicyLimitDTO;\nimport vn.com.viettel.vds.service.main.CustomerPaymentLimitService;\nimport vn.com.viettel.vds.service.main.CustomerPaymentLimitTransService;\nimport vn.com.viettel.vds.service.main.RedisService;\nimport vn.com.viettel.vds.util.common.DataUtils;\nimport vn.com.viettel.vds.util.common.TransactionStatusUtils;\n\nimport java.util.*;\nimport java.util.concurrent.TimeUnit;\nimport java.util.stream.Collectors;\n\n@Slf4j\n@Component\n@SuppressWarnings({\"java:S3776\", \"S1871\", \"java:S6541\", \"java:S1871\", \"java:S112\", \"java:S2142\"})\npublic class CustomerPaymentLimitConsumer {\n @Autowired\n private PolicyManagementServiceClient policyManagementServiceClient;\n\n private static final String AUTH = \"AUTH\";\n\n @Autowired\n private CustomerPaymentLimitService limitService;\n\n @Autowired\n private TransactionStatusUtils transactionStatus;\n\n @Autowired\n private CustomerPaymentLimitTransService transService;\n\n @Autowired\n private RedisService redisService;\n\n @Autowired\n private ObjectMapper objectMapper;\n\n @KafkaListener(autoStartup = \"${spring.kafka.clusters.policyService.consumer.topics.v1_policy_customer_limit_trans.autoStartup}\",\n topics = \"${spring.kafka.clusters.policyService.consumer.topics.v1_policy_customer_limit_trans.value}\",\n groupId = \"${spring.kafka.clusters.policyService.groupId}\",\n containerFactory = \"clusterPolicyFactory\")\n public void listenerCustomerPaymentLimit(@Payload String message) {\n String keyLock = \"\";\n try {\n log.info(\"listenerCustomerPaymentLimit From message {}\", message);\n List<CustomerPaymentLimitTransDTO> listMsg = Arrays.asList(DataUtils.OBJECT_MAPPER_CUSTOM.readValue(message, CustomerPaymentLimitTransDTO[].class));\n\n Set<String> requestIds = listMsg.stream()\n .filter(Objects::nonNull)\n .map(CustomerPaymentLimitTransDTO::getRequestId)\n .sorted(Comparator.reverseOrder()) // Sắp xếp theo thứ tự ngược\n .collect(Collectors.toCollection(LinkedHashSet::new)); // Thu thập vào LinkedHashSet\n\n keyLock = \"POLICY_PAYMENT_LIMIT\".concat(\"|\").concat(String.valueOf(requestIds));\n Boolean isLock = redisService.lock(keyLock, keyLock, 10, TimeUnit.SECONDS);\n if (Boolean.FALSE.equals(isLock)) return;\n\n Map<String, Integer> quantity = new HashMap<>();\n for (CustomerPaymentLimitTransDTO msg : listMsg) {\n msg.setLitmitType(\"ADD\");\n limitService.savePaymentLimit(msg, quantity, null);\n }\n } catch (Exception ex) {\n log.error(\"listenerAuthAccumulate Exception {} message {}\", ex.getMessage(), message, ex);\n }\n }\n\n @KafkaListener(autoStartup = \"${spring.kafka.clusters.policyService.consumer.topics.v1_policy_customer_payment.autoStartup}\",\n topics = \"${spring.kafka.clusters.policyService.consumer.topics.v1_policy_customer_payment.value}\",\n groupId = \"${spring.kafka.clusters.policyService.groupId}-limit\",\n containerFactory = \"clusterPolicyFactory\")\n public void listenerUpdateCustomerPaymentLimit(@Payload String message) {\n try {\n log.info(\"listenerUpdateCustomerPaymentLimit From message {}\", message);\n JsonNode node = objectMapper.readTree(message);\n List<CustomerPaymentLimitTransDTO> listMsg =\n node.isArray()\n ? Arrays.asList(DataUtils.OBJECT_MAPPER_CUSTOM.readValue(message, CustomerPaymentLimitTransDTO[].class))\n : Collections.singletonList(DataUtils.OBJECT_MAPPER_CUSTOM.readValue(message, CustomerPaymentLimitTransDTO.class));\n updateCustomerPaymentLimitHandler(listMsg);\n } catch (Exception ex) {\n log.error(\"listenerUpdateCustomerPaymentLimit Exception {} message {}\", ex.getMessage(), message, ex);\n }\n }\n\n public void updateCustomerPaymentLimitHandler(List<CustomerPaymentLimitTransDTO> listMsg) {\n String keyLock = \"\";\n try {\n Map<String, Integer> quantity = new HashMap<>();\n Set<String> requestIds = listMsg.stream()\n .filter(Objects::nonNull)\n .map(CustomerPaymentLimitTransDTO::getRequestId)\n .sorted(Comparator.reverseOrder())\n .collect(Collectors.toCollection(LinkedHashSet::new));\n keyLock = \"POLICY_PAYMENT_LIMIT\".concat(\"|\").concat(String.valueOf(requestIds));\n Boolean isLock = redisService.lock(keyLock, keyLock, 10, TimeUnit.SECONDS);\n if (Boolean.FALSE.equals(isLock)) {\n tryLock(keyLock, keyLock, 10, TimeUnit.SECONDS);\n }\n\n Map<String, CustomerPaymentLimitTransDTO> mapTrans = transService.findByRequestIdInAndRequestMti(requestIds, \"NOT_AUTH\").stream().collect(Collectors.toMap(CustomerPaymentLimitTransDTO::getRequestId, transDTO -> transDTO));\n\n if (mapTrans == null || mapTrans.isEmpty()) {\n log.info(\"return updateCustomerPaymentLimitHandler CustomerPaymentLimitTrans isEmpty\");\n return;\n }\n\n Map<String, Boolean> mapAllFalse = new HashMap<>();\n Map<String, Boolean> mapSenderAllFalse = new HashMap<>();\n Map<String, Boolean> mapReceiverAllFalse = new HashMap<>();\n\n //group dich vu va nguon tien, check trang thai gd false all thi giam tru so luong gd cua dich vu\n Map<String, List<CustomerPaymentLimitTransDTO>> listMap = listMsg.stream().collect(Collectors.groupingBy(msg -> DataUtils.groupingByKeyLimitTrans(msg)));\n listMap.forEach((key, value) ->\n mapAllFalse.put(key, value.stream().allMatch(f -> TransactionStatusEnum.UNKNOWN\n .equals(transactionStatus.getErrorCode(f.getErrorCode(), f.getCorrectCode())))));\n\n listMsg.forEach(val -> {\n val.setSenderJson(Objects.nonNull(mapTrans.get(val.getRequestId())) ? mapTrans.get(val.getRequestId()).getSenderJson() : null);\n if (Boolean.TRUE.equals(Objects.nonNull(val.getSenderJson()))) {\n try {\n val.setSender(objectMapper.readValue(val.getSenderJson(), CustomerDTO.class));\n } catch (JsonProcessingException e) {\n log.info(\"Sender parse json fail {}\", e.getMessage());\n }\n }\n val.setReceiverJson(Objects.nonNull(mapTrans.get(val.getRequestId())) ? mapTrans.get(val.getRequestId()).getReceiverJson() : null);\n if (Boolean.TRUE.equals(Objects.nonNull(val.getReceiverJson()))) {\n try {\n val.setReceiver(objectMapper.readValue(val.getReceiverJson(), CustomerDTO.class));\n } catch (JsonProcessingException e) {\n log.info(\"Receiver parse json fail {}\", e.getMessage());\n }\n }\n });\n\n //group cac dich vu cung chinh sach, check trang thai gd false all thi giam tru so luong gd cua chinh sach\n Map<String, List<CustomerPaymentLimitTransDTO>> listMapSender = listMsg.stream().filter(f -> Objects.nonNull(f.getSender()) && Objects.nonNull(f.getSender().getId())).collect(Collectors.groupingBy(msg -> msg.getSender().getPolicyLimit().stream().map(a -> a.getCode()).collect(Collectors.joining(\",\"))));\n listMapSender.forEach((key, value) ->\n mapSenderAllFalse.put(key, value.stream().allMatch(f -> TransactionStatusEnum.UNKNOWN\n .equals(transactionStatus.getErrorCode(f.getErrorCode(), f.getCorrectCode())))));\n Map<String, List<CustomerPaymentLimitTransDTO>> listMapReceiver = listMsg.stream().filter(f -> Objects.nonNull(f.getReceiver()) && Objects.nonNull(f.getReceiver().getId())).collect(Collectors.groupingBy(msg -> msg.getReceiver().getPolicyLimit().stream().map(a -> a.getCode()).collect(Collectors.joining(\",\"))));\n listMapReceiver.forEach((key, value) ->\n mapReceiverAllFalse.put(key, value.stream().allMatch(f -> TransactionStatusEnum.UNKNOWN\n .equals(transactionStatus.getErrorCode(f.getErrorCode(), f.getCorrectCode())))));\n\n for (CustomerPaymentLimitTransDTO msg : listMsg) {\n msg.setLitmitType(\"UPDATE\");\n msg.setMapAllFalse(mapAllFalse);\n msg.setMapSenderAllFalse(mapSenderAllFalse);\n msg.setMapReceiverAllFalse(mapReceiverAllFalse);\n limitService.savePaymentLimit(msg, quantity, mapTrans.get(msg.getRequestId()));\n }\n\n } catch (Exception ex) {\n throw new RuntimeException(ex);\n } finally {\n redisService.release(keyLock);\n }\n }\n\n @KafkaListener(autoStartup = \"${spring.kafka.clusters.policyService.consumer.topics.v1_policy_auth_accumulate.autoStartup}\",\n topics = \"${spring.kafka.clusters.policyService.consumer.topics.v1_policy_auth_accumulate.value}\",\n groupId = \"${spring.kafka.clusters.policyService.groupId}\",\n containerFactory = \"clusterPolicyFactory\")\n public void listenerAuthAccumulate(@Payload String message) {\n try {\n log.info(\"listenerAuthAccumulate From message {}\", message);\n CustomerPaymentLimitTransDTO msg = DataUtils.OBJECT_MAPPER_CUSTOM.readValue(message, CustomerPaymentLimitTransDTO.class);\n if (Constants.ERROR_CODE_SUCCESS.equals(getErrorCode(msg.getErrorCode(), msg.getCorrectCode()))) {\n msg.setAuth(AUTH);\n if (Boolean.TRUE.equals(DataUtils.nullOrEmpty(msg.getRequestType()))) {\n msg.setRequestType(\"ADD\");\n }\n List<AccumulatePolicyLimitDTO> limitDTOList = policyManagementServiceClient.availableListLimit(msg);\n if (Boolean.TRUE.equals(DataUtils.notNullOrEmpty(limitDTOList))) {\n limitService.saveAuthPaymentLimit(AccumulateLimitInputDTO.builder()\n .policyLimit(limitDTOList)\n .customerPayment(msg)\n .build());\n }\n }\n } catch (Exception ex) {\n log.error(\"listenerAuthAccumulate Exception {} message {}\", ex.getMessage(), message, ex);\n }\n }\n\n private String getErrorCode(String errorCode, String correctCode) {\n if (Boolean.TRUE.equals(DataUtils.notNullOrEmpty(correctCode))) {\n return correctCode;\n }\n return errorCode;\n }\n\n private void tryLock(String keyLog, String value, long timeout, TimeUnit unit) throws InterruptedException {\n boolean tryLock;\n do {\n tryLock = redisService.lock(keyLog, value, timeout, unit);\n Thread.sleep(50);\n } while (!tryLock);\n // TryLock thành công rồi mới cho phép xử lý tiếp.\n }\n}\n",
391
+ "truncated": false,
392
+ "original_lines": 217,
393
+ "original_bytes": 11963,
394
+ "priority": 9
395
+ },
396
+ {
397
+ "file_path": "src/main/java/vn/com/viettel/vds/consumer/SaveHistoryConsumer.java",
398
+ "content": "package vn.com.viettel.vds.consumer;\n\nimport com.fasterxml.jackson.databind.ObjectMapper;\nimport lombok.RequiredArgsConstructor;\nimport lombok.extern.slf4j.Slf4j;\nimport org.springframework.kafka.annotation.KafkaListener;\nimport org.springframework.messaging.handler.annotation.Payload;\nimport org.springframework.stereotype.Component;\nimport vn.com.viettel.vds.model.main.CusPayFeeHistory;\nimport vn.com.viettel.vds.model.main.PayFeeRequestHistory;\nimport vn.com.viettel.vds.repository.main.CusPayFeeHistoryRepository;\nimport vn.com.viettel.vds.repository.main.PayFeeRequestHistoryRepository;\n\nimport java.util.Arrays;\nimport java.util.List;\n\n\n@Slf4j\n@Component\n@RequiredArgsConstructor\npublic class SaveHistoryConsumer {\n\n private final ObjectMapper objectMapper;\n\n private final PayFeeRequestHistoryRepository payFeeRequestHistoryRepository;\n\n private final CusPayFeeHistoryRepository cusPayFeeHistoryRepository;\n\n @KafkaListener(autoStartup = \"${spring.kafka.clusters.policyService.consumer.topics.policy_insert_pay_fee_request_history.autoStartup}\",\n topics = \"${spring.kafka.clusters.policyService.consumer.topics.policy_insert_pay_fee_request_history.value}\",\n groupId = \"${spring.kafka.clusters.policyService.groupId}\",\n containerFactory = \"clusterPolicyFactory\")\n public void listenerPayFeeRequestHistory(@Payload String message) {\n try {\n log.info(\"listenerPayFeeRequestHistory message {}\", message);\n PayFeeRequestHistory payFeeRequestHistory = objectMapper.readValue(message, PayFeeRequestHistory.class);\n payFeeRequestHistoryRepository.save(payFeeRequestHistory);\n } catch (Exception ex) {\n log.error(\"listenerPayFeeRequestHistory message {} Exception {}\", message, ex.getMessage(), ex);\n }\n }\n\n @KafkaListener(autoStartup = \"${spring.kafka.clusters.policyService.consumer.topics.v1_cus_pay_fee_history.autoStartup}\",\n topics = \"${spring.kafka.clusters.policyService.consumer.topics.v1_cus_pay_fee_history.value}\",\n groupId = \"${spring.kafka.clusters.policyService.groupId}\",\n containerFactory = \"clusterPolicyFactory\")\n public void listenerCusPayFeeHistory(@Payload String message) {\n try {\n log.info(\"listenerCusPayFeeHistory message {}\", message);\n List<CusPayFeeHistory> cusPayFeeHistory = Arrays.asList(objectMapper.readValue(message, CusPayFeeHistory[].class));\n cusPayFeeHistoryRepository.saveAll(cusPayFeeHistory);\n } catch (Exception ex) {\n log.error(\"listenerCusPayFeeHistory message {} Exception {}\", message, ex.getMessage(), ex);\n }\n }\n}\n",
399
+ "truncated": false,
400
+ "original_lines": 56,
401
+ "original_bytes": 2687,
402
+ "priority": 9
403
+ }
404
+ ],
405
+ "total_files_scanned": 206,
406
+ "total_files_included": 50,
407
+ "config_pack": {
408
+ "config_root": "/Users/vds-ai/.vds/cache/repos/DOPS-project/app-config/cdcn-policy-data-processing-service",
409
+ "repo_slug": "cdcn-policy-data-processing-service",
410
+ "matched_folder": "cdcn-policy-data-processing-service",
411
+ "env_dirs": [
412
+ "staging",
413
+ "alpha"
414
+ ],
415
+ "files": [
416
+ {
417
+ "path": "/Users/vds-ai/.vds/cache/repos/DOPS-project/app-config/cdcn-policy-data-processing-service/staging/application.yml",
418
+ "env": "staging",
419
+ "file_type": "yml"
420
+ },
421
+ {
422
+ "path": "/Users/vds-ai/.vds/cache/repos/DOPS-project/app-config/cdcn-policy-data-processing-service/staging/log4j2.xml",
423
+ "env": "staging",
424
+ "file_type": "xml"
425
+ },
426
+ {
427
+ "path": "/Users/vds-ai/.vds/cache/repos/DOPS-project/app-config/cdcn-policy-data-processing-service/alpha/application.yml",
428
+ "env": "alpha",
429
+ "file_type": "yml"
430
+ }
431
+ ],
432
+ "warning": null
433
+ },
434
+ "lib_pack": null
435
+ }