Skip to main content

PPAR Audit

Explain why reported portfolio performance changed.

PPAR Audit answers a difficult operational question: "Why did my reported portfolio performance change?" It compares two portfolio-accounting snapshots, quantifies supported causes across holdings, transactions, prices, FX, and related data, flags suspicious source-data relationships, and produces reviewer-ready Excel and HTML reports. When the available evidence is insufficient, the unexplained difference stays visible for human review.

  • Everything runs locally, so portfolio data stays inside your environment.
  • The Python implementation supports automated batch runs and local customization.
  • Standard output includes XLSX, HTML, CSV, JSON, and compact evidence bundles.

Download the product overview (PDF) | License

Downloading, installing, accessing, copying, or using PPAR constitutes acceptance of the license. The public package grants a time-limited internal evaluation license only; production and other commercial use require a separate written commercial agreement.


What PPAR Audit Answers

PPAR Audit is built around one operational question:

Why did my reported performance change?

  • Performance Comparison: identifies changed portfolio and security performance for each time period, quantitatively attributes defensible differences to supported source-data changes, and highlights anything that still needs human review.
  • Data Issues: flags suspicious source-data relationships — including price ranges, dividend rates, accrued-interest rates, and missing dividends — that may indicate data-quality issues independently of the performance explanation.

PPAR Audit portfolio report


Setup

PPAR requires Python 3.11.9 or newer.

Install the PPAR package:

pip install ppar

Create a local PPAR Audit workspace. The workspace includes PPAR-normalized demonstration data modeled on Axys/APX source and report data, so you can run the complete workflow before replacing the CSV files with reviewed exports from your own environment.

ppar setup ./my_ppar_audit

Run Audit:

ppar audit ./my_ppar_audit

Follow the Customizing With Your Own Data section in ./my_ppar_audit/README.md when you are ready to customize the workspace with your own data.

my_ppar_audit/
  README.md
  ppar.yaml
  run_audit.py
  snapshot_a/
    portperf.csv
    holdings.csv
    transactions.csv
    secmast.csv
    secperf.csv
    splits.csv
  snapshot_b/
    portperf.csv
    holdings.csv
    transactions.csv
    secmast.csv
    secperf.csv
    splits.csv

Inputs

The demonstration files are PPAR-normalized CSVs modeled on Axys/APX data. Production inputs may come from reviewed REP, IMEX, custom-report, or other controlled exports:

  • portfolio performance;
  • security performance;
  • holdings;
  • transactions;
  • security master data;
  • split factors.

Audit uses two source-data snapshots. Snapshot A is normally the older or original state and Snapshot B is normally the newer or restated state, but neither snapshot is presumed correct.

PPAR normalizes those files through a customizable ppar.yaml file, so each site can configure its local field names, transaction-code treatment, comparison tolerances, and report assumptions. The setup-created file documents these choices in place.

The configured file and accounting contracts fail closed when required source treatment is missing or ambiguous. Optional evidence does not silently expand the calculation or policy surface.


Outputs

PPAR Audit writes review packages:

output/
  portfolio/
    portfolio_audit.xlsx
    portfolio_audit.html
    source_detail.csv
    audit_support.zip
  security/
    security_audit.xlsx
    security_audit.html
    source_detail.csv
    audit_support.zip

To prevent unusably large artifacts, Audit stops with a nonzero exit code before writing a report when any primary review table would exceed 100,000 rows. The error identifies the oversized table and its largest contributors so the user can narrow the portfolio or date scope or correct upstream differences.


Current Validation Scope

PPAR Audit has substantial automated coverage, financial invariants, report reconciliation checks, output-integrity checks, deterministic demonstrations, and maintained scale gates.

It has not yet been validated against a real client's production-style Axys/APX exports and approved local accounting policy. The current program is seeking a small number of strong validation partners to test source authenticity, setup burden, financial interpretation, false positives, and reviewer usefulness.

PPAR Audit detects, compares, explains, and helps investigate supported portfolio-performance and source-data differences. It does not provide a financial-statement audit, GIPS verification, attestation, certification, or assurance opinion.


Additional Repository Capability

This repository also contains ppar.analytics, a maintained module for benchmark-relative performance attribution, contribution, and ex-post risk reporting. It is retained for future PPAR packaging but is not part of the current PPAR Audit validation program or default onboarding workflow.

Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distribution

ppar-0.1.7.tar.gz (1.1 MB view details)

Uploaded Source

Built Distribution

If you're not sure about the file name format, learn more about wheel file names.

ppar-0.1.7-py3-none-any.whl (1.1 MB view details)

Uploaded Python 3

File details

Details for the file ppar-0.1.7.tar.gz.

File metadata

  • Download URL: ppar-0.1.7.tar.gz
  • Upload date:
  • Size: 1.1 MB
  • Tags: Source
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/6.2.0 CPython/3.12.1

File hashes

Hashes for ppar-0.1.7.tar.gz
Algorithm Hash digest
SHA256 2f1bc9e930b6b15c1ae59c731d010a3f034df1eb8a241db6bc92e6656c7fab96
MD5 9acc695704dfa8e5d97db4fb89e609c3
BLAKE2b-256 82ed478994862c71601b906edd1a57def15a20519f1603d184678397480d1686

See more details on using hashes here.

File details

Details for the file ppar-0.1.7-py3-none-any.whl.

File metadata

  • Download URL: ppar-0.1.7-py3-none-any.whl
  • Upload date:
  • Size: 1.1 MB
  • Tags: Python 3
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/6.2.0 CPython/3.12.1

File hashes

Hashes for ppar-0.1.7-py3-none-any.whl
Algorithm Hash digest
SHA256 680e279241b8aaa6a73d360565ea79b0e3441b4b9609d1a8aa05931ed5681769
MD5 12430bf4336e5a51543800aaa0b70d60
BLAKE2b-256 30071da8d8764c5eb38d842d13bd097d4909f86d95156f66c372ec8f3ba08296

See more details on using hashes here.

Release history Release notifications | RSS feed

0.4.0

1 file

0.3.1

1 file

0.3.0

1 file

0.2.1

1 file

0.2.0

1 file

This release

0.1.7 This release

2 files

0.1.6

2 files

0.1.5

2 files

0.1.4

2 files

0.1.3

2 files

0.1.2

2 files

0.1.1

2 files

0.1.0

2 files

Anthropic, PBC Visionary sponsor Bloomberg Visionary sponsor Hudson River Trading Visionary sponsor Meta Visionary sponsor NVIDIA Visionary sponsor Microsoft Sustainability sponsor Depot Continuous Integration AWS Cloud computing and Security Sponsor Datadog Monitoring Fastly CDN Google Download Analytics Sentry Error logging StatusPage Status page