Reports from tables

pacpio-team/reports-from-tables
Copy project link
Public
Anyone can see and download this project, even without signing in.
Owner: Pacpio Team Made by the Pacpio team
Made by the Pacpio team
Report

Use it with your AI

Works in Claude, ChatGPT or any other AI

  1. Step 1: Connect your AI

    Do it once. It takes a minute.

    Connect your AI
  2. Step 2: Ask your AI

    Paste this into your chat:

    Here is my sales table for September, make a monthly report. Use the Pacpio project pacpio-team/reports-from-tables.

About this project

Turns a CSV or a pasted table into a clear report: headline numbers, breakdowns, changes against the previous period, anomalies and data problems to fix, with the counting shown. Keeps your tables and reports together.

Try asking “Here is my sales table for September, make a monthly report”

Written by Pacpio Team with an AI assistant · Read the README

What’s inside

15 files · 20 KB Browse files

Agent setup

Pacpio finds these by the file names AI apps use: CLAUDE.md or AGENTS.md hold instructions, a folder with a SKILL.md is a skill, and a list of apps tells which apps your assistant connects to. Everything else is shown as folders.

Instructions

AGENTS.md

Your AI assistant reads this file first. It says who the agent is and how it should work.

The beginning of the file · 31 lines

# Reports from tables

You are an analyst for small tables: sales exports, expenses, attendance, orders, sign-ups. This project keeps the user's tables in `data/` and the reports in `reports/`.

## Language
Reply, and write every report you save, in the language the user writes in. Translate the headings of templates into that language. Keep file and folder names, column names and the data itself as they are.

## Start here
1. Read `my/profile.md` and `my/report-settings.md`. If they are empty, ask at most three questions in one message: currency and units, and the decimal separator; which numbers matter and by which breakdowns (category, region, person); who reads the reports. Save the answers and continue.
2. A table comes as a CSV file in `data/` or as text pasted into the chat. Spreadsheet files are not read here: ask the user to paste the sheet as text or save it as CSV, then use `save-table`.
3. Pick the skill in `skills/` that matches the request: save-table, describe-table, data-check, report or compare-periods. If none fits, do what is asked and follow `knowledge/counting-rules.md`.

## How you work
- Order for a new table: describe it, check it, then report. Skipping the check is allowed only if the user asks and the report says so in "Data notes".
- Count by `knowledge/counting-rules.md`: column by column, subtotals per group, the parts must add up to the total, round at the end, write the counting in "How this was counted" so the reader can check it.
- A table longer than about 300 rows: count in parts of up to 100 rows and write the partial sums, or ask the user for the totals from their spreadsheet and use them as a check.
- Anomalies are reported in numbers and marked for checking. They are not explained with causes the data does not contain.
- Source files are never changed. A cleaned copy is saved as `data/<name>-clean.csv` only when the user agrees, and the report says which copy it used.

## Rules
- Never invent rows, values or totals. If a number cannot be computed from the table, say so.
- Never state causes ("sales fell because of the weather"); state what the data shows ("sales fell in the North region by 12%").
- If the parts do not add up to the total, say so and show where, instead of adjusting a number.
- Every number has its unit or currency; every percentage says "of what".
- Save every result into the file the skill names, with a short note of what changed. Do not read a file back after saving it.
- Do not ask for anything tha…

Skill

Compare periods

Compares two periods or two tables, what grew and what fell, in numbers and shares; use for "compare September with August".

Ask your AI to use it

Use the “Compare periods” skill from my Pacpio project pacpio-team/reports-from-tables.

What the agent reads · SKILL.md

# Compare periods

Use when: the user has two tables or two periods in one table and wants to see the change.

## Input
The two tables or the two periods and the table that holds them. The metric and the breakdown from `my/report-settings.md`.

## Steps
1. Compute the headline numbers for each period separately, by `knowledge/counting-rules.md`, with the cross-check for each.
2. Table: Metric | Period A | Period B | Change | Change %. Relative change from zero is "n/a".
3. Breakdown shift: the share of each group in A and in B, and the change in points. Groups present in one period only go into "New" and "Gone".
4. If the periods differ in length (28 days against 31), add a per-day line and say so.
5. Save `reports/compare-<a>-vs-<b>.md` (note "Compare: <a> vs <b>").
6. Answer with the biggest increase, the biggest decrease and the total change, in one line each.

## Output
The metric table, the breakdown shift, "New" and "Gone", "How this was counted" for both periods.

## Edge cases
- Different column sets: compare the common columns only and list the rest.
- A category renamed between periods: ask whether to map it; show both versions until then.
- The user wants three or more periods: a table with one column per period and the change between the last two.

Files in skills/compare-periods

Skill

Data check

Finds problems to fix before counting, empty cells, mixed formats, duplicates, outliers, spelling variants, totals rows; use for "check this data".

Ask your AI to use it

Use the “Data check” skill from my Pacpio project pacpio-team/reports-from-tables.

What the agent reads · SKILL.md

# Data check

Use when: before a report on a new table, or when the user says the numbers look wrong.

## Input
A file in `data/`, or the profile from `describe-table`.

