assemblerpdf 1.0.0__py3-none-any.whl

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (85) hide show
  1. assemblerpdf/__init__.py +16 -0
  2. assemblerpdf/assemblers/__init__.py +9 -0
  3. assemblerpdf/assemblers/base.py +120 -0
  4. assemblerpdf/assemblers/form.py +257 -0
  5. assemblerpdf/assemblers/report.py +44 -0
  6. assemblerpdf/core.py +193 -0
  7. assemblerpdf/fonts/Inter-Bold.ttf +0 -0
  8. assemblerpdf/fonts/Inter-Medium.ttf +0 -0
  9. assemblerpdf/fonts/Inter-Regular.ttf +0 -0
  10. assemblerpdf/img/Logo-unp-rojo.png +0 -0
  11. assemblerpdf/img/logo-mininterior-rojo.jpg +0 -0
  12. assemblerpdf/templates/assemblerpdf/checkbox.html +16 -0
  13. assemblerpdf/templates/assemblerpdf/footer.html +16 -0
  14. assemblerpdf/templates/assemblerpdf/grid_row.html +7 -0
  15. assemblerpdf/templates/assemblerpdf/header.html +19 -0
  16. assemblerpdf/templates/assemblerpdf/input.html +12 -0
  17. assemblerpdf/templates/assemblerpdf/radio.html +14 -0
  18. assemblerpdf/templates/assemblerpdf/section.html +6 -0
  19. assemblerpdf/templates/assemblerpdf/signature.html +14 -0
  20. assemblerpdf/templates/assemblerpdf/style.html +318 -0
  21. assemblerpdf/templates/assemblerpdf/textarea.html +12 -0
  22. assemblerpdf/templates/sistema/anexos.html +38 -0
  23. assemblerpdf/templates/sistema/anexos_limpio.html +52 -0
  24. assemblerpdf/templates/sistema/archivese.html +18 -0
  25. assemblerpdf/templates/sistema/autoriza_envio.html +33 -0
  26. assemblerpdf/templates/sistema/checkbox.html +41 -0
  27. assemblerpdf/templates/sistema/control_cambios.html +43 -0
  28. assemblerpdf/templates/sistema/datos_basicosinf.html +16 -0
  29. assemblerpdf/templates/sistema/datos_ot.html +33 -0
  30. assemblerpdf/templates/sistema/encaso_de.html +5 -0
  31. assemblerpdf/templates/sistema/fiila_dos_check.html +54 -0
  32. assemblerpdf/templates/sistema/fila_cinco_zona.html +54 -0
  33. assemblerpdf/templates/sistema/fila_cuatro.html +20 -0
  34. assemblerpdf/templates/sistema/fila_cuatro_si_no.html +46 -0
  35. assemblerpdf/templates/sistema/fila_cuatro_zona.html +48 -0
  36. assemblerpdf/templates/sistema/fila_dos.html +12 -0
  37. assemblerpdf/templates/sistema/fila_dos_zona.html +40 -0
  38. assemblerpdf/templates/sistema/fila_instructivo.html +16 -0
  39. assemblerpdf/templates/sistema/fila_tres.html +16 -0
  40. assemblerpdf/templates/sistema/fila_tres_checkbox.html +66 -0
  41. assemblerpdf/templates/sistema/fila_tres_zona.html +45 -0
  42. assemblerpdf/templates/sistema/fila_uno.html +8 -0
  43. assemblerpdf/templates/sistema/firma.html +10 -0
  44. assemblerpdf/templates/sistema/firma_doble.html +32 -0
  45. assemblerpdf/templates/sistema/firmaop2.html +17 -0
  46. assemblerpdf/templates/sistema/firmas_oficializacion.html +66 -0
  47. assemblerpdf/templates/sistema/hechos_sobrevinientes.html +261 -0
  48. assemblerpdf/templates/sistema/hechos_sobrevinientes_vacio.html +209 -0
  49. assemblerpdf/templates/sistema/iformfilacuatro.html +20 -0
  50. assemblerpdf/templates/sistema/informacion_doble.html +0 -0
  51. assemblerpdf/templates/sistema/input_2checks.html +98 -0
  52. assemblerpdf/templates/sistema/input_check.html +40 -0
  53. assemblerpdf/templates/sistema/input_checkbox.html +53 -0
  54. assemblerpdf/templates/sistema/input_solitario.html +9 -0
  55. assemblerpdf/templates/sistema/label_input_dos.html +24 -0
  56. assemblerpdf/templates/sistema/leyenda_autoriza_correo.html +8 -0
  57. assemblerpdf/templates/sistema/leyenda_superiol.html +5 -0
  58. assemblerpdf/templates/sistema/logos.html +4 -0
  59. assemblerpdf/templates/sistema/manifiesto.html +41 -0
  60. assemblerpdf/templates/sistema/notificacion_correo.html +14 -0
  61. assemblerpdf/templates/sistema/oficializacion.html +21 -0
  62. assemblerpdf/templates/sistema/pregunta_si_no.html +34 -0
  63. assemblerpdf/templates/sistema/pregunta_tresopciones.html +47 -0
  64. assemblerpdf/templates/sistema/qr_oficializacion.html +7 -0
  65. assemblerpdf/templates/sistema/situacion_amenaza.html +82 -0
  66. assemblerpdf/templates/sistema/style.html +228 -0
  67. assemblerpdf/templates/sistema/subtitulo_icono.html +6 -0
  68. assemblerpdf/templates/sistema/subtitulo_icono_largo.html +6 -0
  69. assemblerpdf/templates/sistema/tabla_doble.html +15 -0
  70. assemblerpdf/templates/sistema/tabla_instructivo.html +12 -0
  71. assemblerpdf/templates/sistema/tabla_matriz_riesgo.html +135 -0
  72. assemblerpdf/templates/sistema/tabla_proyeccion.html +37 -0
  73. assemblerpdf/templates/sistema/tabla_simple.html +187 -0
  74. assemblerpdf/templates/sistema/texarea.html +9 -0
  75. assemblerpdf/templates/sistema/tipo_identificacion.html +55 -0
  76. assemblerpdf/templates/sistema/tipos_checkbox.html +47 -0
  77. assemblerpdf/templates/sistema/titulo.html +6 -0
  78. assemblerpdf/templates/sistema/titulo_logo.html +22 -0
  79. assemblerpdf/templates/sistema/titulo_principal.html +5 -0
  80. assemblerpdf/utils/__init__.py +1 -0
  81. assemblerpdf/utils/template_loader.py +48 -0
  82. assemblerpdf-1.0.0.dist-info/METADATA +86 -0
  83. assemblerpdf-1.0.0.dist-info/RECORD +85 -0
  84. assemblerpdf-1.0.0.dist-info/WHEEL +5 -0
  85. assemblerpdf-1.0.0.dist-info/top_level.txt +1 -0
