Siempre que nos encontramos con algo en nuestro trabajo diario que nos resulta demasiado tedioso para seguir haciéndolo manualmente, se ha vuelto habitual crear un pequeño sistema utilizando Claude Code.
Esta historia es un ejemplo perfecto de ello, y todo comenzó cuando aumentamos el capital de la empresa.
Nuestro ejercicio fiscal comienza en febrero, y este aumento de capital también se produjo en febrero. Sin embargo, con este aumento de capital, ahora debemos ser más meticulosos al organizar nuestros procesos de pedidos con socios externos y empresas colaboradoras.
Esta es la sección conocida como Ley de Subcontratación, que, según el sistema actual, pasará a llamarse "Ley de Subcontratación" a partir de enero de 2026. La parte contratante tendrá que ocuparse de más aspectos, como indicar claramente los detalles del pedido, crear y guardar los documentos de la transacción y establecer plazos de pago.
Por supuesto, ¡esto no es solo una cuestión de "hacerlo porque hay una ley que lo obliga"!
Al subcontratar un trabajo a un socio externo, es fundamental que tanto el cliente como el proveedor de servicios definan claramente los detalles del pedido, el precio, la fecha y la correspondencia con el presupuesto.
No era una función incluida en la herramienta de contabilidad.
Nuestra empresa utiliza las herramientas de MoneyForward (en adelante, MoneyForward) para la contabilidad, la elaboración de presupuestos y la facturación.
Es práctico para las tareas cotidianas de contabilidad y facturación, pero lo que quería hacer esta vez era un poco diferente.
Basándonos en el PDF de la cotización recibida del socio externo, creamos un PDF de la orden de compra para Liberogic.
Al menos en lo que respecta al uso que le damos a nuestra empresa, MoneyForward no cuenta con las características que necesitamos, y sería un desperdicio de dinero suscribirse al servicio solo para ese propósito.
Si se hiciera manualmente,
- Crear un formato de orden de compra
- Transcribir manualmente la información del presupuesto al formato de la orden de compra.
- Por favor, introduzca la fecha del pedido.
- Transcribe el número de la cita.
- Transcribe los detalles.
- Por favor, verifique el importe total y los demás detalles.
- Formatear los nombres de los archivos
- Otros artículos diversos...
Es un engorro tener esta tarea extra... así que decidí crearla.
Utilizando el código Claude, se puede poner en práctica en menos de una hora.
El momento también fue oportuno.
El inicio del ejercicio fiscal en febrero, el aumento de capital en febrero y la publicación del Código Claude, junto con su adopción por parte de nuestro personal, coincidieron en el tiempo.
Esto ocurrió aproximadamente en la época en que comenzó a gestarse dentro de la empresa un movimiento similar a un hackathon, donde la gente utilizaba herramientas como Claude Code para crear herramientas de mejora empresarial, pequeñas aplicaciones internas e incluso para implementar ideas espontáneas.
Desde un esquema de especificaciones muy básico hasta instrucciones para Claude Code, incluyendo ajustes finos...
Logré dejarlo en un estado utilizable en poco menos de una hora.
Bueno, no puedes simplemente dejarlo todo en manos de la IA y esperar que lo complete, ¡pero si lo traduces correctamente a indicaciones, puede ser rápido y práctico!
Aplicación de escritorio completada
Se trata de una sencilla herramienta para generar órdenes de compra que se ejecuta en el sistema operativo que probablemente ya estés utilizando.
Por favor, envíe el PDF de la cotización al departamento correspondiente..appAl arrastrar y soltar el archivo, se ejecutará un script de Python que leerá el contenido del PDF de la cotización y generará un PDF de la orden de compra en la misma carpeta.
Una vez completado, es un proceso sencillo que muestra una notificación en macOS y abre automáticamente el PDF de la orden de compra generado.
La estructura es la siguiente:
~/Escritorio/Generar orden de compra/
Arrastre la cotización → Generar orden de compra.app
_lib/
generate_purchase_order.py
liberogic_logo.png
liberogic_seal.png
purchase_order_counter.json
Para que el personal de contabilidad y administración pueda usarlo sin necesidad de abrir una terminal, utilizamos un archivo ejecutable de AppleScript como punto de entrada, mientras que el proceso de generación de PDF se gestiona mediante Python.
En resumen, simplemente adjunta el PDF con la cotización.Una aplicación de escritorio que genera una orden de compra en formato PDF al arrastrar y soltar los elementos.Puede utilizarse sin necesidad de abrir una terminal, lo que facilita su uso para tareas administrativas internas.
El diseño del PDF de la orden de compra está pensado para que se asemeje al formato PDF de facturas y presupuestos que utilizamos en nuestra empresa.
El siguiente texto se incluye en la sección de observaciones:
Esta orden de compra constituye un pedido formal. El pedido se realiza con base en la cotización número XXX.
El número de pedido tenía el siguiente formato:
{会社略称}様 発注書{YYYY}{MM}{3桁連番}
Por ejemplo, si es el primer artículo para el Sr./Sra. XX en febrero de 2026,
Estimado/a Sr./Sra. XX, Orden de compra 202602001
Se verá así.
Los números secuenciales por empresa y mes sonpurchase_order_counter.jsonEl sistema gestiona esto y la fecha del pedido se calcula automáticamente 5 días hábiles después de la fecha indicada en la cotización. (¡Esta es solo una especificación temporal! Se modificará posteriormente durante la gestión).
Para excluir no solo los sábados y domingos, sino también los días festivos japoneses, PythonjpholidayLo usé.
Solo unas pocas partes ligeramente difíciles
Los presupuestos que sirven de base para los pedidos de compra se obtienen de socios externos y empresas colaboradoras, por lo que el formato varía de una empresa a otra.
Simplemente asumir que "el nombre de la empresa está en esta coordenada" o "el importe total está en esta ubicación" no es suficiente.
En definitiva, el proceso implica el uso de expresiones regulares para extraer el nombre del proveedor, la dirección, el número de teléfono, el número de cotización, la fecha de la cotización, el asunto, los detalles, el subtotal, el impuesto al consumo y el total de la forma más flexible posible, tratando a las empresas con "Attn:" adjunto como nuestra propia empresa y a las demás como proveedores, y abordando problemas como la información que aparece visualmente separada y que se fusiona con el texto al extraer texto de archivos PDF.
Debido a que en algunos casos se incluían nombres de edificios o números de piso después del asunto del correo electrónico, hemos añadido un proceso para filtrar la información de dirección innecesaria utilizando términos como "edificio" y "piso" como pistas.
Ya sea por inteligencia artificial o por cualquier otro motivo, este sigue siendo un problema común en el procesamiento de archivos PDF.
Mensaje pasado a Claude Code
En lugar de hacer una solicitud vaga, es más económico usar tokens si se escribe de la forma más específica posible, incluyendo la estructura de carpetas, el flujo de procesamiento, el diseño, las reglas de numeración, el cálculo de días hábiles, los elementos de extracción de PDF, etc.
¡Hagámosles también leer el PDF de muestra!
以下の条件で、見積書PDFを発注書PDFに自動変換するツールをmacOS向けに作ってください。
## 環境
- macOS / Python3(pip可)
- フォント:`~/Library/Fonts/NotoSansJP-Regular.ttf` / `NotoSansJP-Bold.ttf`
## フォルダ構成
`~/Desktop/発注書生成/
見積書をドロップ→発注書生成.app
_lib/
generate_purchase_order.py
liberogic_logo.png
liberogic_seal.png
purchase_order_counter.json`
## 処理フロー
1. `.app` に見積書PDFをドラッグ&ドロップ
2. Pythonスクリプトを実行し発注書PDFを生成
3. 完了通知(macOS通知)を出して発注書PDFを自動で開く
4. 発注書PDFは見積書と同じフォルダに保存
## 発注書の仕様
出力フォーマットは添付のMoneyForward形式のPDFに合わせること。
このPDFから以下を抽出して使う:
- ロゴ画像
- 押印画像
- レイアウト座標
- 列幅
- 余白
- フォントサイズ
## 自社情報
リベロジック株式会社
登録番号:T2010401081132
〒108-0073 東京都港区三田1-3-37 板金会館2F
TEL: 03-6809-4366 / FAX: 03-6809-4367
## 発注書番号
- 形式:`{会社略称}様 発注書{YYYY}{MM}{3桁連番}`
- 会社別・月別の連番を `purchase_order_counter.json` で管理
- 出力ファイル名もこの発注書番号に揃える
## 発注日
- 見積書の日付から5営業日後
- 土日と日本の祝日を除外する
## 見積書からの情報抽出
- どんな会社のフォーマットでも対応できる柔軟な正規表現で抽出
- 抽出項目:ベンダー名・住所・TEL、見積書番号、見積日、件名、明細、小計・消費税・合計
- ベンダー判定:「御中」の付いた会社=自社、それ以外=発注先
- 件名に住所の建物名が混入するケースに対応
## 発注書レイアウト
- タイトル「発注書」中央大文字
- 左:発注先の社名・住所・TEL
- 右:自社情報+ロゴ+押印+発注書番号・発注日・見積書番号・見積日
- 件名・発注金額を大きく表示
- 明細テーブル:品目/単価/数量/単位/価格
- 交互グレー背景
- 最低8行
- 合計エリア:小計・消費税・合計のみ
- 備考欄を枠付きで表示
- ページ番号なし
Aunque se trata esencialmente de un documento de especificaciones simplificado, es importante proporcionar tantos detalles como sea posible sobre las limitaciones del negocio y el producto final deseado, en lugar de simplemente decir "haz que tenga buen aspecto".
Bueno, al final falla cuando intento que lea un formato diferente, así que necesito que Claude trabaje aún más, pero sigue siendo rápido, así que supongo que está bien.
(El número de empleados externos y socios colaboradores con los que trabajamos ni siquiera llega a las dos cifras, ¡así que no es gran cosa!)
Debido a su gran comodidad, también debemos preocuparnos por la seguridad.
Por otro lado, al utilizar el soporte para el desarrollo de IA, es necesario tener en cuenta no solo la comodidad, sino también la seguridad.
A medida que avances en el proceso, dando instrucciones a Claude Code, se realizarán varias operaciones en tu entorno local.
- Lectura y escritura de archivos en ~/Escritorio
- Acceso a ~/Biblioteca/Servicios/
- Instalación de bibliotecas de Python con pip install
- Generación de aplicaciones AppleScript con osacompile
- Lectura de archivos de fuentes ubicados en ~/Biblioteca/Fuentes/
No es una historia particularmente importante, pero aun así da un poco de miedo darle privilegios de ejecución a la IA en un entorno local, ¿verdad? 😨
Al confiar operaciones de terminal o de archivos a un sistema, existe la posibilidad de que se creen, sobrescriban o eliminen archivos de forma no deseada.
- ¡Comprueba qué estás permitiendo!
- ¡Haz una copia de seguridad!
- Para todo aquello que se puede gestionar con Git, ¡comprueba las diferencias!
- ¡Creemos carpetas de trabajo separadas!
Estas medidas básicas son importantes. Si lo usa para trabajo de desarrollo, podría ser mejor cargar el archivo .env a través de 1Password. Es un poco engorroso, pero marca una gran diferencia. (porNuestro CTO)
Por otro lado, como en este casoSi su uso está previsto únicamente en un entorno local, los riesgos son relativamente limitados.En la mayoría de los casos, el impacto rara vez se propaga externamente a través de la red y, en el peor de los casos, se limita a afectar únicamente al propio entorno.
Hay muchos otros aspectos a tener en cuenta, pero «poder crear algo rápidamente» y «poder usarlo de forma segura» son dos cosas distintas. Al desarrollar con IA, ¡asegúrate de revisar los permisos de ejecución, las operaciones con archivos, las bibliotecas externas y cómo gestionar los datos de entrada a medida que avanzas!
En adelante, nos centraremos en el intercambio de personal y la integración con Supabase.
Así pues, lo que he creado en esta ocasión es una sencilla herramienta para generar órdenes de compra que se ejecuta en un entorno local.
En la etapa inicial,purchase_order_counter.jsonHemos implementado un sistema para gestionar los números secuenciales por empresa y mes, pero teniendo en cuenta que lo compartiremos con el personal en el futuro, gestionar los números secuenciales utilizando únicamente archivos JSON locales inevitablemente generará problemas como números de pedido duplicados.
Por lo tanto, planeo implementar contadores mensuales y específicos de la empresa en Supabase para que no haya números secuenciales duplicados, incluso cuando varias personas lo utilicen, y también agregar funciones como historial de emisión de órdenes de compra, proveedor, número de cotización, monto del pedido, fecha del pedido y ubicación de guardado del PDF.
A pesar de ser el director ejecutivo, siempre mantiene una actitud cercana. Disfruta aprendiendo sobre nuevas tecnologías y presenciando momentos de comodidad, y es una persona práctica y dedicada que se involucra por completo en su trabajo. Le entusiasman las tecnologías del futuro y desea seguir disfrutando de nuevas experiencias sin importar su edad.
Morimoto
Gerente de Proyectos / Director / Fundada en 2007