@jjlmoya/utils-textiles 1.20.0 → 1.22.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (209) hide show
  1. package/package.json +1 -1
  2. package/src/category/i18n/de.ts +76 -76
  3. package/src/category/i18n/en.ts +76 -76
  4. package/src/category/i18n/es.ts +76 -76
  5. package/src/category/i18n/fr.ts +76 -76
  6. package/src/category/i18n/id.ts +76 -76
  7. package/src/category/i18n/it.ts +76 -76
  8. package/src/category/i18n/ja.ts +76 -76
  9. package/src/category/i18n/ko.ts +76 -76
  10. package/src/category/i18n/nl.ts +76 -76
  11. package/src/category/i18n/pl.ts +76 -76
  12. package/src/category/i18n/pt.ts +76 -76
  13. package/src/category/i18n/ru.ts +76 -76
  14. package/src/category/i18n/sv.ts +76 -76
  15. package/src/category/i18n/zh.ts +76 -76
  16. package/src/category/index.ts +2 -0
  17. package/src/category/seo.astro +1 -1
  18. package/src/components/PreviewNavSidebar.astro +1 -1
  19. package/src/components/PreviewToolbar.astro +1 -1
  20. package/src/data.ts +1 -1
  21. package/src/entries.ts +4 -1
  22. package/src/env.d.ts +1 -1
  23. package/src/index.ts +1 -1
  24. package/src/layouts/PreviewLayout.astro +113 -113
  25. package/src/pages/index.astro +1 -1
  26. package/src/tests/faq_count.test.ts +19 -19
  27. package/src/tests/i18n_coverage.test.ts +4 -2
  28. package/src/tests/locale_spelling.test.ts +44 -0
  29. package/src/tests/mocks/astro_mock.js +1 -1
  30. package/src/tests/no_en_dash.test.ts +70 -70
  31. package/src/tests/no_h1_in_components.test.ts +1 -1
  32. package/src/tests/seo_length.test.ts +22 -22
  33. package/src/tests/seo_translation_completeness.test.ts +69 -0
  34. package/src/tests/spanish_leakage.test.ts +175 -153
  35. package/src/tests/tool_validation.test.ts +17 -17
  36. package/src/tool/burnTest/i18n/es.ts +211 -211
  37. package/src/tool/burnTest/i18n/fr.ts +211 -211
  38. package/src/tool/burnTest/i18n/ja.ts +211 -211
  39. package/src/tool/burnTest/i18n/ko.ts +211 -211
  40. package/src/tool/burnTest/i18n/pl.ts +211 -211
  41. package/src/tool/burnTest/i18n/ru.ts +211 -211
  42. package/src/tool/burnTest/i18n/sv.ts +211 -211
  43. package/src/tool/burnTest/i18n/zh.ts +211 -211
  44. package/src/tool/burnTest/seo.astro +15 -15
  45. package/src/tool/clothingSizeConverter/i18n/de.ts +348 -348
  46. package/src/tool/clothingSizeConverter/i18n/en.ts +348 -348
  47. package/src/tool/clothingSizeConverter/i18n/fr.ts +348 -348
  48. package/src/tool/clothingSizeConverter/i18n/ja.ts +348 -348
  49. package/src/tool/clothingSizeConverter/i18n/ko.ts +348 -348
  50. package/src/tool/clothingSizeConverter/i18n/nl.ts +348 -348
  51. package/src/tool/clothingSizeConverter/i18n/pl.ts +348 -348
  52. package/src/tool/clothingSizeConverter/i18n/ru.ts +348 -348
  53. package/src/tool/clothingSizeConverter/i18n/sv.ts +348 -348
  54. package/src/tool/clothingSizeConverter/i18n/tr.ts +348 -348
  55. package/src/tool/clothingSizeConverter/i18n/zh.ts +348 -348
  56. package/src/tool/clothingSizeConverter/seo.astro +15 -15
  57. package/src/tool/embroideryStitchPricingEstimator/bibliography.astro +6 -0
  58. package/src/tool/embroideryStitchPricingEstimator/bibliography.ts +12 -0
  59. package/src/tool/embroideryStitchPricingEstimator/component.astro +111 -0
  60. package/src/tool/embroideryStitchPricingEstimator/controller.ts +111 -0
  61. package/src/tool/embroideryStitchPricingEstimator/dom-views.ts +94 -0
  62. package/src/tool/embroideryStitchPricingEstimator/embroidery-stitch-count-pricing-estimator.css +438 -0
  63. package/src/tool/embroideryStitchPricingEstimator/entry.ts +29 -0
  64. package/src/tool/embroideryStitchPricingEstimator/evaluator.ts +22 -0
  65. package/src/tool/embroideryStitchPricingEstimator/i18n/de.ts +38 -0
  66. package/src/tool/embroideryStitchPricingEstimator/i18n/en.ts +194 -0
  67. package/src/tool/embroideryStitchPricingEstimator/i18n/es.ts +38 -0
  68. package/src/tool/embroideryStitchPricingEstimator/i18n/fr.ts +38 -0
  69. package/src/tool/embroideryStitchPricingEstimator/i18n/id.ts +38 -0
  70. package/src/tool/embroideryStitchPricingEstimator/i18n/it.ts +38 -0
  71. package/src/tool/embroideryStitchPricingEstimator/i18n/ja.ts +38 -0
  72. package/src/tool/embroideryStitchPricingEstimator/i18n/ko.ts +38 -0
  73. package/src/tool/embroideryStitchPricingEstimator/i18n/nl.ts +38 -0
  74. package/src/tool/embroideryStitchPricingEstimator/i18n/pl.ts +38 -0
  75. package/src/tool/embroideryStitchPricingEstimator/i18n/pt.ts +38 -0
  76. package/src/tool/embroideryStitchPricingEstimator/i18n/ru.ts +38 -0
  77. package/src/tool/embroideryStitchPricingEstimator/i18n/sv.ts +38 -0
  78. package/src/tool/embroideryStitchPricingEstimator/i18n/tr.ts +38 -0
  79. package/src/tool/embroideryStitchPricingEstimator/i18n/zh.ts +38 -0
  80. package/src/tool/embroideryStitchPricingEstimator/index.ts +11 -0
  81. package/src/tool/embroideryStitchPricingEstimator/logic.test.ts +40 -0
  82. package/src/tool/embroideryStitchPricingEstimator/logic.ts +86 -0
  83. package/src/tool/embroideryStitchPricingEstimator/seo.astro +15 -0
  84. package/src/tool/embroideryStitchPricingEstimator/storage.ts +20 -0
  85. package/src/tool/embroideryStitchPricingEstimator/ui.ts +53 -0
  86. package/src/tool/fabricProjectCalculator/i18n/de.ts +236 -236
  87. package/src/tool/fabricProjectCalculator/i18n/ja.ts +236 -236
  88. package/src/tool/fabricProjectCalculator/i18n/ko.ts +236 -236
  89. package/src/tool/fabricProjectCalculator/i18n/nl.ts +236 -236
  90. package/src/tool/fabricProjectCalculator/i18n/pl.ts +236 -236
  91. package/src/tool/fabricProjectCalculator/i18n/ru.ts +236 -236
  92. package/src/tool/fabricProjectCalculator/i18n/sv.ts +236 -236
  93. package/src/tool/fabricProjectCalculator/i18n/tr.ts +236 -236
  94. package/src/tool/fabricProjectCalculator/i18n/zh.ts +236 -236
  95. package/src/tool/fabricProjectCalculator/seo.astro +15 -15
  96. package/src/tool/fabricTruth/i18n/de.ts +268 -268
  97. package/src/tool/fabricTruth/i18n/en.ts +268 -268
  98. package/src/tool/fabricTruth/i18n/es.ts +302 -302
  99. package/src/tool/fabricTruth/i18n/fr.ts +268 -268
  100. package/src/tool/fabricTruth/i18n/id.ts +268 -268
  101. package/src/tool/fabricTruth/i18n/it.ts +268 -268
  102. package/src/tool/fabricTruth/i18n/ja.ts +268 -268
  103. package/src/tool/fabricTruth/i18n/ko.ts +268 -268
  104. package/src/tool/fabricTruth/i18n/nl.ts +268 -268
  105. package/src/tool/fabricTruth/i18n/pl.ts +268 -268
  106. package/src/tool/fabricTruth/i18n/pt.ts +268 -268
  107. package/src/tool/fabricTruth/i18n/ru.ts +268 -268
  108. package/src/tool/fabricTruth/i18n/sv.ts +268 -268
  109. package/src/tool/fabricTruth/i18n/tr.ts +268 -268
  110. package/src/tool/fabricTruth/i18n/zh.ts +272 -272
  111. package/src/tool/fabricTruth/seo.astro +15 -15
  112. package/src/tool/fiberPrep/i18n/de.ts +215 -215
  113. package/src/tool/fiberPrep/i18n/fr.ts +215 -215
  114. package/src/tool/fiberPrep/i18n/ja.ts +215 -215
  115. package/src/tool/fiberPrep/i18n/ko.ts +215 -215
  116. package/src/tool/fiberPrep/i18n/nl.ts +215 -215
  117. package/src/tool/fiberPrep/i18n/pl.ts +215 -215
  118. package/src/tool/fiberPrep/i18n/ru.ts +215 -215
  119. package/src/tool/fiberPrep/i18n/sv.ts +215 -215
  120. package/src/tool/fiberPrep/i18n/tr.ts +215 -215
  121. package/src/tool/fiberPrep/i18n/zh.ts +215 -215
  122. package/src/tool/fiberPrep/seo.astro +15 -15
  123. package/src/tool/knittingGauge/i18n/de.ts +224 -224
  124. package/src/tool/knittingGauge/i18n/ja.ts +224 -224
  125. package/src/tool/knittingGauge/i18n/ko.ts +224 -224
  126. package/src/tool/knittingGauge/i18n/pl.ts +224 -224
  127. package/src/tool/knittingGauge/i18n/ru.ts +224 -224
  128. package/src/tool/knittingGauge/i18n/tr.ts +224 -224
  129. package/src/tool/knittingGauge/i18n/zh.ts +224 -224
  130. package/src/tool/knittingGauge/seo.astro +15 -15
  131. package/src/tool/laundryGuide/i18n/de.ts +271 -271
  132. package/src/tool/laundryGuide/i18n/en.ts +271 -271
  133. package/src/tool/laundryGuide/i18n/es.ts +271 -271
  134. package/src/tool/laundryGuide/i18n/fr.ts +255 -255
  135. package/src/tool/laundryGuide/i18n/id.ts +271 -271
  136. package/src/tool/laundryGuide/i18n/it.ts +271 -271
  137. package/src/tool/laundryGuide/i18n/ja.ts +271 -271
  138. package/src/tool/laundryGuide/i18n/ko.ts +271 -271
  139. package/src/tool/laundryGuide/i18n/nl.ts +271 -271
  140. package/src/tool/laundryGuide/i18n/pl.ts +271 -271
  141. package/src/tool/laundryGuide/i18n/pt.ts +271 -271
  142. package/src/tool/laundryGuide/i18n/ru.ts +271 -271
  143. package/src/tool/laundryGuide/i18n/sv.ts +271 -271
  144. package/src/tool/laundryGuide/i18n/tr.ts +271 -271
  145. package/src/tool/laundryGuide/i18n/zh.ts +271 -271
  146. package/src/tool/laundryGuide/seo.astro +15 -15
  147. package/src/tool/needleConverter/i18n/de.ts +202 -202
  148. package/src/tool/needleConverter/i18n/es.ts +207 -207
  149. package/src/tool/needleConverter/i18n/fr.ts +207 -207
  150. package/src/tool/needleConverter/i18n/ja.ts +202 -202
  151. package/src/tool/needleConverter/i18n/ko.ts +202 -202
  152. package/src/tool/needleConverter/i18n/nl.ts +202 -202
  153. package/src/tool/needleConverter/i18n/pl.ts +202 -202
  154. package/src/tool/needleConverter/i18n/ru.ts +202 -202
  155. package/src/tool/needleConverter/i18n/sv.ts +202 -202
  156. package/src/tool/needleConverter/i18n/tr.ts +202 -202
  157. package/src/tool/needleConverter/i18n/zh.ts +202 -202
  158. package/src/tool/needleConverter/seo.astro +15 -15
  159. package/src/tool/sewingPatternScaler/component.astro +236 -236
  160. package/src/tool/sewingPatternScaler/i18n/fr.ts +170 -170
  161. package/src/tool/sewingPatternScaler/i18n/ja.ts +114 -114
  162. package/src/tool/sewingPatternScaler/i18n/ko.ts +114 -114
  163. package/src/tool/sewingPatternScaler/i18n/nl.ts +114 -114
  164. package/src/tool/sewingPatternScaler/i18n/pl.ts +114 -114
  165. package/src/tool/sewingPatternScaler/i18n/ru.ts +114 -114
  166. package/src/tool/sewingPatternScaler/i18n/sv.ts +114 -114
  167. package/src/tool/sewingPatternScaler/i18n/tr.ts +114 -114
  168. package/src/tool/sewingPatternScaler/i18n/zh.ts +114 -114
  169. package/src/tool/sewingPatternScaler/seo.astro +15 -15
  170. package/src/tool/shoeSizeConverter/i18n/fr.ts +183 -183
  171. package/src/tool/shoeSizeConverter/i18n/ja.ts +179 -179
  172. package/src/tool/shoeSizeConverter/i18n/ko.ts +179 -179
  173. package/src/tool/shoeSizeConverter/i18n/nl.ts +179 -179
  174. package/src/tool/shoeSizeConverter/i18n/pl.ts +179 -179
  175. package/src/tool/shoeSizeConverter/i18n/ru.ts +179 -179
  176. package/src/tool/shoeSizeConverter/i18n/sv.ts +179 -179
  177. package/src/tool/shoeSizeConverter/i18n/tr.ts +179 -179
  178. package/src/tool/shoeSizeConverter/i18n/zh.ts +179 -179
  179. package/src/tool/shoeSizeConverter/seo.astro +15 -15
  180. package/src/tool/stainChemistry/bibliography.ts +16 -16
  181. package/src/tool/stainChemistry/i18n/de.ts +286 -286
  182. package/src/tool/stainChemistry/i18n/en.ts +289 -289
  183. package/src/tool/stainChemistry/i18n/es.ts +286 -286
  184. package/src/tool/stainChemistry/i18n/fr.ts +296 -296
  185. package/src/tool/stainChemistry/i18n/id.ts +286 -286
  186. package/src/tool/stainChemistry/i18n/it.ts +286 -286
  187. package/src/tool/stainChemistry/i18n/ja.ts +286 -286
  188. package/src/tool/stainChemistry/i18n/ko.ts +283 -283
  189. package/src/tool/stainChemistry/i18n/nl.ts +286 -286
  190. package/src/tool/stainChemistry/i18n/pl.ts +286 -286
  191. package/src/tool/stainChemistry/i18n/pt.ts +286 -286
  192. package/src/tool/stainChemistry/i18n/ru.ts +286 -286
  193. package/src/tool/stainChemistry/i18n/sv.ts +286 -286
  194. package/src/tool/stainChemistry/i18n/tr.ts +286 -286
  195. package/src/tool/stainChemistry/i18n/zh.ts +281 -281
  196. package/src/tool/stainChemistry/seo.astro +15 -15
  197. package/src/tool/yarnCalculator/i18n/de.ts +296 -296
  198. package/src/tool/yarnCalculator/i18n/es.ts +296 -296
  199. package/src/tool/yarnCalculator/i18n/fr.ts +296 -296
  200. package/src/tool/yarnCalculator/i18n/ja.ts +296 -296
  201. package/src/tool/yarnCalculator/i18n/ko.ts +296 -296
  202. package/src/tool/yarnCalculator/i18n/nl.ts +296 -296
  203. package/src/tool/yarnCalculator/i18n/pl.ts +296 -296
  204. package/src/tool/yarnCalculator/i18n/ru.ts +296 -296
  205. package/src/tool/yarnCalculator/i18n/sv.ts +296 -296
  206. package/src/tool/yarnCalculator/i18n/tr.ts +296 -296
  207. package/src/tool/yarnCalculator/i18n/zh.ts +295 -295
  208. package/src/tool/yarnCalculator/seo.astro +15 -15
  209. package/src/tools.ts +2 -2
