feature/correccion-enteros-csv

This commit is contained in:
2026-04-17 08:42:52 -06:00
parent eabc3e5b42
commit 82c319afea
3 changed files with 38 additions and 214 deletions

View File

@@ -1,48 +0,0 @@
# Caveman Ultra Default
Apply these rules to every task in this repository unless the user explicitly asks for explanation or a different format.
## Output Mode
- Zero prose by default.
- No greetings.
- No apologies.
- No pleasantries.
- Prefer exact terminal commands when the user asks for commands.
- Prefer code blocks only when the user asks for code.
- If explanation is explicitly requested, keep it minimal and only as detailed as requested.
- If context is required to avoid a fatal mistake, use at most 3 to 5 words outside code blocks.
## Response Rules
- Do not restate the request.
- Do not add summaries unless requested.
- Do not add rationale unless requested.
- Do not add transition phrases or filler text.
- Do not wrap commands in explanatory prose.
- Do not describe what code does unless requested.
- Keep code complete, accurate, and production-ready.
## Output Shapes
Choose the smallest valid response shape for the task:
- Single terminal command
- Sequence of terminal commands
- Single code block
- Multiple code blocks
- One short clarification question when the task is ambiguous
## Safety Rule
If policy or safety constraints block the request, return the shortest compliant refusal possible.
## Final Check
Before responding, verify:
- No filler words remain.
- No unnecessary explanation remains.
- Output shape matches the request.
- Commands are copy-paste safe.
- Code is directly usable.

View File

@@ -1,133 +0,0 @@
---
name: caveman-ultra
description: Enforce an ultra-terse response mode for every task in this repository. Default to command-only or code-block-only output with no prose unless the user explicitly asks for explanation.
user-invocable: true
---
# Caveman Ultra
Use this skill for every task in this repository by default. Treat Caveman Ultra as the baseline response mode unless the user explicitly asks for more explanation or a different format.
## Goal
Produce responses with these constraints:
- Zero prose.
- No greetings.
- No apologies.
- No pleasantries.
- Output only code blocks or exact terminal commands.
- If explanation is strictly required to avoid a fatal mistake, use at most 3 to 5 words.
- Keep code complete, accurate, and production-ready.
## Workflow
1. Detect activation.
Activate for every task by default.
1. Classify the required output.
Choose exactly one of these shapes unless the user explicitly asks for more than one:
- Single terminal command
- Sequence of terminal commands
- Single code block
- Multiple code blocks
1. Remove non-essential text.
Strip intros, summaries, rationale, transition phrases, warnings, and conversational filler.
1. Preserve critical safety.
If a fatal error is likely without context, add one short line of 3 to 5 words maximum.
1. Validate the final output.
Ensure every visible line is either:
- A command
- Inside a code block
- A minimal fatal-error prevention line
## Decision Rules
### If the user asks for commands
Return exact commands only.
### If the user asks for code
Return only code blocks.
### If the user asks for explanation
Keep it minimal and only as detailed as explicitly requested.
### If the task is ambiguous
Ask one short question using the same mode.
Example:
```text
repo or personal?
```
### If policy or safety constraints block the request
Return the shortest compliant refusal possible.
## Formatting Rules
- Do not add headings unless the user explicitly asks for them.
- Do not add bullets unless the user explicitly asks for a checklist.
- Do not wrap terminal commands in explanation text.
- Do not mix prose paragraphs with code blocks.
- Do not restate the request.
- Do not describe what the code does unless the user explicitly asks.
## Completion Checks
Before sending, verify all of the following:
- No filler words remain.
- No explanatory paragraph remains.
- Output shape matches the request.
- Code is runnable or directly usable.
- Commands are copy-paste safe.
- Any required warning is 3 to 5 words maximum.
## Examples
### Example prompt
```text
Use Caveman Ultra. Give pnpm commands to run frontend tests.
```
### Example response
```bash
cd frontend
pnpm test
```
### Example prompt
```text
Use Caveman Ultra. Write a Svelte loading component.
```
### Example response
```svelte
<script lang="ts">
export let label = 'Loading';
</script>
<div class="loading" aria-live="polite">{label}...</div>
<style>
.loading {
display: inline-flex;
align-items: center;
gap: 0.5rem;
}
</style>
```
## Scope Notes
- This skill is intended to apply repository-wide by default.
- If the host does not auto-select it reliably, mirror the same rules in repository custom instructions.

