mcpField
A
accounts-payable-workflow

accounts-payable-workflow

github.com/dengineproblemOther66 installs
Repository

About accounts-payable-workflow

A workflow skill for accounts-payable teams, covering invoice checks, approvals, payment scheduling, and metrics. It emphasizes matching purchase orders, receipts, and invoices, alongside separation of duties.

Key features

  1. 01Three-way PO, receipt, and invoice matching
  2. 02Invoice validation and duplicate detection
  3. 03Amount-based approval matrix
  4. 04Payment scheduling for early discounts
  5. 05Processing and exception metrics

Use cases

  1. 01Match orders, receipts, and invoices before payment
  2. 02Flag duplicate invoices and route approvals
  3. 03Schedule payments to capture early-payment discounts
  4. 04Track accounts-payable processing performance

Install

Copy the command and run it in a terminal.

$npx skills add https://github.com/dengineproblem/agents-monorepo --skill accounts-payable-workflow

After installing, type/accounts-payable-workflowin Claude Code to confirm it loaded.

Details

From the project README

Accounts Payable Workflow Expert

Эксперт по рабочим процессам кредиторской задолженности.

Основные принципы

Трехстороннее сопоставление
  • Заказ на покупку (PO): Авторизация на покупку
  • Получение товара: Доказательство поставки
  • Счет поставщика: Запрос на оплату
  • Все три документа должны совпадать перед утверждением
Разделение обязанностей
  • Ввод и утверждение счетов — разные люди
  • Авторизация платежей отдельно от исполнения
  • Изменения поставщика требуют двойного утверждения

Автоматизированный рабочий процесс

class APWorkflowEngine:
    def __init__(self):
        self.tolerance_price = 0.05  # 5%
        self.tolerance_qty = 0.02    # 2%

    def process_invoice(self, invoice):
        # 1. Захват данных и валидация
        extracted_data = self.ocr_extract(invoice)
        validation = self.validate_invoice_data(extracted_data)

        if not validation.is_valid:
            return self.route_to_exception_queue(invoice)

        # 2. Трехстороннее сопоставление
        matching = self.perform_three_way_match(extracted_data)

        if matching.has_exceptions:
            if matching.within_tolerance(self.tolerance_price, self.tolerance_qty):
                return self.route_for_payment(extracted_data)
            else:
                return self.route_for_approval(extracted_data, matching)

        # 3. Маршрутизация по матрице утверждений
        return self.route_based_on_amount(extracted_data)

Матрица утверждений

approval_matrix:
  department_managers:
    amount_limit: 10000
    auto_approve_tolerance: 0.02

  finance_director:
    amount_limit: 50000
    requires_backup_documentation: true

  cfo_approval:
    amount_limit: 250000
    requires_board_notification: true

Обнаружение дубликатов

def detect_duplicates(new_invoice):
    # Точные совпадения
    exact = db.query(
        "SELECT * FROM invoices WHERE vendor_id = ? AND invoice_number = ?",
        new_invoice.vendor_id, new_invoice.invoice_number
    )

    # Нечеткое сопоставление
    potential = db.query(
        """SELECT * FROM invoices
           WHERE vendor_id = ?
           AND invoice_date BETWEEN ? AND ?
           AND ABS(amount - ?) < ?""",
        new_invoice.vendor_id,
        new_invoice.invoice_date - timedelta(days=30),
        new_invoice.invoice_date + timedelta(days=30),
        new_invoice.amount,
        new_invoice.amount * 0.05
    )

    return {'exact': exact, 'potential': potential}

Оптимизация платежей

class PaymentScheduler:
    def optimize_payment_schedule(self, approved_invoices):
        for invoice in approved_invoices:
            # Скидка за досрочную оплату
            discount_deadline = invoice.due_date - timedelta(days=invoice.early_pay_days)
            discount_value = invoice.amount * (invoice.early_pay_rate / 100)

            if discount_deadline >= date.today() and discount_value > 100:
                payment_date = discount_deadline
                payment_amount = invoice.amount - discount_value
            else:
                payment_date = invoice.due_date - timedelta(days=2)
                payment_amount = invoice.amount

            yield {
                'invoice_id': invoice.id,
                'payment_date': payment_date,
                'payment_amount': payment_amount,
                'discount_captured': discount_value
            }

KPI мониторинг

def generate_ap_metrics(start_date, end_date):
    return {
        'processing_efficiency': {
            'average_processing_time': calc_avg_time(start_date, end_date),
            'straight_through_rate': calc_stp_rate(start_date, end_date),
            'exception_rate': calc_exception_rate(start_date, end_date)
        },
        'cost_savings': {
            'early_payment_discounts': sum_discounts(start_date, end_date),
            'duplicates_prevented': count_duplicates(start_date, end_date)
        },
        'compliance': {
            'three_way_match_rate': calc_3way_compliance(start_date, end_date),
            'sod_violations': count_sod_violations(start_date, end_date)
        }
    }

Лучшие практики

  • Используйте OCR и ML для автоматизации ввода данных
  • Внедрите портал самообслуживания для поставщиков
  • Шифруйте банковскую информацию
  • Поддерживайте полный аудиторский след
  • Тестируйте соответствие SOX регулярно

Comments

Markdown supported