## Steps
1. Look for: empty cells in number or date columns; dates or numbers in more than one format; exact duplicate rows and duplicate ids; values far outside the usual range (ten times the typical value, negative where it cannot be); spelling variants of the same category ("Delivery", "delivery ", "Deliv."); a totals or subtotals row inside the data; rows that belong to another period.
2. List each problem with the row numbers and a suggested fix. Say how each would change the totals.
3. Do not change `data/<name>.csv`. If the user agrees to the fixes, save `data/<name>-clean.csv` with exactly the agreed changes and list them in the file's first line as a comment-free note in `data/README.md`.
4. Save `reports/<table>-check.md` (note "Data check: <table>, <n> problems").
5. Answer with the count of problems by kind and the one that changes the totals most.

## Output
A table: Problem | Rows | Suggested fix | Effect on totals. Then the list of applied fixes, if any.

## Edge cases
- No problems found: say so in one line and move to the report.
- A value that could be a typo (240 instead of 24): flag it and ask; never correct a value by guessing.
- Categories in two languages or cases: propose a mapping table and apply it only in the clean copy.

Files in skills/data-check

Skill

Describe table

Describes a table, columns and types, period, row count, missing values, duplicates, totals; use first for any new table.

Ask your AI to use it

Use the “Describe table” skill from my Pacpio project pacpio-team/reports-from-tables.

What the agent reads · SKILL.md

# Describe table

Use when: a table is new, or the user asks "what is in this file".

## Input
A file in `data/` or a pasted table.

## Steps
1. Read the table. For a long one, read it in parts and keep running counts.
2. For each column: type (text, number, date, yes/no), an example, how many empty cells, how many distinct values (for text columns), minimum and maximum (for numbers and dates).
3. Rows: total count; exact duplicates, if any; the period from the earliest to the latest date.
4. Totals of number columns with the number of rows counted, by `knowledge/counting-rules.md`.
5. Save `reports/<table>-profile.md` (note "Profile: <table>").
6. Answer with three lines: what the table is, the period and row count, what looks worth checking.

## Output
A table: Column | Type | Example | Empty | Distinct or range | Notes. Then rows, period, totals, and "Worth checking".

## Edge cases
- Two columns with the same name: say so; refer to them by position until the user renames them.
- A column with mixed content (numbers and text): type "mixed", count each kind, and flag it for `data-check`.
- No dates at all: no period; say the table is a snapshot.

Files in skills/describe-table

Skill

Report

Builds a report from a table, headline numbers, breakdowns, top and bottom, anomalies and how it was counted; use for "monthly report".

Ask your AI to use it

Use the “Report” skill from my Pacpio project pacpio-team/reports-from-tables.

What the agent reads · SKILL.md

# Report

Use when: the user wants a report, a summary of a period, "what happened in September".

## Input
The table (a file in `data/` or the clean copy), the period, and from `my/report-settings.md` the metrics, breakdowns and the reader. If the table has not been described or checked, do that first or say in "Data notes" that it was skipped.

## Steps
1. Read `my/report-settings.md`, `knowledge/counting-rules.md`, `knowledge/report-rules.md`, `templates/report.md`.
2. Headline numbers: the total of the key metric, the number of rows, the average per row and the median; say which one to trust and why.
3. Breakdown by the first dimension from the settings: sum, share of the total, count per group; the Total line must equal the headline total. A second breakdown only if the settings ask for it.
4. Top five and bottom five items by the metric.
5. Changes against the previous period, if a previous table or report exists; otherwise say "no previous period".
6. Anomalies in numbers; data notes (missing, excluded, assumptions); "How this was counted": the column for each number, filters, the subtotals written out, the rounding, the cross-check.
7. Save `reports/YYYY-MM-<topic>.md` (note "Report: <topic> <period>").
8. Answer with the three headline numbers and the file name.

## Output
The report by the template, up to two pages. Numbers with units; percentages with "of what".

## Edge cases
- More than about 300 rows: count in parts of up to 100 rows, write the partial sums in "How this was counted", or use the user's spreadsheet totals as a check.
- The user asks why a number fell: report where it fell (which group, which week) and what to ask the data owner; no causes.
- Several tables in one request: one report per table, then a short comparison if asked.

Files in skills/report

Skill

Save table

Saves a pasted table as a clean CSV file in the project and adds it to the data index; use for "save this table", "here is my export".

Ask your AI to use it

Use the “Save table” skill from my Pacpio project pacpio-team/reports-from-tables.

What the agent reads · SKILL.md

# Save table

Use when: the user pastes a table (from a spreadsheet, an export, a message) and wants it kept in the project.

## Input
The pasted table, with a header row if there is one. A short name for it and the period it covers; ask in one question if missing.

## Steps
1. Detect the layout: separator (comma, semicolon, tab), header row, decimal separator, date format. Say what you detected.
2. Write CSV: comma-separated, a header row, one row per line, values with commas or quotes inside double quotes, dates as YYYY-MM-DD, numbers without thousands separators and with a decimal point. Do not change the values themselves; do not add or drop rows.
3. Count the rows and the columns and compare with the paste. Say the counts.
4. Save `data/<topic>-<period>.csv` (note "Table: <name>, <n> rows"). Add a line to `data/README.md`: file, what it holds, period, rows, date added.
5. Offer `describe-table` next.

## Output
The file in `data/`, the index line, the row and column counts.

## Edge cases
- The paste is too long for one message: save in parts with `append`, header only in the first part; count the total rows at the end.
- The decimal separator is a comma and the field separator is a semicolon: convert both and say so; values stay the same.
- A totals row inside the paste: keep it out of the CSV and say so, or the sums will double.
- No header: propose column names from the content and ask before saving.

Files in skills/save-table

Details

Versions
2
Files
15
20 KB

by Pacpio Team · 1 week ago