=== Podsync AI Product Feed Auditor ===
Contributors: globalmatchhub
Tags: merchant center, gtin, ean, upc, barcode
Requires at least: 6.0
Tested up to: 7.1
Requires PHP: 7.4
Requires Plugins: woocommerce
Stable tag: 0.1.2
License: GPLv2 or later
License URI: https://www.gnu.org/licenses/gpl-2.0.html

Finds the products a shopping channel will reject, before it rejects them. Checks barcode check digits, then builds the feed without the broken ones.

== Description ==

A shopping channel rejects a product and does not really tell you why. The usual advice is
to open Merchant Center once a week and work through the diagnostics tab. That means you
find out after the rejection, and a rejected product sells nothing in the meantime.

This plugin runs those checks in your own shop instead, before anything is sent. It does two
things, in the order that actually helps.

**First it tells you what is wrong.** Thirty-five checks against what the shopping channels
ask for, run over your real products, sorted by whether the problem stops your whole shop,
stops one product, or just costs you position. Ten products with no barcode become one line
that says so, with links to three of them.

**Then it builds the feed.** For channels that read an address, you get an address to paste
in. For channels that ask you to upload the file yourself, you get the file. Products with a
blocking problem are left out rather than sent broken, because a feed full of rejects gets
the whole shop marked down, including the products that were fine.

= Barcode check digits =

A barcode with one digit mistyped is worse than no barcode at all. It looks right on your
product screen, it passes an "is this field filled in" test, and the channel silently
fails to match it. From the outside nothing appears to be wrong, so there is nothing
prompting you to look.

This plugin does the arithmetic. A GTIN, UPC, EAN or ISBN carries a check digit calculated
from the digits before it, so a mistyped code can be caught before it costs you anything.
It also catches the commonest version of the mistake: a thirteen digit code with the last
digit dropped, which still looks like a valid twelve digit one.

Be clear about what this can and cannot know. The channels separate a code that is *invalid*,
meaning the arithmetic does not come out, from one that is *incorrect*, meaning the arithmetic
is fine but the code belongs to a different product. Arithmetic finds the first. Only the
manufacturer's own records can settle the second, so no plugin should claim to.

= What it checks =

* Whether your shop can be listed at all: policy pages, return window, currency, shipping
* Barcodes: missing, wrong length, and check digit arithmetic
* Titles and descriptions: too short, empty, formatted in a way that will not survive
* Images: missing, too few, too small
* Prices: missing, and sale prices entered above the regular price
* Stock: status missing, quantity not tracked where a channel needs the number
* Variations: colour and size missing, variations with no parent
* Products a channel refuses outright, and downloads where only physical goods are accepted

= What it will never do =

* Change or delete anything in your shop. It reads.
* Send your products, customers or orders to the plugin author.
* Put a feed at a public address for a channel that asks you not to.
* Tell you your shop is fine when it could not run the check.

= Built for a real catalogue =

A shop with twenty thousand products cannot be checked inside one page load, and a screen
that dies halfway is worse than a slow one. The check runs in pieces with a progress bar,
and each piece hands back well inside what your host allows. The feed is written to a
working file and swapped into place only when it is whole, so a channel reading at that
moment gets the previous feed or the new one, never half of either.

= Keeping up without updating =

The shopping channels change what they ask for. Those requirements live in a signed rule
file the plugin fetches once a day, so a change on their side does not wait for a plugin
release. Every file is checked against a signature made with a key that is not in this
plugin, refused if it is older than the one already in use, and refused if it describes
anything the plugin does not already know how to do. If any of that fails, or the server
cannot be reached, your shop carries on with the rules it already had.

== External services ==

This plugin connects to one service, run by the plugin author, to keep its list of channel
requirements current.

* **What is sent:** nothing. The request asks for a file and sends no shop data, product
  data, customer data or identifying information of any kind.
* **What is received:** a rule file describing what each shopping channel asks for, and a
  signature for it.
* **When:** once a day, and when you press "Check for new rules now".
* **Where:** https://podsync.lifeinsight-365.com/rules/ only.
* **Who runs it:** globalmatchhub, the author of this plugin.
* **Terms of service:** [podsync.lifeinsight-365.com/rules/terms](https://podsync.lifeinsight-365.com/rules/terms)
* **Privacy policy:** [podsync.lifeinsight-365.com/rules/privacy](https://podsync.lifeinsight-365.com/rules/privacy)

The plugin works without this service. Every release carries a full copy of the rules, and a
shop that never reaches the service keeps using the copy it already has. Nothing is sent to
it, so there is no data of yours to opt out of.

The plugin does not contact the shopping channels themselves. Feeds are built inside your
shop; you decide who reads them.

== Frequently Asked Questions ==

= Does this put my products on ChatGPT? =

No plugin can. Those channels admit merchants themselves, and at the time of writing not
every shop is eligible. What this does is get your product data into the shape they ask for
and build the file, so that when you apply you are not turned down for the data.

= Will it change my products? =

No. It reads your shop and reports. Every fix is something you do yourself, on your own
product screens.

= My shop has thousands of products. Will this time out? =

The check runs in pieces and shows progress. Each piece stops well before your host would.

= What if the plugin author disappears? =

Your shop keeps working. The rules are bundled inside the plugin, and the copy already
saved keeps being used. Nothing about the check or the feed depends on the author's server
being up.

= Which barcode formats are checked? =

GTIN-8, UPC-12, EAN-13 and GTIN-14, including the leading-zero form.

= This tells me what is wrong today. What about next month? =

This plugin answers the question you ask on the day you run it. A shop drifts, though:
bulk edits blank a field, an import runs badly, a channel quietly raises its bar. None of
that produces an error, and the products simply stop appearing.

A separate paid add-on, AI Shopping Feed Pro, keeps the history and emails you on the day
something that used to pass stops passing. It is an add-on: it never switches anything off
here, and this plugin stays complete on its own.
[Details and price](https://podsync.lifeinsight-365.com/ai-shopping-feed)

== Screenshots ==

1. The readiness screen: what stops your shop, what stops individual products, what costs position.
2. Settings: the four things WooCommerce does not record and every channel asks for.
3. Feeds: an address for the channels that read one, a download for the ones that do not.

== Changelog ==

= 0.1.2 =
* The addresses in the listing are links now. They were plain text, so nothing
  on wordpress.org pointed here in a way a reader — or a crawler — could follow.

= 0.1.1 =
* The listing now says where the paid add-on is. It was not mentioned anywhere,
  so nobody using this could find it.

= 0.1.0 =
* First release.