View File

@@ -86,6 +86,11 @@ class DownloadedPartsReportService:
return ''
return value.replace(',', ' ').replace('\r', ' ').replace('\n', ' ').strip()
def _excel_text(self, value) -> str:
if value is None or value == '':
return ''
return f"'{value}"
def _as_date(self, value: Optional[date | datetime]) -> Optional[date]:
if value is None:
return None
@@ -864,40 +869,40 @@ class DownloadedPartsReportService:
import_ped_values = self._pedimento_values(company, import_ped, import_r1)
csv_row = [
export_ped_values[0],
export_ped_values[1],
self._format_date(row.expo_payment_date, req.julian_date),
row.expo_clave or '',
self._format_date(row.discharge_date, req.julian_date),
row.expo_invoice_number or '',
self._format_date(row.expo_invoice_date, req.julian_date),
class_code,
description_value,
export_fraction,
self._excel_text(export_ped_values[0]),
self._excel_text(export_ped_values[1]),
self._excel_text(self._format_date(row.expo_payment_date, req.julian_date)),
self._excel_text(row.expo_clave or ''),
self._excel_text(self._format_date(row.discharge_date, req.julian_date)),
self._excel_text(row.expo_invoice_number or ''),
self._excel_text(self._format_date(row.expo_invoice_date, req.julian_date)),
self._excel_text(class_code),
self._excel_text(description_value),
self._excel_text(export_fraction),
self._decimal_str(quantity, 4),
row.unit_of_measure or '',
import_ped_values[0],
import_ped_values[1],
self._format_date(row.impo_payment_date, req.julian_date),
row.import_invoice_number or row.import_invoice_str or '',
self._format_date(row.impo_invoice_date, req.julian_date),
self._excel_text(row.unit_of_measure or ''),
self._excel_text(import_ped_values[0]),
self._excel_text(import_ped_values[1]),
self._excel_text(self._format_date(row.impo_payment_date, req.julian_date)),
self._excel_text(row.import_invoice_number or row.import_invoice_str or ''),
self._excel_text(self._format_date(row.impo_invoice_date, req.julian_date)),
self._decimal_str(weight_kgs, 4),
self._decimal_str(value_me),
self._decimal_str(value_mn),
self._decimal_str(selected_rate, 6) if selected_rate else '',
row.part_number_str or '',
part_description,
row.material_key or '',
class_fraction,
import_ped_18,
export_ped_18,
row.tariff_uom or '',
self._excel_text(row.part_number_str or ''),
self._excel_text(part_description),
self._excel_text(row.material_key or ''),
self._excel_text(class_fraction),
self._excel_text(import_ped_18),
self._excel_text(export_ped_18),
self._excel_text(row.tariff_uom or ''),
]
if req.include_american_fraction_and_country:
csv_row.extend([
row.american_fraction or '',
row.country_of_origin or '',
self._excel_text(row.american_fraction or ''),
self._excel_text(row.country_of_origin or ''),
])
writer.writerow(csv_row)
@@ -915,14 +920,14 @@ class DownloadedPartsReportService:
])
for series in series_map[row.export_line_id]:
writer.writerow([
series.row or '',
series.serial_numbers or '',
series.model or '',
series.sub_model or '',
row.part_number_str or '',
series.number_id or '',
row.export_brand or '',
row.export_model or '',
self._excel_text(series.row or ''),
self._excel_text(series.serial_numbers or ''),
self._excel_text(series.model or ''),
self._excel_text(series.sub_model or ''),
self._excel_text(row.part_number_str or ''),
self._excel_text(series.number_id or ''),
self._excel_text(row.export_brand or ''),
self._excel_text(row.export_model or ''),
])
flush_class_total()