@@ -0,0 +1,16 @@
1
+ <div class="choice-container" style="margin-bottom: {{ margin_bottom|default('8px') }};">
2
+ {% if label %}
3
+ <label class="form-label">{{ label }}</label>
4
+ {% endif %}
5
+ <div class="choice-group">
6
+ {% for opt in opciones %}
7
+ {% set is_checked = opt.checked or (seleccionado and opt.valor == seleccionado) or (seleccionados and opt.valor in seleccionados) %}
8
+ <div class="choice-item">
9
+ <span class="choice-box {% if is_checked %}checked{% endif %}">
10
+ {% if is_checked %}✓{% endif %}
11
+ </span>
12
+ <span>{{ opt.label }}</span>
13
+ </div>
14
+ {% endfor %}
15
+ </div>
16
+ </div>
@@ -0,0 +1,16 @@
1
+ <div class="footer-container" style="margin-top: {{ margin_top|default('20px') }};">
2
+ <table class="footer-table">
3
+ <tr>
4
+ <td class="footer-cell footer-cell-bold" style="width: 15%;">Código:</td>
5
+ <td class="footer-cell" style="width: 35%;">{{ codigo|default('N/A') }}</td>
6
+ <td class="footer-cell footer-cell-bold" style="width: 15%;">Versión:</td>
7
+ <td class="footer-cell" style="width: 35%;">{{ version|default('01') }}</td>
8
+ </tr>
9
+ <tr>
10
+ <td class="footer-cell footer-cell-bold">Fecha:</td>
11
+ <td class="footer-cell">{{ fecha|default('N/A') }}</td>
12
+ <td class="footer-cell footer-cell-bold">Página:</td>
13
+ <td class="footer-cell">{{ pagina|default('Pág. 1 de 1') }}</td>
14
+ </tr>
15
+ </table>
16
+ </div>
@@ -0,0 +1,7 @@
1
+ <div class="grid-row">
2
+ {% for col in columns %}
3
+ <div style="width: {{ col.ancho|default('100%') }}; flex: {{ col.flex|default('none') }};">
4
+ {{ col.content }}
5
+ </div>
6
+ {% endfor %}
7
+ </div>
@@ -0,0 +1,19 @@
1
+ <div class="header-container">
2
+ <div class="header-logos">
3
+ <img src="{{ logo_izq|default('img/logo-mininterior-rojo.jpg') }}" class="header-logo-left" alt="Logo Izquierda">
4
+ </div>
5
+
6
+ <div class="header-text">
7
+ <h1 class="header-title-primary">{{ titulo1 }}</h1>
8
+ {% if titulo2 %}
9
+ <h2 class="header-title-secondary">{{ titulo2 }}</h2>
10
+ {% endif %}
11
+ {% if titulo3 %}
12
+ <h3 class="header-title-tertiary">{{ titulo3 }}</h3>
13
+ {% endif %}
14
+ </div>
15
+
16
+ <div>
17
+ <img src="{{ logo_der|default('img/Logo-unp-rojo.png') }}" class="header-logo-right" alt="Logo Derecha">
18
+ </div>
19
+ </div>
@@ -0,0 +1,12 @@
1
+ <div class="form-group" style="margin-bottom: {{ margin_bottom|default('8px') }};">
2
+ {% if label %}
3
+ <label class="form-label">{{ label }}</label>
4
+ {% endif %}
5
+ {% if interactive %}
6
+ <input type="text" class="form-control" name="{{ name }}" value="{{ valor|default('') }}" placeholder="{{ placeholder|default('') }}" {% if disabled %}disabled{% endif %}>
7
+ {% else %}
8
+ <div class="form-control-static">
9
+ {{ valor|default('') }}
10
+ </div>
11
+ {% endif %}
12
+ </div>
@@ -0,0 +1,14 @@
1
+ <div class="choice-container" style="margin-bottom: {{ margin_bottom|default('8px') }};">
2
+ {% if label %}
3
+ <label class="form-label">{{ label }}</label>
4
+ {% endif %}
5
+ <div class="choice-group">
6
+ {% for opt in opciones %}
7
+ {% set is_checked = opt.checked or (seleccionado and opt.valor == seleccionado) or (seleccionados and opt.valor in seleccionados) %}
8
+ <div class="choice-item">
9
+ <span class="choice-circle {% if is_checked %}checked{% endif %}"></span>
10
+ <span>{{ opt.label }}</span>
11
+ </div>
12
+ {% endfor %}
13
+ </div>
14
+ </div>
@@ -0,0 +1,6 @@
1
+ <div class="section-container" style="margin-top: {{ margin_top|default('15px') }}; margin-bottom: {{ margin_bottom|default('10px') }};">
2
+ {% if icono %}
3
+ <i class="{{ icono }} section-icon"></i>
4
+ {% endif %}
5
+ <span class="section-title">{{ titulo }}</span>
6
+ </div>
@@ -0,0 +1,14 @@
1
+ <div class="signature-container" style="justify-content: {{ justify|default('space-around') }}; margin-top: {{ margin_top|default('40px') }};">
2
+ {% for sig in firmas %}
3
+ <div class="signature-box" style="width: {{ sig.ancho|default('45%') }};">
4
+ <div class="signature-line" style="margin-top: {{ sig.alto_firma|default('50px') }};"></div>
5
+ <span class="signature-name">{{ sig.nombre }}</span>
6
+ {% if sig.cargo or sig.subtitulo %}
7
+ <span class="signature-sub">{{ sig.cargo|default(sig.subtitulo) }}</span>
8
+ {% endif %}
9
+ {% if sig.documento %}
10
+ <span class="signature-sub">C.C. {{ sig.documento }}</span>
11
+ {% endif %}
12
+ </div>
13
+ {% endfor %}
14
+ </div>
@@ -0,0 +1,318 @@
1
+ <style type="text/css">
2
+ /* 🏷️ Carga de fuentes locales desde la librería */
3
+ @font-face {
4
+ font-family: 'Inter';
5
+ src: url('fonts/Inter-Regular.ttf') format('truetype');
6
+ font-weight: normal;
7
+ font-style: normal;
8
+ }
9
+ @font-face {
10
+ font-family: 'Inter';
11
+ src: url('fonts/Inter-Medium.ttf') format('truetype');
12
+ font-weight: 500;
13
+ font-style: normal;
14
+ }
15
+ @font-face {
16
+ font-family: 'Inter';
17
+ src: url('fonts/Inter-Bold.ttf') format('truetype');
18
+ font-weight: bold;
19
+ font-style: normal;
20
+ }
21
+ @font-face {
22
+ font-family: 'Roboto';
23
+ src: url('fonts/Inter-Regular.ttf') format('truetype');
24
+ font-weight: normal;
25
+ font-style: normal;
26
+ }
27
+ @font-face {
28
+ font-family: 'Roboto';
29
+ src: url('fonts/Inter-Bold.ttf') format('truetype');
30
+ font-weight: bold;
31
+ font-style: normal;
32
+ }
33
+
34
+ /* 📄 Definición de Página Letter con Márgenes */
35
+ @page {
36
+ size: letter;
37
+ margin-top: 1.5cm;
38
+ margin-bottom: 1.5cm;
39
+ margin-left: 1cm;
40
+ margin-right: 1cm;
41
+ }
42
+
43
+ * {
44
+ box-sizing: border-box;
45
+ }
46
+
47
+ body {
48
+ font-family: 'Inter', sans-serif;
49
+ margin: 0;
50
+ padding: 0;
51
+ font-size: 11px;
52
+ color: #1e293b;
53
+ line-height: 1.35;
54
+ }
55
+
56
+ /* 🧱 Layout de Grid y Flex */
57
+ .grid-row {
58
+ display: flex;
59
+ flex-direction: row;
60
+ gap: 12px;
61
+ width: 100%;
62
+ margin-bottom: 10px;
63
+ }
64
+
65
+ /* 📥 Inputs y Form Controls */
66
+ .form-group {
67
+ display: flex;
68
+ flex-direction: column;
69
+ margin-bottom: 8px;
70
+ }
71
+
72
+ .form-label {
73
+ font-weight: 600;
74
+ color: #0f172a;
75
+ margin-bottom: 4px;
76
+ font-size: 11px;
77
+ text-transform: uppercase;
78
+ letter-spacing: 0.5px;
79
+ }
80
+
81
+ .form-control {
82
+ background-color: #f1f5f9;
83
+ border: 1px solid #cbd5e1;
84
+ border-radius: 4px;
85
+ padding: 6px 10px;
86
+ font-family: 'Inter', sans-serif;
87
+ font-size: 11px;
88
+ color: #334155;
89
+ min-height: 30px;
90
+ width: 100%;
91
+ }
92
+
93
+ .form-control-static {
94
+ background-color: #f8fafc;
95
+ border: 1px solid #e2e8f0;
96
+ border-radius: 4px;
97
+ padding: 6px 10px;
98
+ font-size: 11px;
99
+ color: #334155;
100
+ min-height: 30px;
101
+ display: flex;
102
+ align-items: center;
103
+ }
104
+
105
+ /* 📝 Textarea */
106
+ textarea.form-control {
107
+ resize: none;
108
+ min-height: 80px;
109
+ }
110
+
111
+ /* ☑️ Checkbox y Radio Buttons */
112
+ .choice-container {
113
+ display: flex;
114
+ flex-direction: column;
115
+ margin-bottom: 8px;
116
+ }
117
+
118
+ .choice-group {
119
+ display: flex;
120
+ flex-wrap: wrap;
121
+ gap: 12px;
122
+ margin-top: 4px;
123
+ }
124
+
125
+ .choice-item {
126
+ display: flex;
127
+ align-items: center;
128
+ gap: 6px;
129
+ font-size: 11px;
130
+ }
131
+
132
+ .choice-box {
133
+ width: 14px;
134
+ height: 14px;
135
+ border: 1px solid #475569;
136
+ border-radius: 2px;
137
+ display: inline-flex;
138
+ align-items: center;
139
+ justify-content: center;
140
+ font-size: 9px;
141
+ font-weight: bold;
142
+ color: #0f172a;
143
+ background-color: #fff;
144
+ }
145
+
146
+ .choice-box.checked {
147
+ background-color: #cbd5e1;
148
+ }
149
+
150
+ .choice-circle {
151
+ width: 14px;
152
+ height: 14px;
153
+ border: 1px solid #475569;
154
+ border-radius: 50%;
155
+ display: inline-flex;
156
+ align-items: center;
157
+ justify-content: center;
158
+ background-color: #fff;
159
+ }
160
+
161
+ .choice-circle.checked::after {
162
+ content: "";
163
+ width: 6px;
164
+ height: 6px;
165
+ background-color: #0f172a;
166
+ border-radius: 50%;
167
+ }
168
+
169
+ /* 🏢 Encabezado y Logos */
170
+ .header-container {
171
+ position: relative;
172
+ border-bottom: 2px solid #002857;
173
+ padding-bottom: 12px;
174
+ margin-bottom: 15px;
175
+ display: flex;
176
+ justify-content: space-between;
177
+ align-items: center;
178
+ }
179
+
180
+ .header-logos {
181
+ display: flex;
182
+ align-items: center;
183
+ gap: 15px;
184
+ }
185
+
186
+ .header-logo-left {
187
+ height: 48px;
188
+ }
189
+
190
+ .header-logo-right {
191
+ height: 48px;
192
+ }
193
+
194
+ .header-text {
195
+ flex-grow: 1;
196
+ text-align: center;
197
+ padding: 0 10px;
198
+ }
199
+
200
+ .header-title-primary {
201
+ font-size: 13px;
202
+ font-weight: bold;
203
+ color: #002857;
204
+ margin: 0 0 2px 0;
205
+ }
206
+
207
+ .header-title-secondary {
208
+ font-size: 10px;
209
+ font-weight: 500;
210
+ color: #475569;
211
+ margin: 0 0 2px 0;
212
+ }
213
+
214
+ .header-title-tertiary {
215
+ font-size: 9px;
216
+ color: #64748b;
217
+ margin: 0;
218
+ }
219
+
220
+ /* 🏷️ Sección */
221
+ .section-container {
222
+ display: flex;
223
+ align-items: center;
224
+ gap: 8px;
225
+ border-bottom: 1px solid #cbd5e1;
226
+ padding-bottom: 4px;
227
+ margin-top: 15px;
228
+ margin-bottom: 10px;
229
+ }
230
+
231
+ .section-icon {
232
+ color: #002857;
233
+ font-size: 13px;
234
+ }
235
+
236
+ .section-title {
237
+ font-size: 12px;
238
+ font-weight: bold;
239
+ color: #002857;
240
+ margin: 0;
241
+ text-transform: uppercase;
242
+ }
243
+
244
+ /* ✍️ Firma */
245
+ .signature-container {
246
+ display: flex;
247
+ justify-content: space-between;
248
+ margin-top: 40px;
249
+ margin-bottom: 20px;
250
+ gap: 40px;
251
+ }
252
+
253
+ .signature-box {
254
+ width: 45%;
255
+ display: flex;
256
+ flex-direction: column;
257
+ align-items: center;
258
+ text-align: center;
259
+ }
260
+
261
+ .signature-line {
262
+ width: 100%;
263
+ border-top: 1px solid #475569;
264
+ margin-bottom: 6px;
265
+ }
266
+
267
+ .signature-name {
268
+ font-weight: 600;
269
+ font-size: 11px;
270
+ color: #0f172a;
271
+ }
272
+
273
+ .signature-sub {
274
+ font-size: 9px;
275
+ color: #64748b;
276
+ }
277
+
278
+ /* 👣 Footer / Oficialización */
279
+ .footer-container {
280
+ margin-top: 20px;
281
+ border: 1px solid #cbd5e1;
282
+ border-radius: 4px;
283
+ overflow: hidden;
284
+ font-size: 9px;
285
+ color: #475569;
286
+ }
287
+
288
+ .footer-table {
289
+ width: 100%;
290
+ border-collapse: collapse;
291
+ }
292
+
293
+ .footer-cell {
294
+ border: 1px solid #cbd5e1;
295
+ padding: 6px 10px;
296
+ vertical-align: middle;
297
+ }
298
+
299
+ .footer-cell-bold {
300
+ font-weight: 600;
301
+ background-color: #f8fafc;
302
+ width: 25%;
303
+ }
304
+
305
+ /* Saltos de Página */
306
+ .page-break {
307
+ page-break-before: always;
308
+ }
309
+
310
+ /* Contenedores con Borde */
311
+ .bordered-page-container {
312
+ border: 1px solid #cbd5e1;
313
+ border-radius: 6px;
314
+ padding: 15px;
315
+ margin-bottom: 15px;
316
+ min-height: 920px; /* Asegura un layout uniforme por página */
317
+ }
318
+ </style>
@@ -0,0 +1,12 @@
1
+ <div class="form-group" style="margin-bottom: {{ margin_bottom|default('8px') }};">
2
+ {% if label %}
3
+ <label class="form-label">{{ label }}</label>
4
+ {% endif %}
5
+ {% if interactive %}
6
+ <textarea class="form-control" name="{{ name }}" style="height: {{ alto|default('80px') }};" placeholder="{{ placeholder|default('') }}" {% if disabled %}disabled{% endif %}>{{ valor|default('') }}</textarea>
7
+ {% else %}
8
+ <div class="form-control-static" style="height: {{ alto|default('80px') }}; display: block; overflow: hidden; white-space: pre-wrap;">
9
+ {{ valor|default('') }}
10
+ </div>
11
+ {% endif %}
12
+ </div>
@@ -0,0 +1,38 @@
1
+ {% if anexos %}
2
+ <div class="especial" style="width: 96%; margin-top: 10px; padding-bottom: 5px;">
3
+ <table>
4
+ {% for anexo in anexos %}
5
+ <tr>
6
+ <td class="celda-i" style="width: 30px; padding: 0; vertical-align: top;">
7
+ <label style="padding-top: 8px; margin: 0; font-weight: bold;" for="anexo{{ forloop.counter }}">
8
+ {{ forloop.counter }}.
9
+ </label>
10
+ </td>
11
+ <td class="celda-c" style="width: 100%; padding-left: 10px;">
12
+ <input
13
+ style="min-height: 25px; width: 100%; background: white; border: none; border-bottom: 1px solid #002857; border-radius: 0; padding: 5px 0;"
14
+ type="text"
15
+ id="anexo{{ forloop.counter }}"
16
+ name="anexo{{ forloop.counter }}"
17
+ value="{{ anexo.nombre }}{% if anexo.fecha_carga %} - {{ anexo.fecha_carga }}{% endif %}"
18
+ readonly>
19
+ </td>
20
+ </tr>
21
+ {% endfor %}
22
+ </table>
23
+ </div>
24
+ {% else %}
25
+ <div class="especial" style="width: 96%; margin-top: 10px; padding-bottom: 5px;">
26
+ <table>
27
+ <tr>
28
+ <td class="celda-c" style="width: 100%; padding-left: 10px;">
29
+ <input
30
+ style="min-height: 25px; width: 100%; background: white; border: none; border-bottom: 1px solid #002857; border-radius: 0; padding: 5px 0;"
31
+ type="text"
32
+ value="No se encontraron documentos adjuntos"
33
+ readonly>
34
+ </td>
35
+ </tr>
36
+ </table>
37
+ </div>
38
+ {% endif %}
@@ -0,0 +1,52 @@
1
+ <div class="especial" style="width: 96%; margin-top: 10px; padding-bottom: 5px;">
2
+ <table>
3
+ <tr>
4
+ <td class="celda-i" style="width: 30px; padding: 0; vertical-align: top;">
5
+ <label style="padding-top: 8px; margin: 0; font-weight: bold;" for="anexo1">1.</label>
6
+ </td>
7
+ <td class="celda-c" style="width: 100%; padding-left: 10px;">
8
+ <input style="min-height: 25px; width: 100%; background: white; border: none; border-bottom: 1px solid #002857; border-radius: 0; padding: 5px 0;" type="text" id="anexo1" name="anexo1" value="" readonly>
9
+ </td>
10
+ </tr>
11
+ <tr>
12
+ <td class="celda-i" style="width: 30px; padding: 0; vertical-align: top;">
13
+ <label style="padding-top: 8px; margin: 0; font-weight: bold;" for="anexo2">2.</label>
14
+ </td>
15
+ <td class="celda-c" style="width: 100%; padding-left: 10px;">
16
+ <input style="min-height: 25px; width: 100%; background: white; border: none; border-bottom: 1px solid #002857; border-radius: 0; padding: 5px 0;" type="text" id="anexo2" name="anexo2" value="" readonly>
17
+ </td>
18
+ </tr>
19
+ <tr>
20
+ <td class="celda-i" style="width: 30px; padding: 0; vertical-align: top;">
21
+ <label style="padding-top: 8px; margin: 0; font-weight: bold;" for="anexo3">3.</label>
22
+ </td>
23
+ <td class="celda-c" style="width: 100%; padding-left: 10px;">
24
+ <input style="min-height: 25px; width: 100%; background: white; border: none; border-bottom: 1px solid #002857; border-radius: 0; padding: 5px 0;" type="text" id="anexo3" name="anexo3" value="" readonly>
25
+ </td>
26
+ </tr>
27
+ <tr>
28
+ <td class="celda-i" style="width: 30px; padding: 0; vertical-align: top;">
29
+ <label style="padding-top: 8px; margin: 0; font-weight: bold;" for="anexo4">4.</label>
30
+ </td>
31
+ <td class="celda-c" style="width: 100%; padding-left: 10px;">
32
+ <input style="min-height: 25px; width: 100%; background: white; border: none; border-bottom: 1px solid #002857; border-radius: 0; padding: 5px 0;" type="text" id="anexo4" name="anexo4" value="" readonly>
33
+ </td>
34
+ </tr>
35
+ <tr>
36
+ <td class="celda-i" style="width: 30px; padding: 0; vertical-align: top;">
37
+ <label style="padding-top: 8px; margin: 0; font-weight: bold;" for="anexo5">5.</label>
38
+ </td>
39
+ <td class="celda-c" style="width: 100%; padding-left: 10px;">
40
+ <input style="min-height: 25px; width: 100%; background: white; border: none; border-bottom: 1px solid #002857; border-radius: 0; padding: 5px 0;" type="text" id="anexo5" name="anexo5" value="" readonly>
41
+ </td>
42
+ </tr>
43
+ <tr>
44
+ <td class="celda-i" style="width: 30px; padding: 0; vertical-align: top;">
45
+ <label style="padding-top: 8px; margin: 0; font-weight: bold;" for="anexo6">6.</label>
46
+ </td>
47
+ <td class="celda-c" style="width: 100%; padding-left: 10px;">
48
+ <input style="min-height: 25px; width: 100%; background: white; border: none; border-bottom: 1px solid #002857; border-radius: 0; padding: 5px 0;" type="text" id="anexo6" name="anexo6" value="" readonly>
49
+ </td>
50
+ </tr>
51
+ </table>
52
+ </div>
@@ -0,0 +1,18 @@
1
+ <div style="border: 1px solid #303d50; border-radius: 5px; font-family: 'Roboto', sans-serif; margin-top: 10px;">
2
+ <table>
3
+ <tr>
4
+ <td class="celda-i" style="width: 200px">
5
+ <div style="position: relative; height: 30px; margin-top: 0px; ">
6
+ <div style="position: relative;">
7
+ <p style="position: absolute; left: 0px; top: 5px; font-size: 15px; color: #002857; text-align: left; margin: 0px;">
8
+ Archívese en:
9
+ </p>
10
+ </div>
11
+ </div>
12
+ </td>
13
+ <td class="celda-c" style="position: relative; width: 900px;">
14
+ <input style="margin: 3px;" type="text" id="veredaDomicilio" name="" value="">
15
+ </td>
16
+ </tr>
17
+ </table>
18
+ </div>
@@ -0,0 +1,33 @@
1
+ <table>
2
+ <tr>
3
+ <td class="celda-i" style="width: 80%">
4
+ <p style="font-size: 15px; color: #002857; text-align: left; margin: 5px 0px;">
5
+ {{ pregunta }} *
6
+ </p>
7
+ </td>
8
+ <td class="celda-d" style="width: 20%">
9
+ <div style="position: relative; height: 35px; margin-top: 5px;">
10
+ <div class="chequeo-i" style="position: absolute; left: 0; min-width: 50%;">
11
+ <div style="position: relative;">
12
+ {% if valor == True %}
13
+ <i class="fa-regular fa-square-check" style="position: absolute; left: 0; font-size: 30px; color: #888;"></i>
14
+ {% else %}
15
+ <i class="fa-regular fa-square" style="position: absolute; left: 0; font-size: 30px; color: #ccc;"></i>
16
+ {% endif %}
17
+ <p style="position: absolute; left: 35px; top: 5px; font-size: 15px; color: #002857; margin: 0;">Sí</p>
18
+ </div>
19
+ </div>
20
+ <div class="chequeo-i" style="position: absolute; left: 60px; min-width: 50%;">
21
+ <div style="position: relative;">
22
+ {% if valor == False %}
23
+ <i class="fa-regular fa-square-check" style="position: absolute; left: 0; font-size: 30px; color: #888;"></i>
24
+ {% else %}
25
+ <i class="fa-regular fa-square" style="position: absolute; left: 0; font-size: 30px; color: #ccc;"></i>
26
+ {% endif %}
27
+ <p style="position: absolute; left: 35px; top: 5px; font-size: 15px; color: #002857; margin: 0;">No</p>
28
+ </div>
29
+ </div>
30
+ </div>
31
+ </td>
32
+ </tr>
33
+ </table>
@@ -0,0 +1,41 @@
1
+ <table>
2
+ <tr>
3
+ <!-- Celda principal: pregunta + checkboxes horizontales -->
4
+ <td class="celda-i" style="width: {{ ancho_opciones|default:'500px' }}">
5
+ <label>{{ pregunta }}</label>
6
+ <div style="position: relative; height: 35px;">
7
+ {% for opcion in opciones %}
8
+ <div class="chequeo-i" style="position: absolute; left: {{ opcion.offset }}px; min-width: 200px;">
9
+ <div style="position: relative;">
10
+ <!-- Icono base (cuadrado vacío) -->
11
+ <i class="fa-regular fa-square" style="position: absolute; left: 0; font-size: 30px; color: #ccc;"></i>
12
+ <!-- Icono check si está seleccionado -->
13
+ {% if opcion.value in valores_seleccionados %}
14
+ <i class="fa-regular fa-square-check" style="position: absolute; left: 0; font-size: 30px; color: #888;"></i>
15
+ {% endif %}
16
+ <!-- Texto de la opción -->
17
+ <p style="position: absolute; left: 35px; top: 5px; font-size: 15px; color: #002857; text-align: left; margin: 0px;">
18
+ {{ opcion.label }}
19
+ </p>
20
+ <!-- Input oculto para envío -->
21
+ <input type="checkbox" name="{{ nombre_campo }}" value="{{ opcion.value }}"
22
+ {% if opcion.value in valores_seleccionados %}checked{% endif %}
23
+ style="opacity: 0; position: absolute; width: 30px; height: 30px; left: 0; top: 0;">
24
+ </div>
25
+ </div>
26
+ {% endfor %}
27
+ </div>
28
+ </td>
29
+
30
+ <!-- Campos adicionales (opcional) -->
31
+ {% for campo in campos_adicionales %}
32
+ <td class="celda-d" style="width: {{ campo.ancho }}; {{ campo.estilo|default:'' }}">
33
+ <label>{{ campo.titulo }}</label>
34
+ <input type="{{ campo.tipo|default:'text' }}"
35
+ name="{{ campo.nombre }}"
36
+ value="{{ campo.valor|default:'' }}"
37
+ id="{{ campo.nombre }}">
38
+ </td>
39
+ {% endfor %}
40
+ </tr>
41
+ </table>