ingest-go
Fetches and formats official government documents from Kerala state portals into a TypeScript record file.
Install
mkdir -p .claude/skills/ingest-go && curl -L -o skill.zip "https://agentskills.codes/api/skills/download/12075" && unzip -o skill.zip -d .claude/skills/ingest-go && rm skill.zipInstalls to .claude/skills/ingest-go
Activation
This is the description your AI agent reads to decide when to run this skill — the better it matches your request, the more reliably it fires.
Fetch Kerala Government Orders (GOs), Circulars, and Legislative Bills from official portals, parse the GO number, tag each record to the correct department, and write a typed GovernmentOrder record to data/government-orders.ts. Use whenever adding GOs, Circulars, SROs, or Bills to the dashboard.Key capabilities
- →Fetch Government Orders, Circulars, and Legislative Bills from official Kerala portals.
- →Parse GO numbers into structured components like type, number, year, and department code.
- →Tag records to the correct department using a two-stage matching process.
- →Construct a typed GovernmentOrder record with metadata including source URL.
- →Append new records to the `GOVERNMENT_ORDERS` array in `data/government-orders.ts`.
How it works
The skill fetches documents from specified Kerala government portals, extracts GO numbers and other details, then tags the records to departments based on a suffix or keyword matching.
Inputs & outputs
When to use ingest-go
- →Ingesting new legislative bills
- →Updating government circular dashboard
- →Adding official order records
About this skill
Ingest Government Order (ingest-go)
Adds one or more GovernmentOrder records to data/government-orders.ts. Every
record must be traceable to a primary source URL and tagged to a department. No
source URL = record does not ship.
Full spec: docs/plans/ingest-go-spec.md
Source portals
Fetch from these in priority order:
| Priority | Portal | URL | Covers |
|---|---|---|---|
| 1 | Document Portal, GoK | https://document.kerala.gov.in | All departments — primary hub |
| 2 | LSG Orders portal | https://go.lsgkerala.gov.in | LSG-specific only |
| 3 | Niyamasabha Bills | https://niyamasabha.nic.in/index.php/business/index/bills_passed | Legislative Bills |
| 4 | WCD Orders | https://wcd.kerala.gov.in/gov_orders.php | Women & Child Dev only |
Tip: If you have a GO number like G.O.(P) No.162/2021/Fin, search it
directly in the document portal's search box to pull the exact PDF link.
Step 1 — Fetch
Document portal (document.kerala.gov.in)
- Default view shows the last 30 days.
- Use Advanced Search to filter by department, GO type, and date range.
- Retrieve the PDF URL for each result — this becomes
meta.sourceUrl.
Niyamasabha bills
- Navigate to the Bills Passed section.
- Each bill entry should yield a PDF link (
meta.sourceUrl) and a date.
Fallback portals
- Use
go.lsgkerala.gov.inorwcd.kerala.gov.in/gov_orders.phponly when the document portal is missing a specific order.
Step 2 — Parse the GO number
Kerala GO numbers follow this format:
G.O.(<type>) No.<number>/<year>/<DeptCode>
Examples:
G.O.(P) No.162/2021/Fin → type=P, number=162, year=2021, deptCode=Fin
G.O.(Ms) No.45/2024/Rev → type=Ms, number=45, year=2024, deptCode=Rev
G.O.(Rt) No.1180/2023/H&FWD → type=Rt, number=1180, year=2023, deptCode=H&FWD
SRO No.12/2024 → type=SRO, number=12, year=2024, deptCode=null
Bills and Circulars may not have a structured GO number — record the number
as-is and set type: "Bill" or type: "Circular" accordingly.
Step 3 — Tag the department (two-stage)
Stage 1 — GO number suffix (confidence: high)
Match deptCode (case-insensitive) against this table:
| deptCode | dept.id |
|---|---|
| Fin | dept.finance |
| Rev | dept.revenue |
| H&FWD, HFWD, HFW | dept.health-family-welfare |
| GAD, Gen | dept.cmo |
| LSG | dept.local-self-government |
| Edu, GEdn | dept.general-education |
| HEdn | dept.higher-education |
| Home | dept.home |
| PWD | dept.public-works |
| Tran | dept.transport |
| Lab | dept.labour-skills |
| For | dept.forest-wildlife |
| Ind | dept.industries-commerce |
| Agri | dept.agriculture-farmers-welfare |
| Coop | dept.cooperation |
| Fish | dept.fisheries-harbour |
| Pwr, Elec | dept.power |
| WR, Irr | dept.water-resources |
| SC/ST, SCSTBCD | dept.scheduled-castes-tribes-bcd |
| WCD | dept.women-child-development |
| Tur | dept.tourism |
| Vig | dept.vigilance |
| Exc | dept.excise |
| Plan | dept.planning-economic-affairs |
| Dev, Devaswom | dept.devaswom |
| Min | dept.minority-welfare |
| IT, ICT | dept.electronics-it |
| Cult | dept.cultural-affairs |
| Port | dept.ports |
| Yth | dept.youth-welfare |
| Law | dept.law |
If matched → set deptId and deptConfidence: "high". Skip Stage 2.
Stage 2 — Keyword fallback (confidence: medium)
If Stage 1 didn't match, scan the GO subject line for the name or nameMl of
each department in data/departments.ts. First match wins.
If matched → set deptId and deptConfidence: "medium".
Fallback — ambiguous (confidence: low)
If neither stage matched, set deptId: undefined and deptConfidence: "low".
Do not guess. The UI will render these with a visual caveat.
Step 4 — Build the record
Use this template:
{
id: "go.<year>-<deptCode-lower>-<number>",
goNumber: "<raw GO number string>",
type: "P", // P | Ms | Rt | SRO | Circular | Bill
subject: "<English subject from document>",
// subjectMl: "<Malayalam subject — only if printed on document; never translate>",
deptId: "dept.<id>", // omit if deptConfidence is "low"
deptConfidence: "high", // high | medium | low
date: "2021-06-15", // ISO date from the document
// effectiveDate: "2021-07-01", // only if different from date
meta: {
source: "Document Portal, Government of Kerala",
sourceUrl: "https://document.kerala.gov.in/...", // direct PDF URL — mandatory
retrievedAt: "<ISO timestamp of this fetch>",
},
dataStatus: "verified",
},
ID examples:
G.O.(P) No.162/2021/Fin→go.2021-fin-162G.O.(Rt) No.1180/2023/H&FWD→go.2023-hfwd-1180SRO No.12/2024→go.2024-sro-12- Circular with no number →
go.<year>-misc-<sequential>
Step 5 — Tooltip rule (non-negotiable)
Any UI component that renders this record MUST display a tooltip showing:
meta.source— the portal namemeta.sourceUrl— as a clickable link
This applies to table rows, cards, and detail views. No tooltip = no merge.
Step 6 — After editing
- Append the new record(s) to
GOVERNMENT_ORDERSindata/government-orders.ts - Bump
SEED_VERSIONindata/db.ts - Run
deno task check— must pass fmt + lint + type check - If a UI route exists: verify the record renders with the correct dept badge and tooltip
Common mistakes
- Omitting
meta.sourceUrl— this is the single most important field. Every GO has a PDF on the portal; find it. - Guessing the department when Stage 1 + 2 both fail — set
deptConfidence: "low"and leavedeptIdundefined. An incorrect tag is worse than an untagged record. - Machine-translating
subjectMl— only populate if the Malayalam subject appears on the document itself. - Forgetting
SEED_VERSIONbump — the new record will silently not appear. - Using a
/thumb/or search-result URL asmeta.sourceUrl— use the direct PDF URL so the link is stable.
When not to use it
- →When the source URL for a record is not available.
- →When the department cannot be confidently determined from the GO number suffix or subject line.
- →When machine translation is required for the Malayalam subject.
Limitations
- →Records must be traceable to a primary source URL.
- →Malayalam subject (`subjectMl`) is only populated if printed on the document, not through translation.
- →Department tagging can result in 'low' confidence if no match is found, requiring UI caveats.
How it compares
This skill automates the extraction, parsing, and categorization of government orders into a structured TypeScript record, unlike manual data entry.
Compared to similar skills
ingest-go side by side with the closest alternatives in the catalog.
| Skill | Installs | Updated | Safety | Difficulty |
|---|---|---|---|---|
| ingest-go (this skill) | 0 | 2mo | No flags | Intermediate |
| logging-best-practices | 0 | 6mo | No flags | Intermediate |
| fp-data-transforms | 0 | 2mo | No flags | Intermediate |
| document-classification | 0 | 2mo | No flags | Intermediate |
Try saying
Example prompts that trigger this skill in your AI assistant.
You might also like
logging-best-practices
neondatabase
Logging best practices focused on wide events (canonical log lines) for powerful debugging and analytics
fp-data-transforms
Regtransfers
Everyday data transformations using functional patterns - arrays, objects, grouping, aggregation, and null-safe access
document-classification
leviadi-lang
Use when working on document classification — `classify_document` tool, OCR pipeline, document type taxonomy for insurance/pension documents.
supabase-developer
daffy0208
Build full-stack applications with Supabase (PostgreSQL, Auth, Storage, Real-time, Edge Functions). Use when implementing authentication, database design with RLS, file storage, real-time features, or serverless functions.
payload
payloadcms
Use when working with Payload CMS projects (payload.config.ts, collections, fields, hooks, access control, Payload API). Use when debugging validation errors, security issues, relationship queries, transactions, or hook behavior.
telegram-mini-app
davila7
Expert in building Telegram Mini Apps (TWA) - web apps that run inside Telegram with native-like experience. Covers the TON ecosystem, Telegram Web App API, payments, user authentication, and building viral mini apps that monetize. Use when: telegram mini app, TWA, telegram web app, TON app, mini app.