@@ -0,0 +1,194 @@
1
+ import type { FAQPage, HowTo, SoftwareApplication, WithContext } from 'schema-dts';
2
+ import type { ToolLocaleContent } from '../../../types';
3
+ import { bibliography } from '../bibliography';
4
+ import type { EmbroideryStitchPricingEstimatorUI } from '../ui';
5
+
6
+ const slug = 'embroidery-stitch-count-pricing-estimator';
7
+ const title = 'Embroidery Stitch Count and Pricing Estimator';
8
+ const description = 'Estimate embroidery stitch count, production time, and a base price from design size, stitch density, colours, speed, and hourly rate.';
9
+
10
+ const faq = [
11
+ {
12
+ question: 'How does the embroidery stitch count estimate work?',
13
+ answer: 'The estimator multiplies the design area by the square of the stitch density, then applies a stitch type factor. This creates an equivalent stitch count for comparing production effort, not a machine file prediction.',
14
+ },
15
+ {
16
+ question: 'Why does the stitch type change the estimate?',
17
+ answer: 'Running, satin, fill, and tatami stitches place thread differently. The tool uses a transparent relative factor so denser coverage shows a larger production estimate.',
18
+ },
19
+ {
20
+ question: 'Does the colour count change the number of stitches?',
21
+ answer: 'No. Colour count adds changeover time only. The current model allows 1.75 minutes for each change after the first colour, which you can treat as a planning assumption.',
22
+ },
23
+ {
24
+ question: 'Is the calculated price a quote?',
25
+ answer: 'No. It is a base labour estimate using the hourly rate you enter. Thread, stabiliser, digitising, machine setup, finishing, overhead, tax, and profit margin are not included.',
26
+ },
27
+ ];
28
+
29
+ const howTo = [
30
+ {
31
+ name: 'Measure the design',
32
+ text: 'Enter the finished embroidery width and height in centimetres. Use the stitched area rather than the full hoop size.',
33
+ },
34
+ {
35
+ name: 'Describe the stitch plan',
36
+ text: 'Choose the dominant stitch type, enter the density in stitches per centimetre, and count the thread colours.',
37
+ },
38
+ {
39
+ name: 'Add production assumptions',
40
+ text: 'Enter the machine speed in stitches per minute and your labour rate per hour. Keep the rate in one consistent currency unit.',
41
+ },
42
+ {
43
+ name: 'Read the planning estimate',
44
+ text: 'Use the equivalent stitches, production time, setup time, and base price to compare designs before digitising or quoting.',
45
+ },
46
+ ];
47
+
48
+ const faqSchema: WithContext<FAQPage> = {
49
+ '@context': 'https://schema.org',
50
+ '@type': 'FAQPage',
51
+ mainEntity: faq.map((item) => ({
52
+ '@type': 'Question',
53
+ name: item.question,
54
+ acceptedAnswer: { '@type': 'Answer', text: item.answer },
55
+ })),
56
+ };
57
+
58
+ const howToSchema: WithContext<HowTo> = {
59
+ '@context': 'https://schema.org',
60
+ '@type': 'HowTo',
61
+ name: title,
62
+ description,
63
+ step: howTo.map((step) => ({ '@type': 'HowToStep', name: step.name, text: step.text })),
64
+ };
65
+
66
+ const appSchema: WithContext<SoftwareApplication> = {
67
+ '@context': 'https://schema.org',
68
+ '@type': 'SoftwareApplication',
69
+ name: title,
70
+ description,
71
+ applicationCategory: 'BusinessApplication',
72
+ operatingSystem: 'All',
73
+ offers: { '@type': 'Offer', price: '0', priceCurrency: 'EUR' },
74
+ inLanguage: 'en',
75
+ };
76
+
77
+ const ui: EmbroideryStitchPricingEstimatorUI = {
78
+ intro: 'Shape a stitch plan on the embroidery hoop, then see the production effort and labour value it carries.',
79
+ stageLabel: 'The stitch hoop',
80
+ controlsLabel: 'Build the stitch plan',
81
+ resultLabel: 'Base labour estimate',
82
+ widthLabel: 'Design width',
83
+ heightLabel: 'Design height',
84
+ densityLabel: 'Stitch density',
85
+ stitchLabel: 'Dominant stitch',
86
+ coloursLabel: 'Thread colours',
87
+ speedLabel: 'Machine speed',
88
+ rateLabel: 'Hourly rate',
89
+ widthHint: 'cm stitched area',
90
+ heightHint: 'cm stitched area',
91
+ densityHint: 'stitches per cm',
92
+ coloursHint: 'first colour needs no changeover',
93
+ speedHint: 'stitches per minute',
94
+ rateHint: 'your currency per hour',
95
+ stitchRunning: 'Running stitch',
96
+ stitchSatin: 'Satin stitch',
97
+ stitchFill: 'Fill stitch',
98
+ stitchTatami: 'Tatami fill',
99
+ stitchRunningNote: 'Light outlines and lettering with low coverage.',
100
+ stitchSatinNote: 'Smooth columns and borders with a focused thread path.',
101
+ stitchFillNote: 'Solid coverage that adds thread and production effort.',
102
+ stitchTatamiNote: 'Layered fill with the highest planning factor in this model.',
103
+ selectStitch: 'Choose a stitch type',
104
+ emptyResult: 'Enter a stitch plan to wake the hoop.',
105
+ stitchesUnit: 'equivalent stitches',
106
+ minutesUnit: 'minutes',
107
+ hoursUnit: 'hours',
108
+ priceUnit: 'currency units',
109
+ areaLabel: 'Stitched area',
110
+ effectiveLabel: 'Equivalent stitches',
111
+ stitchTimeLabel: 'Stitching time',
112
+ productionLabel: 'Production time',
113
+ setupLabel: 'Colour setup',
114
+ changesLabel: 'Colour changes',
115
+ basePriceLabel: 'Base labour estimate',
116
+ estimateBadge: 'Estimate ready',
117
+ attentionBadge: 'Review scale',
118
+ warningHighVolume: 'Large stitch volume. Use a real machine sample before quoting.',
119
+ warningLongRun: 'Long production run. Check hooping, breaks, and finishing time separately.',
120
+ invalidMessage: 'Use positive values for size, density, speed, and hourly rate.',
121
+ formulaTitle: 'What is counted',
122
+ formulaText: 'Area x density squared gives a coverage baseline. The stitch factor turns it into equivalent stitches, while colour changes add 1.75 minutes each after the first colour.',
123
+ noteTitle: 'Planning boundary',
124
+ noteText: 'This is a transparent estimator, not a digitised machine file or a finished quote. Add materials, setup, finishing, overhead, tax, and margin yourself.',
125
+ reset: 'Reset example',
126
+ copied: 'Summary copied',
127
+ copySummary: 'Copy summary',
128
+ canvasAlt: 'A fabric embroidery hoop with thread lines showing the current density',
129
+ };
130
+
131
+ export const content: ToolLocaleContent<EmbroideryStitchPricingEstimatorUI> = {
132
+ slug,
133
+ title,
134
+ description,
135
+ ui,
136
+ faq,
137
+ bibliography,
138
+ howTo,
139
+ schemas: [faqSchema, howToSchema, appSchema],
140
+ seo: [
141
+ { type: 'title', text: 'How to Estimate Embroidery Stitch Count and Labour Price', level: 2 },
142
+ {
143
+ type: 'paragraph',
144
+ html: 'An embroidery design has two different planning questions: how much thread work the motif contains, and how long the machine and operator will be occupied. This estimator keeps those questions visible. It turns a stitched width, height, density, dominant stitch, colour count, speed, and hourly rate into a comparable planning figure.',
145
+ },
146
+ {
147
+ type: 'title',
148
+ text: 'The stitch count model',
149
+ level: 3,
150
+ },
151
+ {
152
+ type: 'paragraph',
153
+ html: 'The baseline is the stitched area multiplied by the square of the density in stitches per centimetre. A relative factor then accounts for the selected stitch family: running stitch is lighter, satin is the reference, and fill and tatami are progressively denser planning cases. This is an estimate of equivalent work, not the exact count exported by digitising software.',
154
+ },
155
+ {
156
+ type: 'table',
157
+ headers: ['Input', 'What it changes', 'What it does not promise'],
158
+ rows: [
159
+ ['Width and height', 'Coverage area and baseline stitch count', 'The exact outline of a digitised file'],
160
+ ['Density and stitch type', 'Equivalent thread work and machine time', 'A universal quality setting for every fabric'],
161
+ ['Colours', 'Changeover time after the first colour', 'The number of needle trims or thread breaks'],
162
+ ['Speed and hourly rate', 'Production duration and labour value', 'A final customer quote'],
163
+ ],
164
+ },
165
+ {
166
+ type: 'title',
167
+ text: 'Turn an estimate into a responsible price',
168
+ level: 3,
169
+ },
170
+ {
171
+ type: 'paragraph',
172
+ html: 'The displayed price is only labour time multiplied by your hourly rate. A real quote should add digitising or file preparation, thread, stabiliser, hooping, machine setup, test pieces, trims, rework, finishing, overhead, tax, and profit margin. Keep those additions explicit so a low stitch count does not hide a labour intensive preparation step.',
173
+ },
174
+ {
175
+ type: 'tip',
176
+ title: 'Test the plan before quoting',
177
+ html: 'Run a representative sample on the intended fabric and stabiliser. Compare the sample time and thread behaviour with the estimate, then adjust your local speed and setup assumptions rather than pretending the calculator knows every machine.',
178
+ },
179
+ {
180
+ type: 'title',
181
+ text: 'Reading the production breakdown',
182
+ level: 3,
183
+ },
184
+ {
185
+ type: 'list',
186
+ items: [
187
+ 'Equivalent stitches show the coverage workload after the stitch factor is applied.',
188
+ 'Production time is equivalent stitches divided by machine speed.',
189
+ 'Colour setup adds 1.75 minutes for each colour change after the first.',
190
+ 'Base labour estimate is total production time divided by 60 and multiplied by the hourly rate.',
191
+ ],
192
+ },
193
+ ],
194
+ };
@@ -0,0 +1,38 @@
1
+ import type { FAQPage, HowTo, SoftwareApplication, WithContext } from 'schema-dts';
2
+ import type { ToolLocaleContent } from '../../../types';
3
+ import { bibliography } from '../bibliography';
4
+ import type { EmbroideryStitchPricingEstimatorUI } from '../ui';
5
+
6
+ const slug = 'calculadora-puntadas-precio-bordado';
7
+ const title = 'Calculadora de puntadas y precio de bordado';
8
+ const description = 'Estima las puntadas, el tiempo de producción y un precio base de mano de obra a partir del tamaño, la densidad, los colores, la velocidad y la tarifa.';
9
+ const faq = [
10
+ { question: '¿Cómo funciona la estimación de puntadas?', answer: 'La calculadora multiplica el área bordada por el cuadrado de la densidad de puntadas y aplica después un factor según el tipo de puntada. El resultado es una carga de trabajo equivalente para comparar producciones, no una predicción del archivo de máquina.' },
11
+ { question: '¿Por qué cambia la estimación según la puntada?', answer: 'La puntada corrida, el satén, el relleno y el tatami colocan el hilo de forma distinta. El factor relativo muestra de manera transparente que una cobertura más densa requiere más trabajo de producción.' },
12
+ { question: '¿La cantidad de colores cambia el número de puntadas?', answer: 'No. Los colores solo añaden tiempo de cambio. El modelo reserva 1,75 minutos por cada cambio después del primer color como supuesto de planificación.' },
13
+ { question: '¿El precio calculado es un presupuesto?', answer: 'No. Es una estimación de mano de obra basada en la tarifa horaria indicada. No incluye hilo, estabilizador, digitalización, preparación, montaje, remates, gastos generales, impuestos ni margen.' },
14
+ ];
15
+ const howTo = [
16
+ { name: 'Mide el diseño', text: 'Introduce el ancho y el alto bordados en centímetros. Usa el área que llevará puntadas, no el tamaño completo del bastidor.' },
17
+ { name: 'Describe el plan de puntadas', text: 'Elige el tipo dominante, indica la densidad en puntadas por centímetro y cuenta los colores de hilo.' },
18
+ { name: 'Añade tus supuestos', text: 'Introduce la velocidad en puntadas por minuto y tu tarifa de mano de obra por hora. Mantén una sola unidad monetaria.' },
19
+ { name: 'Lee la estimación', text: 'Usa las puntadas equivalentes, el tiempo de producción, la preparación y el precio base para comparar diseños antes de digitalizar o presupuestar.' },
20
+ ];
21
+ const faqSchema: WithContext<FAQPage> = { '@context': 'https://schema.org', '@type': 'FAQPage', mainEntity: faq.map((item) => ({ '@type': 'Question', name: item.question, acceptedAnswer: { '@type': 'Answer', text: item.answer } })) };
22
+ const howToSchema: WithContext<HowTo> = { '@context': 'https://schema.org', '@type': 'HowTo', name: title, description, step: howTo.map((step) => ({ '@type': 'HowToStep', name: step.name, text: step.text })) };
23
+ const appSchema: WithContext<SoftwareApplication> = { '@context': 'https://schema.org', '@type': 'SoftwareApplication', name: title, description, applicationCategory: 'BusinessApplication', operatingSystem: 'All', offers: { '@type': 'Offer', price: '0', priceCurrency: 'EUR' }, inLanguage: 'es' };
24
+ const ui: EmbroideryStitchPricingEstimatorUI = {
25
+ intro: 'Dale forma a tu plan de puntadas en el bastidor y descubre el esfuerzo de producción y su valor de mano de obra.', stageLabel: 'El bastidor de puntadas', controlsLabel: 'Crea el plan de puntadas', resultLabel: 'Estimación base de mano de obra', widthLabel: 'Ancho del diseño', heightLabel: 'Alto del diseño', densityLabel: 'Densidad de puntada', stitchLabel: 'Puntada dominante', coloursLabel: 'Colores de hilo', speedLabel: 'Velocidad de máquina', rateLabel: 'Tarifa por hora', widthHint: 'área bordada en cm', heightHint: 'área bordada en cm', densityHint: 'puntadas por cm', coloursHint: 'el primer color no necesita cambio', speedHint: 'puntadas por minuto', rateHint: 'tu moneda por hora', stitchRunning: 'Puntada corrida', stitchSatin: 'Puntada satén', stitchFill: 'Puntada de relleno', stitchTatami: 'Relleno tatami', stitchRunningNote: 'Contornos y letras ligeras con poca cobertura.', stitchSatinNote: 'Columnas y bordes suaves con un recorrido concentrado.', stitchFillNote: 'Cobertura sólida que añade hilo y esfuerzo de producción.', stitchTatamiNote: 'Relleno por capas con el factor de planificación más alto.', selectStitch: 'Elige un tipo de puntada', emptyResult: 'Introduce un plan para despertar el bastidor.', stitchesUnit: 'puntadas equivalentes', minutesUnit: 'minutos', hoursUnit: 'horas', priceUnit: 'unidades monetarias', areaLabel: 'Área bordada', effectiveLabel: 'Puntadas equivalentes', stitchTimeLabel: 'Tiempo de puntada', productionLabel: 'Tiempo de producción', setupLabel: 'Preparación de colores', changesLabel: 'Cambios de color', basePriceLabel: 'Estimación base de mano de obra', estimateBadge: 'Estimación lista', attentionBadge: 'Revisa la escala', warningHighVolume: 'Gran volumen de puntadas. Haz una prueba real antes de presupuestar.', warningLongRun: 'Producción larga. Revisa por separado el bastidor, las roturas y los remates.', invalidMessage: 'Usa valores positivos para tamaño, densidad, velocidad y tarifa horaria.', formulaTitle: 'Qué se cuenta', formulaText: 'El área por la densidad al cuadrado crea una base de cobertura. El factor de puntada la convierte en puntadas equivalentes y cada cambio después del primer color añade 1,75 minutos.', noteTitle: 'Límite de planificación', noteText: 'Es una calculadora transparente, no un archivo de máquina digitalizado ni un presupuesto final. Añade por tu cuenta materiales, preparación, remates, gastos, impuestos y margen.', reset: 'Restablecer ejemplo', copied: 'Resumen copiado', copySummary: 'Copiar resumen', canvasAlt: 'Bastidor de bordado de tela con líneas de hilo que muestran la densidad actual',
26
+ };
27
+ export const content: ToolLocaleContent<EmbroideryStitchPricingEstimatorUI> = { slug, title, description, ui, faq, bibliography, howTo, schemas: [faqSchema, howToSchema, appSchema], seo: [
28
+ { type: 'title', text: 'Cómo estimar puntadas y precio de mano de obra de bordado', level: 2 },
29
+ { type: 'paragraph', html: 'Un diseño de bordado plantea dos preguntas distintas: cuánta labor de hilo contiene el motivo y cuánto tiempo ocuparán la máquina y la persona que la maneja. Esta calculadora mantiene ambas visibles y transforma tamaño, densidad, puntada, colores, velocidad y tarifa en una cifra de planificación comparable.' },
30
+ { type: 'title', text: 'El modelo de puntadas', level: 3 },
31
+ { type: 'paragraph', html: 'La base es el área bordada multiplicada por el cuadrado de la densidad en puntadas por centímetro. Un factor relativo tiene en cuenta la familia de puntada: la corrida es más ligera, el satén sirve de referencia y los rellenos son casos de planificación progresivamente más densos. Es una estimación del trabajo equivalente, no el recuento exacto que exporta un programa de digitalización.' },
32
+ { type: 'table', headers: ['Entrada', 'Qué cambia', 'Qué no promete'], rows: [['Ancho y alto', 'Área de cobertura y puntadas base', 'El contorno exacto de un archivo digitalizado'], ['Densidad y puntada', 'Trabajo equivalente y tiempo de máquina', 'Un ajuste universal para cualquier tejido'], ['Colores', 'Tiempo de cambio después del primer color', 'El número de recortes o roturas de hilo'], ['Velocidad y tarifa', 'Duración y valor de mano de obra', 'Un presupuesto final para el cliente']] },
33
+ { type: 'title', text: 'Convierte una estimación en un precio responsable', level: 3 },
34
+ { type: 'paragraph', html: 'El precio mostrado solo multiplica el tiempo de trabajo por tu tarifa horaria. Un presupuesto real debe sumar digitalización, hilo, estabilizador, bastidor, preparación, muestras, recortes, repeticiones, remates, gastos generales, impuestos y margen. Mantenerlos separados evita que un recuento bajo oculte una preparación laboriosa.' },
35
+ { type: 'tip', title: 'Prueba el plan antes de presupuestar', html: 'Haz una muestra representativa sobre el tejido y el estabilizador previstos. Compara su tiempo y el comportamiento del hilo con la estimación y ajusta tus supuestos locales de velocidad y preparación.' },
36
+ { type: 'title', text: 'Cómo leer el desglose de producción', level: 3 },
37
+ { type: 'list', items: ['Las puntadas equivalentes muestran la carga de cobertura después de aplicar el factor.', 'El tiempo de producción son las puntadas equivalentes divididas por la velocidad.', 'La preparación de color añade 1,75 minutos por cada cambio después del primero.', 'La estimación base es el tiempo total dividido por 60 y multiplicado por la tarifa horaria.'] },
38
+ ] };
@@ -0,0 +1,38 @@
1
+ import type { FAQPage, HowTo, SoftwareApplication, WithContext } from 'schema-dts';
2
+ import type { ToolLocaleContent } from '../../../types';
3
+ import { bibliography } from '../bibliography';
4
+ import type { EmbroideryStitchPricingEstimatorUI } from '../ui';
5
+
6
+ const slug = 'estimateur-points-prix-broderie';
7
+ const title = 'Estimateur de points et de prix de broderie';
8
+ const description = 'Estimez le nombre de points, le temps de production et un coût de main-d\'oeuvre à partir de la taille, de la densité, des couleurs, de la vitesse et du tarif horaire.';
9
+ const faq = [
10
+ { question: 'Comment fonctionne l\'estimation du nombre de points ?', answer: 'L\'estimateur multiplie la surface brodée par le carré de la densité de points, puis applique un facteur selon le type de point. Le résultat compare la charge de production, sans prédire le fichier machine.' },
11
+ { question: 'Pourquoi le type de point change-t-il le résultat ?', answer: 'Le point courant, le satin, le remplissage et le tatami déposent le fil différemment. Le facteur relatif rend visible le travail supplémentaire d\'une couverture plus dense.' },
12
+ { question: 'Le nombre de couleurs change-t-il le nombre de points ?', answer: 'Non. Les couleurs ajoutent seulement du temps de changement. Le modèle compte 1,75 minute pour chaque changement après la première couleur comme hypothèse de planification.' },
13
+ { question: 'Le prix calculé est-il un devis ?', answer: 'Non. Il s\'agit d\'une estimation de main-d\'oeuvre basée sur le tarif saisi. Le fil, le stabilisateur, la numérisation, la préparation, la finition, les frais, les taxes et la marge ne sont pas inclus.' },
14
+ ];
15
+ const howTo = [
16
+ { name: 'Mesurer le motif', text: 'Saisissez la largeur et la hauteur brodées en centimètres. Utilisez la surface cousue et non la taille complète du cadre.' },
17
+ { name: 'Décrire le plan de points', text: 'Choisissez le type dominant, indiquez la densité en points par centimètre et comptez les couleurs de fil.' },
18
+ { name: 'Ajouter les hypothèses', text: 'Saisissez la vitesse en points par minute et votre tarif de main-d\'oeuvre par heure. Gardez une seule unité monétaire.' },
19
+ { name: 'Lire la planification', text: 'Utilisez les points équivalents, le temps de production, le temps de préparation et le coût de base pour comparer les motifs.' },
20
+ ];
21
+ const faqSchema: WithContext<FAQPage> = { '@context': 'https://schema.org', '@type': 'FAQPage', mainEntity: faq.map((item) => ({ '@type': 'Question', name: item.question, acceptedAnswer: { '@type': 'Answer', text: item.answer } })) };
22
+ const howToSchema: WithContext<HowTo> = { '@context': 'https://schema.org', '@type': 'HowTo', name: title, description, step: howTo.map((step) => ({ '@type': 'HowToStep', name: step.name, text: step.text })) };
23
+ const appSchema: WithContext<SoftwareApplication> = { '@context': 'https://schema.org', '@type': 'SoftwareApplication', name: title, description, applicationCategory: 'BusinessApplication', operatingSystem: 'All', offers: { '@type': 'Offer', price: '0', priceCurrency: 'EUR' }, inLanguage: 'fr' };
24
+ const ui: EmbroideryStitchPricingEstimatorUI = {
25
+ intro: 'Composez votre plan de points dans le cadre et voyez l\'effort de production ainsi que sa valeur de main-d\'oeuvre.', stageLabel: 'Le cadre de broderie', controlsLabel: 'Construire le plan de points', resultLabel: 'Coût de main-d\'oeuvre', widthLabel: 'Largeur du motif', heightLabel: 'Hauteur du motif', densityLabel: 'Densité de points', stitchLabel: 'Type de point dominant', coloursLabel: 'Couleurs de fil', speedLabel: 'Vitesse de la machine', rateLabel: 'Tarif horaire', widthHint: 'surface brodée en cm', heightHint: 'surface brodée en cm', densityHint: 'points par cm', coloursHint: 'la première couleur ne demande pas de changement', speedHint: 'points par minute', rateHint: 'votre monnaie par heure', stitchRunning: 'Point courant', stitchSatin: 'Point satin', stitchFill: 'Point de remplissage', stitchTatami: 'Remplissage tatami', stitchRunningNote: 'Contours légers et lettrage avec une couverture réduite.', stitchSatinNote: 'Colonnes et bordures lisses avec un trajet de fil concentré.', stitchFillNote: 'Couverture pleine qui ajoute du fil et du temps de production.', stitchTatamiNote: 'Remplissage en couches avec le facteur de planification le plus élevé.', selectStitch: 'Choisir un type de point', emptyResult: 'Saisissez un plan pour activer le cadre.', stitchesUnit: 'points équivalents', minutesUnit: 'minutes', hoursUnit: 'heures', priceUnit: 'unités monétaires', areaLabel: 'Surface brodée', effectiveLabel: 'Points équivalents', stitchTimeLabel: 'Temps de broderie', productionLabel: 'Temps de production', setupLabel: 'Préparation des couleurs', changesLabel: 'Changements de couleur', basePriceLabel: 'Coût de main-d\'oeuvre', estimateBadge: 'Estimation prête', attentionBadge: 'Vérifier l\'échelle', warningHighVolume: 'Grand volume de points. Faites un essai machine avant de préparer un devis.', warningLongRun: 'Longue production. Vérifiez séparément le cadrage, les casses de fil et la finition.', invalidMessage: 'Utilisez des valeurs positives pour la taille, la densité, la vitesse et le tarif horaire.', formulaTitle: 'Ce qui est compté', formulaText: 'La surface multipliée par la densité au carré donne la base de couverture. Le facteur de point la transforme en points équivalents, puis chaque changement après la première couleur ajoute 1,75 minute.', noteTitle: 'Limite de planification', noteText: 'Cet outil est un estimateur transparent, pas un fichier machine numérisé ni un devis final. Ajoutez vous-même les matières, la préparation, la finition, les frais, les taxes et la marge.', reset: 'Réinitialiser l\'exemple', copied: 'Résumé copié', copySummary: 'Copier le résumé', canvasAlt: 'Cadre de broderie en tissu avec des lignes de fil montrant la densité actuelle',
26
+ };
27
+ export const content: ToolLocaleContent<EmbroideryStitchPricingEstimatorUI> = { slug, title, description, ui, faq, bibliography, howTo, schemas: [faqSchema, howToSchema, appSchema], seo: [
28
+ { type: 'title', text: 'Estimer les points et le prix de main-d\'oeuvre en broderie', level: 2 },
29
+ { type: 'paragraph', html: 'Un motif de broderie pose deux questions de planification: quelle quantité de travail de fil contient-il et combien de temps la machine et son opérateur seront-ils occupés ? Cet estimateur garde ces deux sujets visibles et transforme la taille, la densité, le point, les couleurs, la vitesse et le tarif en une valeur comparable.' },
30
+ { type: 'title', text: 'Le modèle de points', level: 3 },
31
+ { type: 'paragraph', html: 'La base est la surface brodée multipliée par le carré de la densité en points par centimètre. Un facteur relatif tient compte de la famille de points: le point courant est plus léger, le satin sert de référence et les remplissages sont des cas de planification plus denses. Il s\'agit d\'une estimation du travail équivalent, pas du nombre exact exporté par un logiciel de numérisation.' },
32
+ { type: 'table', headers: ['Entrée', 'Ce qui change', 'Ce qui n\'est pas promis'], rows: [['Largeur et hauteur', 'Surface couverte et base de points', 'Le contour exact du fichier numérisé'], ['Densité et type de point', 'Travail de fil équivalent et temps machine', 'Un réglage de qualité universel pour chaque tissu'], ['Couleurs', 'Temps de changement après la première couleur', 'Le nombre de coupes ou de casses de fil'], ['Vitesse et tarif', 'Durée de production et valeur de main-d\'oeuvre', 'Un devis final pour le client']] },
33
+ { type: 'title', text: 'Transformer une estimation en prix responsable', level: 3 },
34
+ { type: 'paragraph', html: 'Le prix affiché correspond seulement au temps de travail multiplié par le tarif horaire. Un devis réel doit ajouter la numérisation, le fil, le stabilisateur, le cadrage, la préparation, les essais, les coupes, les reprises, la finition, les frais, les taxes et la marge. Gardez ces éléments explicites afin qu\'un petit nombre de points ne cache pas une préparation longue.' },
35
+ { type: 'tip', title: 'Tester le plan avant le devis', html: 'Réalisez un échantillon représentatif sur le tissu et le stabilisateur prévus. Comparez son temps et le comportement du fil avec l\'estimation, puis ajustez vos hypothèses locales de vitesse et de préparation.' },
36
+ { type: 'title', text: 'Lire le détail de production', level: 3 },
37
+ { type: 'list', items: ['Les points équivalents montrent la charge de couverture après application du facteur.', 'Le temps de production correspond aux points équivalents divisés par la vitesse machine.', 'La préparation des couleurs ajoute 1,75 minute pour chaque changement après le premier.', 'Le coût de base est le temps total divisé par 60 puis multiplié par le tarif horaire.'] },
38
+ ] };
@@ -0,0 +1,38 @@
1
+ import type { FAQPage, HowTo, SoftwareApplication, WithContext } from 'schema-dts';
2
+ import type { ToolLocaleContent } from '../../../types';
3
+ import { bibliography } from '../bibliography';
4
+ import type { EmbroideryStitchPricingEstimatorUI } from '../ui';
5
+
6
+ const slug = 'kalkulator-jumlah-tusuk-harga-bordir';
7
+ const title = 'Kalkulator jumlah tusuk dan harga bordir';
8
+ const description = 'Perkirakan jumlah tusuk, waktu produksi, dan biaya tenaga kerja dasar dari ukuran desain, kepadatan tusuk, warna, kecepatan, dan tarif per jam.';
9
+ const faq = [
10
+ { question: 'Bagaimana cara kerja perkiraan jumlah tusuk?', answer: 'Kalkulator mengalikan luas bordir dengan kuadrat kepadatan tusuk, lalu menerapkan faktor jenis tusuk. Hasilnya adalah beban kerja setara untuk membandingkan produksi, bukan prediksi file mesin.' },
11
+ { question: 'Mengapa jenis tusuk mengubah perkiraan?', answer: 'Tusuk lari, satin, isi, dan tatami menempatkan benang dengan cara berbeda. Faktor relatif yang transparan menunjukkan bahwa cakupan lebih padat memerlukan usaha produksi lebih besar.' },
12
+ { question: 'Apakah jumlah warna mengubah jumlah tusuk?', answer: 'Tidak. Jumlah warna hanya menambah waktu pergantian. Model ini menghitung 1,75 menit untuk setiap pergantian setelah warna pertama sebagai asumsi perencanaan.' },
13
+ { question: 'Apakah harga yang dihitung merupakan penawaran?', answer: 'Bukan. Ini adalah perkiraan tenaga kerja berdasarkan tarif per jam yang dimasukkan. Benang, stabilizer, digitalisasi, persiapan, penyelesaian, biaya operasional, pajak, dan keuntungan belum termasuk.' },
14
+ ];
15
+ const howTo = [
16
+ { name: 'Ukur desain', text: 'Masukkan lebar dan tinggi bordir dalam sentimeter. Gunakan area yang benar-benar diberi tusuk, bukan ukuran bingkai seluruhnya.' },
17
+ { name: 'Jelaskan rencana tusuk', text: 'Pilih jenis tusuk utama, masukkan kepadatan dalam tusuk per sentimeter, lalu hitung warna benang.' },
18
+ { name: 'Masukkan asumsi produksi', text: 'Masukkan kecepatan mesin dalam tusuk per menit dan tarif tenaga kerja per jam. Gunakan satu mata uang yang konsisten.' },
19
+ { name: 'Baca perkiraan perencanaan', text: 'Gunakan tusuk setara, waktu produksi, waktu persiapan, dan biaya dasar untuk membandingkan desain sebelum digitalisasi atau penawaran.' },
20
+ ];
21
+ const faqSchema: WithContext<FAQPage> = { '@context': 'https://schema.org', '@type': 'FAQPage', mainEntity: faq.map((item) => ({ '@type': 'Question', name: item.question, acceptedAnswer: { '@type': 'Answer', text: item.answer } })) };
22
+ const howToSchema: WithContext<HowTo> = { '@context': 'https://schema.org', '@type': 'HowTo', name: title, description, step: howTo.map((step) => ({ '@type': 'HowToStep', name: step.name, text: step.text })) };
23
+ const appSchema: WithContext<SoftwareApplication> = { '@context': 'https://schema.org', '@type': 'SoftwareApplication', name: title, description, applicationCategory: 'BusinessApplication', operatingSystem: 'All', offers: { '@type': 'Offer', price: '0', priceCurrency: 'EUR' }, inLanguage: 'id' };
24
+ const ui: EmbroideryStitchPricingEstimatorUI = {
25
+ intro: 'Susun rencana tusuk di bingkai bordir, lalu lihat usaha produksi dan nilai tenaga kerjanya.', stageLabel: 'Bingkai tusuk', controlsLabel: 'Buat rencana tusuk', resultLabel: 'Perkiraan tenaga kerja dasar', widthLabel: 'Lebar desain', heightLabel: 'Tinggi desain', densityLabel: 'Kepadatan tusuk', stitchLabel: 'Jenis tusuk utama', coloursLabel: 'Warna benang', speedLabel: 'Kecepatan mesin', rateLabel: 'Tarif per jam', widthHint: 'area bordir dalam cm', heightHint: 'area bordir dalam cm', densityHint: 'tusuk per cm', coloursHint: 'warna pertama tidak perlu pergantian', speedHint: 'tusuk per menit', rateHint: 'mata uang per jam', stitchRunning: 'Tusuk lari', stitchSatin: 'Tusuk satin', stitchFill: 'Tusuk isi', stitchTatami: 'Isi tatami', stitchRunningNote: 'Garis ringan dan tulisan dengan cakupan rendah.', stitchSatinNote: 'Kolom dan batas halus dengan jalur benang terarah.', stitchFillNote: 'Cakupan penuh yang menambah benang dan usaha produksi.', stitchTatamiNote: 'Isi berlapis dengan faktor perencanaan tertinggi.', selectStitch: 'Pilih jenis tusuk', emptyResult: 'Masukkan rencana tusuk untuk mengaktifkan bingkai.', stitchesUnit: 'tusuk setara', minutesUnit: 'menit', hoursUnit: 'jam', priceUnit: 'satuan mata uang', areaLabel: 'Luas bordir', effectiveLabel: 'Tusuk setara', stitchTimeLabel: 'Waktu menyulam', productionLabel: 'Waktu produksi', setupLabel: 'Persiapan warna', changesLabel: 'Pergantian warna', basePriceLabel: 'Perkiraan tenaga kerja dasar', estimateBadge: 'Perkiraan siap', attentionBadge: 'Periksa skala', warningHighVolume: 'Jumlah tusuk besar. Lakukan sampel mesin nyata sebelum membuat penawaran.', warningLongRun: 'Proses produksi panjang. Periksa pembingkaian, putus benang, dan penyelesaian secara terpisah.', invalidMessage: 'Gunakan nilai positif untuk ukuran, kepadatan, kecepatan, dan tarif per jam.', formulaTitle: 'Yang dihitung', formulaText: 'Luas dikali kepadatan kuadrat menghasilkan dasar cakupan. Faktor tusuk mengubahnya menjadi tusuk setara, sedangkan setiap pergantian setelah warna pertama menambah 1,75 menit.', noteTitle: 'Batas perencanaan', noteText: 'Ini adalah kalkulator transparan, bukan file mesin yang sudah didigitalisasi atau penawaran akhir. Tambahkan bahan, persiapan, penyelesaian, biaya, pajak, dan margin sendiri.', reset: 'Atur ulang contoh', copied: 'Ringkasan disalin', copySummary: 'Salin ringkasan', canvasAlt: 'Bingkai bordir kain dengan garis benang yang menunjukkan kepadatan saat ini',
26
+ };
27
+ export const content: ToolLocaleContent<EmbroideryStitchPricingEstimatorUI> = { slug, title, description, ui, faq, bibliography, howTo, schemas: [faqSchema, howToSchema, appSchema], seo: [
28
+ { type: 'title', text: 'Cara memperkirakan jumlah tusuk dan harga tenaga kerja bordir', level: 2 },
29
+ { type: 'paragraph', html: 'Desain bordir memiliki dua pertanyaan perencanaan: seberapa banyak pekerjaan benang dalam motif dan berapa lama mesin serta operator akan digunakan. Kalkulator ini menampilkan keduanya dan mengubah ukuran, kepadatan, jenis tusuk, warna, kecepatan, serta tarif menjadi angka perencanaan yang dapat dibandingkan.' },
30
+ { type: 'title', text: 'Model jumlah tusuk', level: 3 },
31
+ { type: 'paragraph', html: 'Dasarnya adalah luas bordir dikalikan kuadrat kepadatan dalam tusuk per sentimeter. Faktor relatif kemudian memperhitungkan keluarga tusuk: tusuk lari lebih ringan, satin menjadi acuan, sedangkan isi dan tatami adalah kasus perencanaan yang makin padat. Ini adalah perkiraan pekerjaan setara, bukan jumlah tepat yang diekspor perangkat lunak digitalisasi.' },
32
+ { type: 'table', headers: ['Masukan', 'Yang berubah', 'Yang tidak dijanjikan'], rows: [['Lebar dan tinggi', 'Luas cakupan dan jumlah tusuk dasar', 'Garis luar tepat dari file digitalisasi'], ['Kepadatan dan jenis tusuk', 'Pekerjaan benang setara dan waktu mesin', 'Pengaturan kualitas universal untuk semua kain'], ['Warna', 'Waktu pergantian setelah warna pertama', 'Jumlah potongan atau putus benang'], ['Kecepatan dan tarif', 'Durasi produksi dan nilai tenaga kerja', 'Penawaran akhir kepada pelanggan']] },
33
+ { type: 'title', text: 'Mengubah perkiraan menjadi harga yang bertanggung jawab', level: 3 },
34
+ { type: 'paragraph', html: 'Harga yang ditampilkan hanya menghitung waktu kerja dikali tarif per jam. Penawaran nyata harus menambahkan digitalisasi, benang, stabilizer, pembingkaian, persiapan mesin, sampel, pemotongan, pengerjaan ulang, penyelesaian, biaya operasional, pajak, dan margin. Pisahkan semua tambahan agar jumlah tusuk kecil tidak menyembunyikan persiapan yang lama.' },
35
+ { type: 'tip', title: 'Uji rencana sebelum membuat penawaran', html: 'Jalankan sampel yang mewakili pada kain dan stabilizer yang akan digunakan. Bandingkan waktunya serta perilaku benang dengan perkiraan, lalu sesuaikan asumsi kecepatan dan persiapan lokal.' },
36
+ { type: 'title', text: 'Membaca rincian produksi', level: 3 },
37
+ { type: 'list', items: ['Tusuk setara menunjukkan beban cakupan setelah faktor tusuk diterapkan.', 'Waktu produksi adalah tusuk setara dibagi kecepatan mesin.', 'Persiapan warna menambah 1,75 menit untuk setiap pergantian setelah yang pertama.', 'Perkiraan tenaga kerja dasar adalah total waktu dibagi 60 lalu dikali tarif per jam.'] },
38
+ ] };
@@ -0,0 +1,38 @@
1
+ import type { FAQPage, HowTo, SoftwareApplication, WithContext } from 'schema-dts';
2
+ import type { ToolLocaleContent } from '../../../types';
3
+ import { bibliography } from '../bibliography';
4
+ import type { EmbroideryStitchPricingEstimatorUI } from '../ui';
5
+
6
+ const slug = 'calcolatore-punti-prezzo-ricamo';
7
+ const title = 'Calcolatore dei punti e del prezzo del ricamo';
8
+ const description = 'Stima punti, tempi di produzione e costo base della manodopera in base a dimensioni, densità, colori, velocità e tariffa oraria.';
9
+ const faq = [
10
+ { question: 'Come funziona la stima del numero di punti?', answer: 'Il calcolatore moltiplica la superficie ricamata per il quadrato della densità dei punti e applica poi un fattore per il tipo di punto. Il risultato confronta il lavoro di produzione, ma non predice il file della macchina.' },
11
+ { question: 'Perché il tipo di punto cambia la stima?', answer: 'Punto filza, satin, riempimento e tatami depositano il filo in modo diverso. Il fattore relativo mostra con chiarezza che una copertura più densa richiede più lavoro.' },
12
+ { question: 'Il numero di colori cambia il numero di punti?', answer: 'No. I colori aggiungono solo il tempo di cambio. Il modello considera 1,75 minuti per ogni cambio dopo il primo colore come ipotesi di pianificazione.' },
13
+ { question: 'Il prezzo calcolato è un preventivo?', answer: 'No. È una stima della manodopera basata sulla tariffa oraria inserita. Filo, stabilizzatore, digitalizzazione, preparazione, finitura, costi generali, tasse e margine non sono inclusi.' },
14
+ ];
15
+ const howTo = [
16
+ { name: 'Misura il disegno', text: 'Inserisci larghezza e altezza ricamate in centimetri. Usa la superficie cucita, non la dimensione completa del telaio.' },
17
+ { name: 'Descrivi il piano punti', text: 'Scegli il tipo dominante, inserisci la densità in punti per centimetro e conta i colori del filo.' },
18
+ { name: 'Aggiungi le ipotesi', text: 'Inserisci la velocità in punti al minuto e la tariffa di manodopera oraria. Mantieni una sola valuta.' },
19
+ { name: 'Leggi la stima', text: 'Usa punti equivalenti, tempo di produzione, preparazione e costo base per confrontare i disegni prima della digitalizzazione o del preventivo.' },
20
+ ];
21
+ const faqSchema: WithContext<FAQPage> = { '@context': 'https://schema.org', '@type': 'FAQPage', mainEntity: faq.map((item) => ({ '@type': 'Question', name: item.question, acceptedAnswer: { '@type': 'Answer', text: item.answer } })) };
22
+ const howToSchema: WithContext<HowTo> = { '@context': 'https://schema.org', '@type': 'HowTo', name: title, description, step: howTo.map((step) => ({ '@type': 'HowToStep', name: step.name, text: step.text })) };
23
+ const appSchema: WithContext<SoftwareApplication> = { '@context': 'https://schema.org', '@type': 'SoftwareApplication', name: title, description, applicationCategory: 'BusinessApplication', operatingSystem: 'All', offers: { '@type': 'Offer', price: '0', priceCurrency: 'EUR' }, inLanguage: 'it' };
24
+ const ui: EmbroideryStitchPricingEstimatorUI = {
25
+ intro: 'Componi il tuo piano punti nel telaio e scopri l\'impegno di produzione e il suo valore di manodopera.', stageLabel: 'Il telaio da ricamo', controlsLabel: 'Crea il piano punti', resultLabel: 'Costo base della manodopera', widthLabel: 'Larghezza del disegno', heightLabel: 'Altezza del disegno', densityLabel: 'Densità dei punti', stitchLabel: 'Punto dominante', coloursLabel: 'Colori del filo', speedLabel: 'Velocità macchina', rateLabel: 'Tariffa oraria', widthHint: 'superficie ricamata in cm', heightHint: 'superficie ricamata in cm', densityHint: 'punti per cm', coloursHint: 'il primo colore non richiede un cambio', speedHint: 'punti al minuto', rateHint: 'la tua valuta all\'ora', stitchRunning: 'Punto filza', stitchSatin: 'Punto satin', stitchFill: 'Punto di riempimento', stitchTatami: 'Riempimento tatami', stitchRunningNote: 'Contorni leggeri e lettere con copertura ridotta.', stitchSatinNote: 'Colonne e bordi lisci con un percorso del filo concentrato.', stitchFillNote: 'Copertura piena che aggiunge filo e tempo di produzione.', stitchTatamiNote: 'Riempimento a strati con il fattore di pianificazione più alto.', selectStitch: 'Scegli un tipo di punto', emptyResult: 'Inserisci un piano per attivare il telaio.', stitchesUnit: 'punti equivalenti', minutesUnit: 'minuti', hoursUnit: 'ore', priceUnit: 'unità monetarie', areaLabel: 'Superficie ricamata', effectiveLabel: 'Punti equivalenti', stitchTimeLabel: 'Tempo di ricamo', productionLabel: 'Tempo di produzione', setupLabel: 'Preparazione colori', changesLabel: 'Cambi colore', basePriceLabel: 'Costo base della manodopera', estimateBadge: 'Stima pronta', attentionBadge: 'Controlla la scala', warningHighVolume: 'Grande volume di punti. Fai una prova reale prima del preventivo.', warningLongRun: 'Produzione lunga. Controlla separatamente il telaio, le rotture del filo e la finitura.', invalidMessage: 'Usa valori positivi per dimensioni, densità, velocità e tariffa oraria.', formulaTitle: 'Cosa viene contato', formulaText: 'La superficie moltiplicata per la densità al quadrato crea la base di copertura. Il fattore del punto la trasforma in punti equivalenti; ogni cambio dopo il primo colore aggiunge 1,75 minuti.', noteTitle: 'Limite della pianificazione', noteText: 'È un calcolatore trasparente, non un file macchina digitalizzato né un preventivo finale. Aggiungi materiali, preparazione, finitura, costi, tasse e margine.', reset: 'Ripristina esempio', copied: 'Riepilogo copiato', copySummary: 'Copia riepilogo', canvasAlt: 'Telaio da ricamo in tessuto con linee di filo che mostrano la densità attuale',
26
+ };
27
+ export const content: ToolLocaleContent<EmbroideryStitchPricingEstimatorUI> = { slug, title, description, ui, faq, bibliography, howTo, schemas: [faqSchema, howToSchema, appSchema], seo: [
28
+ { type: 'title', text: 'Come stimare punti e prezzo della manodopera di ricamo', level: 2 },
29
+ { type: 'paragraph', html: 'Un disegno da ricamo pone due domande di pianificazione: quanto lavoro di filo contiene il motivo e per quanto tempo la macchina e l\'operatore saranno impegnati? Questo strumento mantiene visibili entrambe e trasforma dimensioni, densità, punto, colori, velocità e tariffa in un valore confrontabile.' },
30
+ { type: 'title', text: 'Il modello dei punti', level: 3 },
31
+ { type: 'paragraph', html: 'La base è la superficie ricamata moltiplicata per il quadrato della densità in punti per centimetro. Un fattore relativo considera la famiglia di punti: il punto filza è più leggero, il satin è il riferimento e i riempimenti sono casi di pianificazione progressivamente più densi. È una stima del lavoro equivalente, non il conteggio esatto esportato da un software di digitalizzazione.' },
32
+ { type: 'table', headers: ['Input', 'Cosa cambia', 'Cosa non promette'], rows: [['Larghezza e altezza', 'Superficie coperta e punti di base', 'Il contorno esatto di un file digitalizzato'], ['Densità e tipo di punto', 'Lavoro equivalente e tempo macchina', 'Un\'impostazione di qualità universale per ogni tessuto'], ['Colori', 'Tempo di cambio dopo il primo colore', 'Il numero di tagli o rotture del filo'], ['Velocità e tariffa', 'Durata di produzione e valore del lavoro', 'Un preventivo finale per il cliente']] },
33
+ { type: 'title', text: 'Trasformare una stima in un prezzo responsabile', level: 3 },
34
+ { type: 'paragraph', html: 'Il prezzo mostrato moltiplica soltanto il tempo di lavoro per la tariffa oraria. Un preventivo reale deve aggiungere digitalizzazione, filo, stabilizzatore, intelaiatura, preparazione, campioni, tagli, rilavorazioni, finitura, costi generali, tasse e margine. Mantieni queste voci separate, così un basso numero di punti non nasconde una preparazione laboriosa.' },
35
+ { type: 'tip', title: 'Prova il piano prima del preventivo', html: 'Esegui un campione rappresentativo sul tessuto e sullo stabilizzatore previsti. Confronta tempo e comportamento del filo con la stima e regola le ipotesi locali di velocità e preparazione.' },
36
+ { type: 'title', text: 'Leggere il dettaglio della produzione', level: 3 },
37
+ { type: 'list', items: ['I punti equivalenti mostrano il carico di copertura dopo l\'applicazione del fattore.', 'Il tempo di produzione è dato dai punti equivalenti divisi per la velocità della macchina.', 'La preparazione dei colori aggiunge 1,75 minuti per ogni cambio dopo il primo.', 'Il costo base è il tempo totale diviso per 60 e moltiplicato per la tariffa oraria.'] },
38
+ ] };
@@ -0,0 +1,38 @@
1
+ import type { FAQPage, HowTo, SoftwareApplication, WithContext } from 'schema-dts';
2
+ import type { ToolLocaleContent } from '../../../types';
3
+ import { bibliography } from '../bibliography';
4
+ import type { EmbroideryStitchPricingEstimatorUI } from '../ui';
5
+
6
+ const slug = 'embroidery-stitch-count-pricing-estimator';
7
+ const title = '刺繍ステッチ数と価格の見積もり計算機';
8
+ const description = 'デザインのサイズ、ステッチ密度、色数、速度、時間単価から、刺繍ステッチ数、製作時間、基本労務費を見積もります。';
9
+ const faq = [
10
+ { question: 'ステッチ数はどのように見積もりますか?', answer: '刺繍面積にステッチ密度の二乗を掛け、さらにステッチ種類の係数を適用します。結果は製作負荷を比較するための換算ステッチ数であり、ミシンファイルの予測ではありません。' },
11
+ { question: 'ステッチの種類で見積もりが変わるのはなぜですか?', answer: 'ランニング、サテン、フィル、タタミでは糸の配置が異なります。相対係数により、密度の高いカバーほど製作作業が増えることを透明に示します。' },
12
+ { question: '色数でステッチ数は変わりますか?', answer: 'いいえ。色数は交換時間だけを追加します。最初の色の後の交換1回につき1.75分を計画上の仮定として加算します。' },
13
+ { question: '計算された価格は見積書の金額ですか?', answer: 'いいえ。入力した時間単価に基づく基本労務費の見積もりです。糸、接着芯、デジタイズ、段取り、仕上げ、諸経費、税金、利益は含まれません。' },
14
+ ];
15
+ const howTo = [
16
+ { name: 'デザインを測る', text: '刺繍する幅と高さをセンチメートルで入力します。枠全体ではなく、実際にステッチを入れる面積を使います。' },
17
+ { name: 'ステッチ計画を入力する', text: '主なステッチ種類を選び、1センチメートルあたりの密度と糸の色数を入力します。' },
18
+ { name: '製作条件を加える', text: '毎分のステッチ数と1時間あたりの労務単価を入力します。通貨単位は統一してください。' },
19
+ { name: '計画値を読む', text: '換算ステッチ数、製作時間、段取り時間、基本価格を使い、デジタイズや見積もりの前にデザインを比較します。' },
20
+ ];
21
+ const faqSchema: WithContext<FAQPage> = { '@context': 'https://schema.org', '@type': 'FAQPage', mainEntity: faq.map((item) => ({ '@type': 'Question', name: item.question, acceptedAnswer: { '@type': 'Answer', text: item.answer } })) };
22
+ const howToSchema: WithContext<HowTo> = { '@context': 'https://schema.org', '@type': 'HowTo', name: title, description, step: howTo.map((step) => ({ '@type': 'HowToStep', name: step.name, text: step.text })) };
23
+ const appSchema: WithContext<SoftwareApplication> = { '@context': 'https://schema.org', '@type': 'SoftwareApplication', name: title, description, applicationCategory: 'BusinessApplication', operatingSystem: 'All', offers: { '@type': 'Offer', price: '0', priceCurrency: 'EUR' }, inLanguage: 'ja' };
24
+ const ui: EmbroideryStitchPricingEstimatorUI = {
25
+ intro: '刺繍枠の中でステッチ計画を組み、製作負荷と労務価値を確認します。', stageLabel: 'ステッチ枠', controlsLabel: 'ステッチ計画を作る', resultLabel: '基本労務費の見積もり', widthLabel: 'デザイン幅', heightLabel: 'デザイン高さ', densityLabel: 'ステッチ密度', stitchLabel: '主なステッチ', coloursLabel: '糸の色数', speedLabel: 'ミシン速度', rateLabel: '時間単価', widthHint: '刺繍面積 cm', heightHint: '刺繍面積 cm', densityHint: '1 cmあたりのステッチ', coloursHint: '最初の色には交換なし', speedHint: '毎分のステッチ数', rateHint: '1時間あたりの通貨', stitchRunning: 'ランニングステッチ', stitchSatin: 'サテンステッチ', stitchFill: 'フィルステッチ', stitchTatami: 'タタミフィル', stitchRunningNote: 'カバーが少ない細い輪郭や文字。', stitchSatinNote: '糸の経路を集中させた滑らかな柱や縁。', stitchFillNote: '糸と製作負荷を増やすしっかりしたカバー。', stitchTatamiNote: 'このモデルで最も高い計画係数の重ねフィル。', selectStitch: 'ステッチ種類を選ぶ', emptyResult: 'ステッチ計画を入力して枠を動かします。', stitchesUnit: '換算ステッチ', minutesUnit: '分', hoursUnit: '時間', priceUnit: '通貨単位', areaLabel: '刺繍面積', effectiveLabel: '換算ステッチ数', stitchTimeLabel: 'ステッチ時間', productionLabel: '製作時間', setupLabel: '色替え準備', changesLabel: '色替え回数', basePriceLabel: '基本労務費の見積もり', estimateBadge: '見積もり完了', attentionBadge: '規模を確認', warningHighVolume: 'ステッチ数が多い設定です。見積もり前に実機サンプルを試してください。', warningLongRun: '長い製作時間です。枠張り、糸切れ、仕上げ時間を別に確認してください。', invalidMessage: 'サイズ、密度、速度、時間単価には正の値を入力してください。', formulaTitle: '計算されるもの', formulaText: '面積に密度の二乗を掛けてカバーの基準値を作ります。ステッチ係数で換算ステッチ数に変換し、最初の色の後の交換ごとに1.75分を加えます。', noteTitle: '計画値の範囲', noteText: '透明性のある見積もり計算機であり、デジタイズ済みミシンファイルや完成した見積書ではありません。材料、段取り、仕上げ、諸経費、税金、利益を別途加えてください。', reset: '例をリセット', copied: '概要をコピーしました', copySummary: '概要をコピー', canvasAlt: '現在の密度を糸の線で示す布製の刺繍枠',
26
+ };
27
+ export const content: ToolLocaleContent<EmbroideryStitchPricingEstimatorUI> = { slug, title, description, ui, faq, bibliography, howTo, schemas: [faqSchema, howToSchema, appSchema], seo: [
28
+ { type: 'title', text: '刺繍のステッチ数と労務価格を見積もる方法', level: 2 },
29
+ { type: 'paragraph', html: '刺繍デザインには、モチーフにどれだけ糸の作業が含まれるか、そしてミシンと作業者が何分拘束されるかという二つの計画上の問いがあります。この計算機は両方を見える状態にし、サイズ、密度、ステッチ、色数、速度、単価から比較できる計画値を作ります。' },
30
+ { type: 'title', text: 'ステッチ数のモデル', level: 3 },
31
+ { type: 'paragraph', html: '基準値は、刺繍面積に1センチメートルあたりの密度の二乗を掛けたものです。相対係数でステッチの種類を考慮します。ランニングは軽く、サテンを基準に、フィルとタタミはより密な計画ケースです。これは換算作業量の見積もりであり、デジタイズソフトが出す正確な数ではありません。' },
32
+ { type: 'table', headers: ['入力', '変わるもの', '保証しないもの'], rows: [['幅と高さ', 'カバー面積と基準ステッチ数', 'デジタイズファイルの正確な輪郭'], ['密度とステッチ種類', '換算作業量とミシン時間', 'すべての生地に通用する品質設定'], ['色数', '最初の色の後の交換時間', '糸切りや糸切れの回数'], ['速度と単価', '製作時間と労務価値', '顧客向けの最終見積もり']] },
33
+ { type: 'title', text: '見積もりを責任ある価格に変える', level: 3 },
34
+ { type: 'paragraph', html: '表示価格は作業時間に時間単価を掛けただけのものです。実際の見積もりには、デジタイズ、糸、接着芯、枠張り、ミシンの段取り、試作品、糸切り、手直し、仕上げ、諸経費、税金、利益を加える必要があります。項目を分けておくと、少ないステッチ数に長い準備作業が隠れません。' },
35
+ { type: 'tip', title: '見積もり前に計画を試す', html: '実際に使う生地と接着芯で代表的なサンプルを縫います。時間と糸の状態を計算結果と比べ、機械ごとの速度や段取りの仮定を調整してください。' },
36
+ { type: 'title', text: '製作内訳の読み方', level: 3 },
37
+ { type: 'list', items: ['換算ステッチ数は、係数適用後のカバー作業量を示します。', '製作時間は換算ステッチ数をミシン速度で割った値です。', '色替え準備は最初の色の後の交換ごとに1.75分を加えます。', '基本労務費は合計時間を60で割り、時間単価を掛けた値です。'] },
38
+ ] };
@@ -0,0 +1,38 @@
1
+ import type { FAQPage, HowTo, SoftwareApplication, WithContext } from 'schema-dts';
2
+ import type { ToolLocaleContent } from '../../../types';
3
+ import { bibliography } from '../bibliography';
4
+ import type { EmbroideryStitchPricingEstimatorUI } from '../ui';
5
+
6
+ const slug = 'embroidery-stitch-count-pricing-estimator';
7
+ const title = '자수 스티치 수와 가격 견적 계산기';
8
+ const description = '디자인 크기, 스티치 밀도, 색상 수, 속도, 시간당 요율을 바탕으로 자수 스티치 수와 제작 시간, 기본 인건비를 추정합니다.';
9
+ const faq = [
10
+ { question: '스티치 수 견적은 어떻게 계산하나요?', answer: '계산기는 자수 면적에 스티치 밀도의 제곱을 곱한 뒤 스티치 종류 계수를 적용합니다. 결과는 제작 부담을 비교하기 위한 환산 스티치 수이며 기계 파일을 예측하지는 않습니다.' },
11
+ { question: '스티치 종류에 따라 견적이 달라지는 이유는 무엇인가요?', answer: '러닝, 새틴, 필, 타타미 스티치는 실을 놓는 방식이 다릅니다. 상대 계수를 사용해 밀도가 높은 커버일수록 제작 작업이 늘어나는 모습을 투명하게 보여줍니다.' },
12
+ { question: '색상 수가 스티치 수를 바꾸나요?', answer: '아니요. 색상 수는 교체 시간만 추가합니다. 첫 색상 이후 교체마다 1.75분을 계획 가정으로 더합니다.' },
13
+ { question: '계산된 가격은 최종 견적서인가요?', answer: '아닙니다. 입력한 시간당 요율을 사용한 기본 인건비 추정치입니다. 실, 심지, 디지타이징, 준비, 마감, 간접비, 세금, 이윤은 포함되지 않습니다.' },
14
+ ];
15
+ const howTo = [
16
+ { name: '디자인 측정', text: '자수할 너비와 높이를 센티미터로 입력합니다. 전체 자수틀 크기가 아니라 실제 스티치 영역을 사용하세요.' },
17
+ { name: '스티치 계획 설명', text: '주요 스티치 종류를 고르고 센티미터당 밀도와 실 색상 수를 입력합니다.' },
18
+ { name: '제작 가정 추가', text: '분당 스티치 수와 시간당 인건비를 입력합니다. 통화 단위는 일관되게 유지하세요.' },
19
+ { name: '계획 견적 확인', text: '환산 스티치 수, 제작 시간, 준비 시간, 기본 가격을 사용해 디지타이징이나 견적 전에 디자인을 비교합니다.' },
20
+ ];
21
+ const faqSchema: WithContext<FAQPage> = { '@context': 'https://schema.org', '@type': 'FAQPage', mainEntity: faq.map((item) => ({ '@type': 'Question', name: item.question, acceptedAnswer: { '@type': 'Answer', text: item.answer } })) };
22
+ const howToSchema: WithContext<HowTo> = { '@context': 'https://schema.org', '@type': 'HowTo', name: title, description, step: howTo.map((step) => ({ '@type': 'HowToStep', name: step.name, text: step.text })) };
23
+ const appSchema: WithContext<SoftwareApplication> = { '@context': 'https://schema.org', '@type': 'SoftwareApplication', name: title, description, applicationCategory: 'BusinessApplication', operatingSystem: 'All', offers: { '@type': 'Offer', price: '0', priceCurrency: 'EUR' }, inLanguage: 'ko' };
24
+ const ui: EmbroideryStitchPricingEstimatorUI = {
25
+ intro: '자수틀 안에서 스티치 계획을 만들고 제작 부담과 인건비 가치를 확인하세요.', stageLabel: '스티치 자수틀', controlsLabel: '스티치 계획 만들기', resultLabel: '기본 인건비 견적', widthLabel: '디자인 너비', heightLabel: '디자인 높이', densityLabel: '스티치 밀도', stitchLabel: '주요 스티치', coloursLabel: '실 색상 수', speedLabel: '기계 속도', rateLabel: '시간당 요율', widthHint: '자수 영역 cm', heightHint: '자수 영역 cm', densityHint: 'cm당 스티치', coloursHint: '첫 색상은 교체 없음', speedHint: '분당 스티치', rateHint: '시간당 통화 금액', stitchRunning: '러닝 스티치', stitchSatin: '새틴 스티치', stitchFill: '필 스티치', stitchTatami: '타타미 필', stitchRunningNote: '커버가 적은 가벼운 윤곽과 글자.', stitchSatinNote: '실 경로가 집중된 매끄러운 기둥과 테두리.', stitchFillNote: '실과 제작 부담을 늘리는 단단한 커버.', stitchTatamiNote: '이 모델에서 가장 높은 계획 계수를 가진 겹침 필.', selectStitch: '스티치 종류 선택', emptyResult: '스티치 계획을 입력하면 자수틀이 활성화됩니다.', stitchesUnit: '환산 스티치', minutesUnit: '분', hoursUnit: '시간', priceUnit: '통화 단위', areaLabel: '자수 면적', effectiveLabel: '환산 스티치 수', stitchTimeLabel: '스티치 시간', productionLabel: '제작 시간', setupLabel: '색상 준비', changesLabel: '색상 교체', basePriceLabel: '기본 인건비 견적', estimateBadge: '견적 준비 완료', attentionBadge: '규모 확인', warningHighVolume: '스티치 수가 많습니다. 견적 전에 실제 기계 샘플을 테스트하세요.', warningLongRun: '제작 시간이 깁니다. 자수틀 작업, 실 끊김, 마감 시간을 별도로 확인하세요.', invalidMessage: '크기, 밀도, 속도, 시간당 요율에 양수를 입력하세요.', formulaTitle: '계산되는 항목', formulaText: '면적에 밀도의 제곱을 곱해 커버 기준을 만듭니다. 스티치 계수로 환산 스티치가 되고 첫 색상 이후 교체마다 1.75분이 추가됩니다.', noteTitle: '계획의 한계', noteText: '투명한 추정 계산기이며 디지타이징된 기계 파일이나 최종 견적서가 아닙니다. 재료, 준비, 마감, 간접비, 세금, 이윤은 직접 더하세요.', reset: '예시 초기화', copied: '요약 복사 완료', copySummary: '요약 복사', canvasAlt: '현재 밀도를 실 선으로 보여주는 천 자수틀',
26
+ };
27
+ export const content: ToolLocaleContent<EmbroideryStitchPricingEstimatorUI> = { slug, title, description, ui, faq, bibliography, howTo, schemas: [faqSchema, howToSchema, appSchema], seo: [
28
+ { type: 'title', text: '자수 스티치 수와 인건비를 추정하는 방법', level: 2 },
29
+ { type: 'paragraph', html: '자수 디자인에는 두 가지 계획 질문이 있습니다. 무늬에 얼마나 많은 실 작업이 들어가며 기계와 작업자가 얼마나 오래 묶이는가입니다. 이 계산기는 두 항목을 함께 보여 주고 크기, 밀도, 스티치, 색상, 속도, 요율을 비교 가능한 계획 값으로 바꿉니다.' },
30
+ { type: 'title', text: '스티치 수 모델', level: 3 },
31
+ { type: 'paragraph', html: '기준은 자수 면적에 센티미터당 밀도의 제곱을 곱한 값입니다. 상대 계수로 스티치 계열을 반영합니다. 러닝은 가볍고 새틴은 기준이며 필과 타타미는 점점 밀도가 높은 계획 사례입니다. 이는 환산 작업량의 추정치이며 디지타이징 소프트웨어가 내보내는 정확한 수가 아닙니다.' },
32
+ { type: 'table', headers: ['입력', '변경되는 항목', '보장하지 않는 항목'], rows: [['너비와 높이', '커버 면적과 기본 스티치 수', '디지타이징 파일의 정확한 외곽선'], ['밀도와 스티치 종류', '환산 실 작업과 기계 시간', '모든 원단에 맞는 보편적 품질 설정'], ['색상', '첫 색상 이후 교체 시간', '실 자르기나 실 끊김 횟수'], ['속도와 요율', '제작 시간과 인건비 가치', '고객에게 제공할 최종 견적']] },
33
+ { type: 'title', text: '추정치를 책임 있는 가격으로 바꾸기', level: 3 },
34
+ { type: 'paragraph', html: '표시 가격은 작업 시간에 시간당 요율을 곱한 값일 뿐입니다. 실제 견적에는 디지타이징, 실, 심지, 자수틀 작업, 기계 준비, 샘플, 실 자르기, 재작업, 마감, 간접비, 세금, 이윤을 더해야 합니다. 항목을 분리해 두면 적은 스티치 수 뒤에 긴 준비 작업이 숨지 않습니다.' },
35
+ { type: 'tip', title: '견적 전에 계획을 테스트하세요', html: '사용할 원단과 심지로 대표 샘플을 제작하세요. 시간과 실의 움직임을 추정치와 비교한 뒤 기계별 속도와 준비 가정을 조정하세요.' },
36
+ { type: 'title', text: '제작 내역 읽기', level: 3 },
37
+ { type: 'list', items: ['환산 스티치 수는 계수를 적용한 뒤의 커버 작업량을 보여 줍니다.', '제작 시간은 환산 스티치 수를 기계 속도로 나눈 값입니다.', '색상 준비는 첫 색상 이후 교체마다 1.75분을 더합니다.', '기본 인건비는 전체 시간을 60으로 나눈 뒤 시간당 요율을 곱한 값입니다.'] },
38
+ ] };
@@ -0,0 +1,38 @@
1
+ import type { FAQPage, HowTo, SoftwareApplication, WithContext } from 'schema-dts';
2
+ import type { ToolLocaleContent } from '../../../types';
3
+ import { bibliography } from '../bibliography';
4
+ import type { EmbroideryStitchPricingEstimatorUI } from '../ui';
5
+
6
+ const slug = 'schatting-steekenaantal-prijs-borduren';
7
+ const title = 'Schatting van steken en borduurprijs';
8
+ const description = 'Schat het aantal borduursteken, de productietijd en een basisprijs voor arbeid op basis van formaat, steekdichtheid, kleuren, snelheid en uurtarief.';
9
+ const faq = [
10
+ { question: 'Hoe werkt de schatting van het aantal steken?', answer: 'De calculator vermenigvuldigt het geborduurde oppervlak met het kwadraat van de steekdichtheid en past daarna een factor voor het steektype toe. Zo ontstaat een vergelijkbare werklast, geen voorspelling van een machinebestand.' },
11
+ { question: 'Waarom verandert het steektype de schatting?', answer: 'Doorlopende steek, satijn, vulsteek en tatami leggen draad op verschillende manieren. De transparante relatieve factor laat zien dat een dichtere bedekking meer productiewerk vraagt.' },
12
+ { question: 'Verandert het aantal kleuren het aantal steken?', answer: 'Nee. Het aantal kleuren voegt alleen wisseltijd toe. Het model rekent 1,75 minuut voor elke wissel na de eerste kleur als planningsaanname.' },
13
+ { question: 'Is de berekende prijs een offerte?', answer: 'Nee. Het is een schatting van arbeid op basis van het ingevoerde uurtarief. Draad, versteviging, digitaliseren, instellen, afwerking, overhead, belasting en winstmarge zijn niet inbegrepen.' },
14
+ ];
15
+ const howTo = [
16
+ { name: 'Meet het ontwerp', text: 'Voer de geborduurde breedte en hoogte in centimeters in. Gebruik het gestikte oppervlak en niet de volledige borduurring.' },
17
+ { name: 'Beschrijf het steekplan', text: 'Kies het dominante steektype, voer de dichtheid in steken per centimeter in en tel de draadkleuren.' },
18
+ { name: 'Voeg productieaannames toe', text: 'Voer de machinesnelheid in steken per minuut en je arbeidsloon per uur in. Gebruik steeds dezelfde munteenheid.' },
19
+ { name: 'Lees de planningsschatting', text: 'Gebruik equivalente steken, productietijd, insteltijd en basisprijs om ontwerpen te vergelijken voor je gaat digitaliseren of offreren.' },
20
+ ];
21
+ const faqSchema: WithContext<FAQPage> = { '@context': 'https://schema.org', '@type': 'FAQPage', mainEntity: faq.map((item) => ({ '@type': 'Question', name: item.question, acceptedAnswer: { '@type': 'Answer', text: item.answer } })) };
22
+ const howToSchema: WithContext<HowTo> = { '@context': 'https://schema.org', '@type': 'HowTo', name: title, description, step: howTo.map((step) => ({ '@type': 'HowToStep', name: step.name, text: step.text })) };
23
+ const appSchema: WithContext<SoftwareApplication> = { '@context': 'https://schema.org', '@type': 'SoftwareApplication', name: title, description, applicationCategory: 'BusinessApplication', operatingSystem: 'All', offers: { '@type': 'Offer', price: '0', priceCurrency: 'EUR' }, inLanguage: 'nl' };
24
+ const ui: EmbroideryStitchPricingEstimatorUI = {
25
+ intro: 'Bouw je steekplan in de borduurring en bekijk de productiewerklast en arbeidswaarde.', stageLabel: 'De borduurring', controlsLabel: 'Bouw het steekplan', resultLabel: 'Basisprijs voor arbeid', widthLabel: 'Breedte van het ontwerp', heightLabel: 'Hoogte van het ontwerp', densityLabel: 'Steekdichtheid', stitchLabel: 'Dominant steektype', coloursLabel: 'Draadkleuren', speedLabel: 'Machinesnelheid', rateLabel: 'Uurtarief', widthHint: 'gestikt oppervlak in cm', heightHint: 'gestikt oppervlak in cm', densityHint: 'steken per cm', coloursHint: 'de eerste kleur heeft geen wissel nodig', speedHint: 'steken per minuut', rateHint: 'jouw valuta per uur', stitchRunning: 'Doorlopende steek', stitchSatin: 'Satijnsteek', stitchFill: 'Vulsteek', stitchTatami: 'Tatamivulling', stitchRunningNote: 'Lichte contouren en letters met weinig bedekking.', stitchSatinNote: 'Gladde kolommen en randen met een gericht draadpad.', stitchFillNote: 'Volledige bedekking die draad en productiewerk toevoegt.', stitchTatamiNote: 'Gelaagde vulling met de hoogste planningsfactor in dit model.', selectStitch: 'Kies een steektype', emptyResult: 'Voer een steekplan in om de ring te activeren.', stitchesUnit: 'equivalente steken', minutesUnit: 'minuten', hoursUnit: 'uur', priceUnit: 'valuta-eenheden', areaLabel: 'Geborduurd oppervlak', effectiveLabel: 'Equivalente steken', stitchTimeLabel: 'Steektijd', productionLabel: 'Productietijd', setupLabel: 'Kleurinstelling', changesLabel: 'Kleurwissels', basePriceLabel: 'Basisprijs voor arbeid', estimateBadge: 'Schatting klaar', attentionBadge: 'Schaal controleren', warningHighVolume: 'Groot aantal steken. Maak een echte machineproef voordat je een offerte maakt.', warningLongRun: 'Lange productierun. Controleer het opspannen, draadbreuken en afwerking apart.', invalidMessage: 'Gebruik positieve waarden voor formaat, dichtheid, snelheid en uurtarief.', formulaTitle: 'Wat wordt geteld', formulaText: 'Oppervlak maal dichtheid in het kwadraat geeft de basis voor bedekking. De steekfactor maakt er equivalente steken van en elke wissel na de eerste kleur voegt 1,75 minuut toe.', noteTitle: 'Planningsgrens', noteText: 'Dit is een transparante schatting, geen gedigitaliseerd machinebestand of definitieve offerte. Voeg materiaal, instelling, afwerking, overhead, belasting en marge zelf toe.', reset: 'Voorbeeld resetten', copied: 'Samenvatting gekopieerd', copySummary: 'Samenvatting kopiëren', canvasAlt: 'Borduurring van stof met draadlijnen die de huidige dichtheid tonen',
26
+ };
27
+ export const content: ToolLocaleContent<EmbroideryStitchPricingEstimatorUI> = { slug, title, description, ui, faq, bibliography, howTo, schemas: [faqSchema, howToSchema, appSchema], seo: [
28
+ { type: 'title', text: 'Zo schat je steken en arbeidsprijs voor borduurwerk', level: 2 },
29
+ { type: 'paragraph', html: 'Een borduurontwerp stelt twee planningsvragen: hoeveel draadwerk zit er in het motief en hoe lang zijn machine en bediener bezig? Deze calculator houdt beide zichtbaar en zet formaat, dichtheid, steektype, kleuren, snelheid en tarief om in een vergelijkbare planningswaarde.' },
30
+ { type: 'title', text: 'Het model voor steekenaantal', level: 3 },
31
+ { type: 'paragraph', html: 'De basis is het geborduurde oppervlak maal het kwadraat van de dichtheid in steken per centimeter. Een relatieve factor houdt rekening met de steekfamilie: doorlopende steek is lichter, satijn is het ijkpunt en vulling en tatami zijn steeds dichtere planningsgevallen. Dit is een schatting van equivalent werk, niet het exacte aantal uit digitaliseersoftware.' },
32
+ { type: 'table', headers: ['Invoer', 'Wat het verandert', 'Wat het niet belooft'], rows: [['Breedte en hoogte', 'Bedekkingsoppervlak en basissteken', 'De exacte omtrek van een gedigitaliseerd bestand'], ['Dichtheid en steektype', 'Equivalente draadwerklast en machinetijd', 'Een universele kwaliteitsinstelling voor elke stof'], ['Kleuren', 'Wisseltijd na de eerste kleur', 'Het aantal draadknippen of draadbreuken'], ['Snelheid en tarief', 'Productieduur en arbeidswaarde', 'Een definitieve klantofferte']] },
33
+ { type: 'title', text: 'Maak van een schatting een verantwoorde prijs', level: 3 },
34
+ { type: 'paragraph', html: 'De getoonde prijs is alleen werktijd maal je uurtarief. Een echte offerte moet digitaliseren, draad, versteviging, opspannen, machine-instelling, proefstukken, knippen, herstelwerk, afwerking, overhead, belasting en marge toevoegen. Houd deze posten zichtbaar zodat een laag steekenaantal geen lange voorbereiding verbergt.' },
35
+ { type: 'tip', title: 'Test het plan voor je offert', html: 'Maak een representatief proefstuk op de bedoelde stof en versteviging. Vergelijk tijd en draadgedrag met de schatting en pas je lokale aannames voor snelheid en instelling aan.' },
36
+ { type: 'title', text: 'De productieverdeling lezen', level: 3 },
37
+ { type: 'list', items: ['Equivalente steken tonen de bedekkingswerklast na toepassing van de steekfactor.', 'Productietijd is het aantal equivalente steken gedeeld door de machinesnelheid.', 'Kleurinstelling voegt 1,75 minuut toe voor elke wissel na de eerste kleur.', 'De basisprijs is de totale tijd gedeeld door 60 en vermenigvuldigd met het uurtarief.'] },
38
+ ] };